远程连接不间断训练和可视化

发布于:2023-01-22 ⋅ 阅读:(558) ⋅ 点赞:(0)

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博客