一、用Xshell
名称可以随便改,填入主机IP和端口号,点击连接输入密码即可。
二、GPU状态查看
watch -n 1 nvidia-smi #其中,--n是代表刷新时间,1就是每秒刷新一次;
或者直接nvidia-smi
三、传输文件
四、运行代码
cd切换到文件目录,conda activate **环境;conda env list可以查看当前所有的环境
python xxx.py
不过我们可能需要并行运行多种参数的代码(转https://blog.csdn.net/qq_41105401/article/details/111166929)
在命令后面加上&即可让命令在后台执行。为了能看到训练日志,可以使用>将输出重定向到一个文件中(否则会直接打印到屏幕上)
运行的时候代码中要调的参数用argparse(比较常见的东西,如果你读别人的代码的话几乎都是用这个的)
比如要调整dropout参数和lr参数:
python train.py --dropout=0.6 --lr=0.005 > log_001.txt &
用jobs命令可以查看后台任务的运行状况(任务号、进程号、stopped、running等),在前台运行的程序用ctrl+z可以stop它并丢到后台,用bg [任务号] (不含方括号,介绍linux命令的文档都是这种格式哦)命令可以让stopped的任务继续在后台跑,用fg[任务号]命令可以让后台的任务来前台执行。
为了防止忘记上面调了那些参数,可以把命令写成shell脚本,即创建一个xxx.sh文件,把上面的这条命令放进去,然后赋予文件权限后用 ./xxx.sh 即可
还可以在y前面加上指令指定使用哪块GPU,比如
CUDA_VISIBLE_DEVICES=0 python train.py --dropout=0.6 --lr=0.005 > log_001.txt &
就是使用0号GPU
注意:对于TensorFlow用 户而言,程序中新建Session时一定要设置gpu_options.allow_growth为True。否则 TensorFlow 会占用掉你选中显卡的所有显存
有时候可能想要跑多个参数,可以把多个参数放到.sh文件中让它一个一个跑,然后就可以愉快地摸鱼去啦~
如何让代码在后台运行
$ nohup python test.py
这样执行的时候会将代码放在服务器后台执行,你的终端是看不到运行过程的,期间运行的结果(代码运行过程中打印出来的)会在一个生成的nohup.out文件中保存。
另一种方法:screen
可以简单的认为用这个命令你可以为不同的任务开不同的窗口,这个窗口之间是可以切换的,同时,窗口和你的会话连接基本上没有任何区别,这样你可以在开一个连接的时候同时干多件事情,并且在终端看得到运行过程的同时而不会由于断网而导致代码停止运行。其常用命令如下:
screen -S name #创建一个窗口,并且为窗口命名 screen -S yolo
执行完以上命令后,就会自动跳入名为yolo的窗口,在这个窗口里可以干你想干的事情。不想呆在这个窗口时,可以通过快捷键Ctrl+a+D断开这个窗口的连接而回到连接会话界面。但是这个断开只是不显示那个窗口,而窗口对应的任务是在后台运行的。
$screen -ls #可以查看已创建的所有窗口
执行上述指令后,可以看到窗口的名字和id,Detached说明窗口是断开的,再次强调这里的断开是指没有让他显示,其对应的任务是在后台执行的。
重新连接Detached的窗口:如果想看其中一个窗口任务的执行状态,可以通过指令:$screen -r ssd #重新连接到yolo窗口,显示其运行过程。
杀死某个窗口
- 如果想直接停止某个窗口任务的运行,可以直接通过杀死id的方式 $kill -9 28475 #终止ssd窗口对应任务的运行,同时杀死该窗口 执行完以上指令再看存在的窗口时后会发现只剩名为yolo的窗口了
- 在该窗口内敲
exit,
就可以彻底删除该窗口以及窗口内的作业 - -wipe 检查目前所有的screen作业,并删除已经无法使用的screen作业。
窗口连接不上的情况
用 screen -ls, 显式当前状态为Attached, 但当前没有用户登陆些会话。screen此时正常状态应该为(Detached)
此时用screen -r ,怎么也登不上。最后找到解决方法:screen -D -r <session-id>
-D -r 先踢掉前一用户,再登陆。
user@ubuntu-Super-Server:~/code$ screen -lsThere is a screen on: 28113.yolo (2017年11月27日 19时57分26秒) (Detached)
总结一下,screen可以实现代码在后台运行时的可视化,同时,能在开一个会话连接时创建多个窗口处理不同的任务。用起来也很方便。
其他
使用如下指令的前提是安装好了NVIDIA的驱动(cuda。。)。
$ CUDA_VISIBLE_DEVICES=2 python test.py
在使用gpu版本的tensorflow时,跑对应的代码(如果代码中没有明确指定用哪个gpu跑)默认会调用所有的gpu,使用如上命令后可以指定所使用的gpu。
$ nvidia-smi
执行上述指执行上述指执行上述指执行上述指执行上述指令可以查看服务器上gpu的使用状况。