跨机训练——SSHFS远程挂载目录

实验室算力资源实在有限,往往是多个人共用一台机器,环境与数据都在一台机器上。如果平常用的机器(A机)被占用,又有其他机器(B机)空闲时,想要利用其他机器来训练,要么将整个目录复制过去,要么在Pytorch中调用B机的显卡,或者就用本文的方案:将A机的文件挂载到B机上,让B机来执行A机上的程序。

挂载目录

可以用sshfs将A机的环境目录与程序数据目录挂载到B机上,在B机上运行程序即可。

1
2
3
4
5
# 在B机上执行
# 挂载环境目录
sshfs [A-User]@{A-IP}:/home/[A-User]/anaconda3/envs/[your_env] /home/[B-User]/anaconda3/envs/[your_env] # 如果B机上有同名的环境,另选一个挂载目录即可

sshfs [A-User]@{A-IP}:[A-dir] [B-dir]

跨机训练

此时可以通过终端连接B机进行训练,或者用VSCode连接B机操作;

1
2
3
4
5
# 在B机上执行
conda activate [your_env] # 如果挂载到了/home/[B-User]/anaconda3/envs下的目录
python train.py
# 或者
/home/[B-User]/anaconda3/envs/[your_env] train.py

在无法直接访问B机的情况下也可以通过A机ssh来操作B机训练。

1
2
# 在A机上执行
ssh [B-User]@{B-IP} "/home/[B-User]/anaconda3/envs/[your_env]/bin/python train.py"

测速

最好提前确保两机互联速度够快,可以使用iperf3软件测试直连速度,如果是百兆网络可能会严重影响训练速度。

1
2
3
4
5
6
7
8
9
# 两台机器都需要安装iperf3
sudo apt install iperf3

# 在A机上执行
iperf3 -s
sudo ufw allow 5201 # 如果开启了防火墙需要放行5201端口

# 在B机上执行
iperf3 -c [A-IP] -b 0 -n 1G -f M

如果B机输出的测试结果中比特率(Bitrate)在100 MBytes/sec以上即说明两机之间是千兆网络,适合用来进行跨机训练。

SSH密钥设置

为了避免两机之间每次使用ssh与sshfs时都需要输入密码,建议提前将两机的公钥(id_rsa.pub内容)拷入另一台机的授权文件(authorized_keys)中。

1
ssh-copy-id [User]@[IP]

参考: https://zhuanlan.zhihu.com/p/141714106