第一次通过服务器远程跑代码
在师姐保姆级教导下进行一次尝试。
由于师姐特别nice,而我特别小白,所以其实这篇更像我的一次日志记录,而非经验贴,给不了同为小白的朋友们什么帮助。
一、下载安装MobaXterm
MobaXterm free Xserver and tabbed SSH client for Windows
二、连接服务器
点击session -> ssh,填remote host、specify username、port(因为师姐是直接发给我的,填进去就好,我还不知道如何获取可用服务器信息)。
填好确认后,在左侧user sessions中出现了目标服务器,双击连接,输入密码(ubuntu命令窗输入密码时屏幕一直黑的,不会显示输入了什么以及输入了几位,我一开始还以为键盘坏了…)。
连接成功后,左侧可以进行从本电脑到远程终端的文件传输,右侧是黑乎乎的terminal。
三、跑代码
(由于这是师姐常用的远程终端,所以环境什么的已经搭好了,我激活就行)
1、激活环境
conda activate xxx
2、进入工程文件所在的文件夹目录
常用命令:
pwd显示当前路径
cd ..返回上一级目录
cd home/psp/打开了psp文件夹
3、确认工程中各个.py文件无误
4、打开与服务器新的连接,检测显卡情况
watch nvidia-smi
5、用命令运行代码文件
我的命令:指定要用的显卡+要跑的文件+要用的参数
CUDA_VISIBLE_DEVICES=0,1 python scripts/train.py --exp_dir=results/train_attn --batch_size=4 --test_batch_size=4
然后就是不断报错,打开文件找到报错的行数,按照错误类型找问题到底在哪儿,然后再跑再改再跑…
6、把进程放进后台跑(一些Linux命令)
Ⅰ、放进后台操作:
nohup python -u train.py > train.log 2>&1 &
#师姐给的注释:
(1)nohup 不挂起的意思。
(2)-u 代表程序不启用缓存,也就是把输出直接放到log中,没这个参数的话,log文件的生成会有延迟。
(3)> train.log 将输出日志保存到这个log中。
(4)2>1 2与>结合代表错误重定向,而1则代表错误重定向到一个文件1,而不代表标准输出;
2>&1 &与1结合就代表标准输出了,就变成错误重定向到标准输出。(这个我没看懂)
(5) 最后一个& ,代表该命令在后台执行。
结合我们这次的命令,最终写作:
CUDA_VISIBLE_DEVICES=0,1 nohup python -u scripts/train.py --exp_dir=results/train_attn --batch_size=4 --test_batch_size=4 > train.log 2>&1 &
Ⅱ、强制关闭进程(kill):
kill -9 28148
#28148是我正在跑的进程的PID,PID可以在显卡watch窗口找到。
Ⅲ、进程查看
ps -aux | grep "main.py"
(1)a:显示所有程序。
(2)u:以用户为主的格式来显示。
(3)x:显示所有程序,不以终端机来区分。
num jobs查看nohup命令下运行的所有后台进程。
Ⅳ、查看train.log的日志
tail -f train.log
日志:
7、在本地监听服务器上的tensorboard
(1)将服务器的某个端口转发到本地的8888端口。
ssh -L 8888:localhost:6665 服务器端用户名@ip地址
(2)服务器运行tensorboard,指定日志文件存放目录,在指定端口打开(默认端口6006)。
先cd到logs文件夹所在的大目录下,运行以下代码:
tensorboard --logdir=logs --port 6665
(3)在浏览器打开http://localhost:8888/实现监听。
来源:三思为上策