服务器代码完成后自动关机
a) 终端运行方式
# 假设程序原执行命令为
python train.py
# 那么可以在您的程序后跟上shutdown命令
python train.py; shutdown # 用;拼接意味着前边的指令不管执行成功与否,都会执行shutdown命令
python train.py && shutdown # 用&&拼接表示前边的命令执行成功后才会执行shutdown。请根据自己的需要选择
b) python代码中执行shutdown指令
import os
if __name__ == "__main__":
# xxxxxx
os.system("shutdown")
Linux基础
查看GPU信息
# 查看一次当前GPU信息
命令:nvidia-smi
# 如果需要不停的输出GPU占用信息,
那么使用:
nvidia-smi -l 1 #每隔1秒输出一次,
或使用
watch -n 1 nvidia-smi #也是同样的效果
重定向日志
命令: >
user@seeta:/tmp$ python train.py # 一般情况下日志会输出到stdout/stderr中
Epoch.1 Iter 20
Epoch.1 Iter 40
Epoch.1 Iter 50
...
user@seeta:/tmp$ python train.py > ./train.log 2>&1 # 把stdout/stderr中的日志重定向到train.log文件中,最后的2>&1中,2代表stderr, 1代表stdout,&1可以理解成像c语言中的求地址
user@seeta:/tmp$ cat ./train.log # 将train.log文件中的内容打印在stdout。cat(Concatenate FILE(s) to standard output.)
Epoch.1 Iter 20
Epoch.1 Iter 40
Epoch.1 Iter 50
...
user@seeta:/tmp$ python train.py > ./train.log 2>&1 & # 如果最后再加一个&的效果是后台运行,还可以参考nohup的配合使用
设置环境变量
命令: export
以常见的两个环境变量:PATH和LD_LIBRARY_PATH为例
1. PATH
如果你有自己安装的命令,希望暴露出来直接使用。比如miniconda中的python,如果不加环境变量一般需要写完整的路径:/x/x/x/miniconda3/bin/python,如果希望直接写python就能用到调用conda中的python指令,那么可以:
export PATH=/x/x/x/miniconda3/bin:$PATH
先解释上述命令的格式,右侧的路径可以写多个,以:分隔,$PATH表示求PATH变量的值,因为PATH环境变量以前可能已经有值,需要保留那些值不影响其他命令的使用,其次当输入了python命令时,会从PATH变量的路径下去找python可执行文件,先找到哪个就用哪个,因此:前后路径的先后顺序也很重要。
2. LD_LIBRARY_PATH
和PATH路径一样,只不过LD_LIBRARY_PATH是设置动态链接库的搜索路径。比如安装了CUDA以后,一般需要设置:
export LD_LIBRARY_PATH=/usr/local/cuda/lib64:$LD_LIBRARY_PATH
如果要查看是否设置成功可以使用命令:env | grep PATH 进行确认
最后以上设置的环境变量只在当前terminal的上下文中有效,如果希望全局有效,那么将export命令写入文件: ~/.bashrc,然后执行:source ~/.bashrc 生效或新打开终端
删除文件
命令:rm (remove)
参数: -rf (-r代表递归, -f代表强制)
user@seeta:/tmp/test_directory$ ls
a.txt folder
user@seeta:/tmp/test_directory$ rm -rf folder
user@seeta:/tmp/test_directory$ rm -rf folder/* # *是通配符号,这样代表folder文件夹下所有文件/文件夹```
列出文件、文件夹
命令:ls(list)
user@seeta:/tmp/test_dir$ ls # 列出当前目录下的文件和文件夹
a.txt b
user@seeta:/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@seeta:/tmp$ mkdir test_dir # 新建一个叫test_dir的路径
user@seeta:/tmp$ cd test_dir/ # 进入 test_dir 路径
user@seeta:/tmp/test_dir$
场景
场景1
场景:发现程序停止了,但是显存还在占用
一般这种情况是进程假死,看上去停止了但是实际还在。可以通过ps -ef查看进程是否还存在,如果存在则用kill命令杀死进程,最后用nvidia-smi检查显存是否已经释放。
场景2
场景:想把实例中的模型/数据保存在网盘中一份,方便其他实例使用
user@seeta:~$ pwd
/root/
user@seeta:~$ ls
train.py autodl-tmp autodl-nas
user@seeta:~$ cp -r train.py autodl-nas/ # 把 train.py 文件存入网盘中
场景3
场景:发现进程内存会使用超过限制,导致进程被Killed
可以使用Top命令查看进程的占用内存情况,确认内存是不是会停留在一个值而不会一直增长,如果一直增长说明程序对内存的释放有漏洞,可以分析Python代码变量的引用来进行优化。
场景4
场景:使用JupyerLab的终端挂守护进程跑训练,担心关闭网页期间的日志看不到了
可以使用重定向日志功能,把日志写入文件