1.nohup命令介绍
nohup命令:如果你正在运行一个进程,而且要求在退出帐户时该进程还不会结束,那么可以使用nohup命令。该命令可以在你退出帐户/关闭终端之后/断网继续运行相应的进程。
在缺省情况下程序的所有输出都被重定向到一个名为nohup.out的文件中。
总结了以下常用的远程训练指令,帮你可以不间断的训练模型,并且随时可以查看模型可视化结果。
1.1缺省输出文件的写法
nohup python3 -W ignore -m xxx.py
在这种写法下,所有输出被保存到该目录的nohup.out内,且实时读写,如图,使用ls查看该文件夹下的文件
查看进程号命令:jobs -l或者ps ux
关闭进程:kill -9 进程号
注意,如果是当前的xshell断了,我们重新连上之后, jobs -l
命令就不好使了,这时候得用ps ux
1.2 指定输出文件的写法
nohup python3 -u xxx.py > log_file.txt &
其中log_file.txt需要自己创建在当前根目录下
按crl+G组合键可在搜索框内跳到指定行
就会将xxx.py的输出全部存到log_file.txt里
1.3 和CUDA一起用
有一台服务器,服务器上有多块儿GPU可以供使用,但此时只希望使用第2块和第4块GPU,但是我们希望代码能看到的仍然是有两块GPU,分别编号为0,1,这个时候我们可以使用环境变量CUDA_VISIBLE_DEVICES 来解决这个问题。
比如
CUDA_VISIBLE_DEVICES=1 只有编号为1的GPU对程序是可见的,在代码中gpu[0]指的就是这块儿GPU
CUDA_VISIBLE_DEVICES=0,2,3 只有编号为0,2,3的GPU对程序是可见的,在代码中gpu[0]指的是第0块儿,gpu[1]指的是第2块儿,gpu[2]指的是第3块儿
CUDA_VISIBLE_DEVICES=2,0,3 只有编号为0,2,3的GPU对程序是可见的,但是在代码中gpu[0]指的是第2块儿,gpu[1]指的是第0块儿,gpu[2]指的是第3块儿
CUDA指令在前
CUDA_VISIBLE_DEVICES=1 nohup python3 -W ignore -m xxx.py
1.4 配合visdom使用
有时我们会使用visdom将训练结果可视化,但是登出系统会自动把visdom也关闭,影响查看效果,因此可以直接使用nohup打开visdom,这样即使登出服务器,下次登入也可以在指定端口上访问可视化结果
nohup python -m visdom.server
1.5 清空日志
不停止服务直接,清空nohup.out文件的方法。
两个可以不用停止WEB服务就可以清空nohup.out(log_path或者log_file)的命令。
- 第一种:
cp /dev/null nohup.out
- 第二种:
cat /dev/null > nohup.out
参考连接:一文明白使用nohup将服务器训练程序后台运行不关闭+随时通过查看训练情况输出与visdom可视化_Haor.L的博客-CSDN博客