智星云文档智星云文档
返回官网
返回官网
  • 新手入门

    • 算力租用流程
    • 常见问题
    • 如何选择GPU
  • 技术相关

    • 智星云修改HOST解决跨网域名解析问题
    • turbovnc安装配置
    • 智星云huggingface加速节点使用教程
    • AI模型库:服务器预载,极速下载
    • linux安装cuda和pytorch方法
    • 测试服务器带宽的方法
    • windows常见问题
    • GPU测速
    • Linux实用基础
    • jupyter notebook连接linux
    • VSCode连接到云主机
    • macOS系统连接到云主机
    • 拓展磁盘
    • 端口映射
    • GPU无法调用
    • ssh链接保持
    • ssh在云主机后台运行
    • 基于SSH的链接异常
    • VSCode远程连接失败
    • centos7-epel加速
    • conda使用源
    • docker镜像压缩
    • dynslam安装
    • huggingface下载
    • ubuntu安装显卡驱动
    • 编译tensorflow
    • linux上传文件&数据上传Windows
    • 更新git到最新
    • 回环设备
    • nvidia-smi输出解析
    • Topaz 视频处理教程

Linux 基础命令使用指南

目前,实例的系统默认为 Linux Ubuntu 发行版,因此熟悉使用基本的 Linux 命令对于训练模型非常有必要。

以下是常用命令的使用说明:

目录

  • 文件与目录操作
  • 环境变量设置
  • 文件编辑
  • 压缩与解压
  • 系统监控
  • 进程管理
  • 日志重定向
  • 常见场景

文件与目录操作

列出文件/文件夹

命令:ls (list)

user@host:/tmp/test_dir# ls    # 列出当前目录下的文件和文件夹
a.txt  b
user@host:/tmp/test_dir# ls -l  # 列出文件和文件夹的详细信息:权限,Owner,Group和创建/更新时间
total 4
-rw-rw-r-- 1 root root    0 11月  9 10:50 a.txt
drwxrwxr-x 2 root root 4096 11月  9 10:50 b

新建/切换路径

新建命令:mkdir (make directory)

切换命令:cd (change working directory)

user@host:/tmp# mkdir test_dir   # 新建一个叫test_dir的路径
user@host:/tmp# cd test_dir/     # 进入 test_dir 路径
user@host:/tmp/test_dir#

特殊目录符号:

  • .. 或 ../:代表上一级目录
  • . 或 ./:代表当前目录
user@host:/tmp/test_dir# cd ../test_dir/   # 上一级目录下有test_dir目录
user@host:/tmp#

查看当前路径

命令:pwd (print working directory)

user@host:~# pwd
/root/
user@host:~#

重命名、移动文件/文件夹

命令:mv (move)

user@host:/tmp# mv test_dir/ test_directory   # 将test_dir目录重命名为test_directory,文件重命名同样适用
user@host:/tmp# cd test_directory/
user@host:/tmp/test_directory# mkdir a b     # 创建两个文件夹a和b 
user@host:/tmp/test_directory# ls
a  b
user@host:/tmp/test_directory# mv a b/       # 将a移动到b目录下。如果b目录不存在的话,这条命令相当于将a重命名为b
user@host:/tmp/test_directory# tree
.
└── b
    └── a

拷贝文件/文件夹

命令:cp (copy)

参数:-r (-r 代表递归)

user@host:/tmp/test_directory# mkdir a b     # 创建两个文件夹a和b 
user@host:/tmp/test_directory# ls
a  b
user@host:/tmp/test_directory# cp -r a b       # 将a文件夹拷贝到b文件夹下,-r代表递归拷贝
user@host:/tmp/test_directory# tree
.
└── a
└── b
    └── a

删除文件/文件夹

命令:rm (remove)

参数:-rf (-r 代表递归,-f 代表强制)

user@host:/tmp/test_directory# ls
a.txt  folder
user@host:/tmp/test_directory# rm -rf folder   
user@host:/tmp/test_directory# rm -rf folder/*   # *是通配符号,这样代表folder文件夹下所有文件/文件夹

环境变量设置

命令:export

PATH 环境变量

如果你有自己安装的命令,希望直接使用而不需要写完整路径。例如 miniconda 中的 python,如果不加环境变量一般需要写完整路径:/x/x/x/miniconda3/bin/python,如果希望直接使用 python 命令,可以设置:

export PATH=/x/x/x/miniconda3/bin:$PATH

说明:

  • 路径可以写多个,以 : 分隔
  • $PATH 表示获取 PATH 变量的当前值
  • 需要保留原有值,避免影响其他命令的使用
  • 当输入命令时,系统会从 PATH 变量的路径中按顺序查找可执行文件,先找到哪个就用哪个,因此路径的先后顺序很重要

LD_LIBRARY_PATH 环境变量

LD_LIBRARY_PATH 用于设置动态链接库的搜索路径。例如安装了 CUDA 以后,一般需要设置:

export LD_LIBRARY_PATH=/usr/local/cuda/lib64:$LD_LIBRARY_PATH

查看环境变量

查看是否设置成功可以使用命令:

env | grep PATH

永久设置环境变量

以上设置的环境变量只在当前 terminal 的上下文中有效。如果希望全局有效,可以将 export 命令写入文件 ~/.bashrc,然后执行:

source ~/.bashrc

或者重新打开终端。

文件编辑

命令:vim

vim 的高级使用较复杂,请参考其他文档学习。

压缩与解压

命令:zip、unzip、tar

  • zip 和 unzip:针对 zip 格式的压缩包进行压缩和解压
  • tar:Linux 中更通用的压缩解压工具
# zip 和 unzip
# 如果没有 zip 请使用以下命令安装:
# apt-get update && apt-get install -y zip

user@host:/tmp/$ zip -r dir.zip test_directory/   # 将 test_directory 文件夹压缩为 dir.zip 文件
user@host:/tmp/$ unzip dir.zip                    # 将 dir.zip 文件解压

# tar 命令
# 参数说明:c 代表压缩,x 表示解压,z 代表 gz 格式,j 代表 bz2 格式

# 压缩/解压 .tar.gz 格式
user@host:/tmp/$ tar czf dir.tar.gz test_directory/   # 压缩为 dir.tar.gz 文件
user@host:/tmp/$ tar xzf dir.tar.gz                   # 解压 dir.tar.gz 文件

# 压缩/解压 .tar.bz2 格式
user@host:/tmp/$ tar cjf dir.tar.bz2 test_directory/  # 压缩为 dir.tar.bz2 文件
user@host:/tmp/$ tar xjf dir.tar.bz2                  # 解压 dir.tar.bz2 文件

系统监控

查看 GPU 信息

命令:nvidia-smi

user@host:/tmp/test_directory# nvidia-smi
Mon Nov  8 11:55:26 2021       
+-----------------------------------------------------------------------------+
| NVIDIA-SMI 440.82       Driver Version: 440.82       CUDA Version: 10.2     |
|-------------------------------+----------------------+----------------------+
| GPU  Name        Persistence-M| Bus-Id        Disp.A | Volatile Uncorr. ECC |
| Fan  Temp  Perf  Pwr:Usage/Cap|         Memory-Usage | GPU-Util  Compute M. |
|===============================+======================+======================|
|   0  TITAN X (Pascal)    Off  | 00000000:01:00.0  On |                  N/A |
| 31%   57C    P0    66W / 250W |    408MiB / 12194MiB |      2%      Default |
+-------------------------------+----------------------+----------------------+
|   1  TITAN X (Pascal)    Off  | 00000000:04:00.0 Off |                  N/A |
| 93%   27C    P8    11W / 250W |      2MiB / 12196MiB |      0%      Default |
+-------------------------------+----------------------+----------------------+

+-----------------------------------------------------------------------------+
| Processes:                                                       GPU Memory |
|  GPU       PID   Type   Process name                             Usage      |
|=============================================================================|
|    0      1450      G   /usr/lib/xorg/Xorg                            32MiB |
|    0      2804      G   /usr/lib/xorg/Xorg                           351MiB |
+-----------------------------------------------------------------------------+

关键字段说明:

  • Memory-Usage:显存使用情况
    • 408MiB / 12194MiB:前者代表已使用的显存,后者代表总显存
  • GPU-Util:GPU 使用率
    • 2%:使用率百分比

持续监控 GPU: 如果需要持续输出 GPU 占用信息,可以使用:

  • nvidia-smi -l 1:每隔 1 秒输出一次
  • watch -n 1 nvidia-smi:同样的效果

进程管理

查看进程

命令:ps

root@container-5e3e11aeb4-948a17b1:~# ps -ef 
UID          PID    PPID  C STIME TTY          TIME CMD
root           1       0  0 14:04 ?        00:00:00 bash /init/boot/boot.sh
root          58      48  8 14:04 ?        00:00:03 /root/miniconda3/bin/python /root/miniconda3/bin/jupyter-lab --allow-root
root          60      48  0 14:04 ?        00:00:00 /usr/sbin/sshd -D
root          61      48 10 14:04 ?        00:00:04 /root/miniconda3/bin/python /root/miniconda3/bin/tensorboard --host 0.0.0.0 --port 6006 --logdir /root/tf-logs
root         146      61  0 14:04 ?        00:00:00 /root/miniconda3/lib/python3.8/site-packages/tensorboard_data_server/bin/server --logdir=/root/tf-logs
root         402     338 99 14:05 pts/0    00:00:06 python tensorflow2.x-test.py

从 ps 的输出结果中根据执行的命令名称找到要杀死的进程。例如,python tensorflow2.x-test.py 命令的进程 ID 是 402。

杀死进程

命令:kill

root@container-5e3e11aeb4-948a17b1:~# kill -9 402
root@container-5e3e11aeb4-948a17b1:~#

说明:

  • -9 参数表示强制杀死进程
  • 执行后可以再次使用 ps -ef 确认进程是否已经结束

查看进程的 CPU 和内存占用

命令:top

Tasks:  11 total,   2 running,   9 sleeping,   0 stopped,   0 zombie
%Cpu(s):  2.3 us,  1.3 sy,  0.0 ni, 96.3 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
KiB Mem : 52801571+total, 45453059+free,  7807904 used, 65677196 buff/cache
KiB Swap:  2074620 total,  2074620 free,        0 used. 51678192+avail Mem 
    PID user@host      PR  NI    VIRT    RES    SHR S  %CPU %MEM     TIME+ COMMAND             
   2316 root      20   0 21.846g 1.796g 244664 R 101.4  0.4   0:05.56 python               
     58 root      20   0  372352  84804  15540 S   1.4  0.0   0:05.40 jupyter-lab         
     59 root      20   0  713796  11288   7668 S   1.4  0.0   0:01.31 proxy               
   2395 root      20   0   45920   3940   3444 R   1.4  0.0   0:00.01 top                 
      1 root      20   0   25368   3724   3404 S   0.0  0.0   0:00.07 bash                 
     48 root      20   0   55060  24328   9728 S   0.0  0.0   0:00.33 supervisord         
     60 root      20   0   72304   5872   5140 S   0.0  0.0   0:00.01 sshd                 
     61 root      20   0 9756148 315032 156124 S   0.0  0.1   0:04.16 tensorboard         
    146 root      20   0 1582996   6964   5296 S   0.0  0.0   0:00.04 server               
    338 root      20   0   25824   4312   3800 S   0.0  0.0   0:00.18 bash                 
    481 root      20   0   25824   4544   4040 S   0.0  0.0   0:00.18 bash

使用说明:

  • 如果有高负载(CPU 使用率高)的情况,进程会排在最上边
  • 根据进程名称可以进行确认
  • %CPU 字段:显示 CPU 占用率
  • RES 字段:显示内存使用大小(一般看这个字段就够了)

示例:上边第一个 Python 进程 CPU 的占用率是 101.4%,内存使用大小是 1.796g。

提示:如果内存显示的单位和上述不同,按 e 键可以切换单位。

日志重定向

命令:>、>>、2>&1

# 一般情况下日志会输出到 stdout/stderr 中
user@host:/tmp# python train.py
Epoch.1 Iter 20
Epoch.1 Iter 40
Epoch.1 Iter 50
...

# 将 stdout/stderr 中的日志重定向到 train.log 文件中
# 说明:2>&1 中,2 代表 stderr,1 代表 stdout,&1 表示 stdout 的文件描述符
user@host:/tmp# python train.py > ./train.log 2>&1

# 查看日志文件内容
# cat:Concatenate FILE(s) to standard output
user@host:/tmp# cat ./train.log
Epoch.1 Iter 20
Epoch.1 Iter 40
Epoch.1 Iter 50
...

# 后台运行并重定向日志
# 最后的 & 表示后台运行,还可以配合 nohup 使用
user@host:/tmp$ python train.py > ./train.log 2>&1 &

常见场景

场景 1:程序停止但显存仍被占用

问题:发现程序停止了,但是显存还在占用。

解决方案: 一般这种情况是进程假死,看上去停止了但实际还在运行。可以通过以下步骤解决:

  1. 使用 ps -ef 查看进程是否还存在
  2. 如果存在,使用 kill 命令杀死进程
  3. 使用 nvidia-smi 检查显存是否已经释放

场景 2:将模型/数据保存到网盘

问题:想把实例中的模型/数据保存在网盘中一份,方便其他实例使用。

解决方案:

user@host:~# pwd
/root/
user@host:~# ls
train.py  autodl-tmp  autodl-nas
user@host:~# cp -r train.py autodl-nas/   # 把 train.py 文件存入网盘中

场景 3:进程内存超限被 Killed

问题:发现进程内存会使用超过限制,导致进程被 Killed。

解决方案: 可以使用 top 命令查看进程的内存占用情况:

  • 确认内存是否会停留在一个值而不会一直增长
  • 如果一直增长,说明程序对内存的释放有漏洞
  • 可以分析 Python 代码变量的引用来进行优化

场景 4:JupyterLab 终端日志保存

问题:使用 JupyterLab 的终端运行守护进程训练,担心关闭网页期间的日志看不到了。

解决方案: 可以使用重定向日志功能,把日志写入文件(参考日志重定向部分)。

Prev
GPU测速
Next
jupyter notebook连接linux