本地电脑关机后,如何让远程服务器继续运行代码?
通过 tmux 会话管理,实现 SSH 断开后远程服务器上的深度学习训练任务继续运行。
目录
一、场景
你是否有过这种经历:每次使用本地计算机通过 SSH 连接远程服务器运行深度学习代码时,都不敢关闭本地计算机或者断开网络连接。
原因如下:
当你通过 PyCharm 终端(本质是 SSH 会话)在服务器上运行 python main.py train 时,该进程是 SSH 会话的子进程。本地电脑断网后,SSH 连接被迫断开,服务器会向该会话的所有子进程发送 SIGHUP 信号,导致训练程序终止。
那么,如何避免呢?有三种常用方法:tmux、nohup、screen。
下面,我将重点介绍使用 tmux 运行训练任务。
二、给远程服务器配置tmux
安装tmux
(1)sudo权限
首先,确保用有 sudo 权限的账号安装 tmux。如果你不确定哪个账号有 sudo 权限,可以尝试:
su - root
然后输入 root 密码。
(2)安装
# 更新软件源
sudo apt update
# 安装 tmux
sudo apt install tmux -y
# 验证安装
tmux -V
(3)进入项目目录,启动 tmux 会话
cd /home/projects/
source venv/bin/activate
tmux new -s training
(4)在tmux中运行训练
python main.py train
三、使用tmux的一些技巧
1、分离tmux会话
看到训练开始后,可以按 Ctrl+B,然后按 D 键进行会话分离(以上面创建的 training 会话为例)。
正确的按键方式:
- 先按住
Ctrl键不放 - 再按一下
B键 - 松开
Ctrl和B - 然后按一下
D键
或者使用 tmux 命令直接分离。在 tmux 会话中输入:
tmux detach
这样,你就可以放心关闭本地计算机的终端了。
2、重新连接查看进度
之后需要查看训练进度时,重新 SSH 登录,然后执行:
tmux attach -t training
注意:这里的 training 是上面示例的命名,你需要换成实际命名的会话名。
3、清理掉旧会话
及时清理旧会话是一个好习惯,执行:
tmux kill-session -t training
注意事项同上,training 需替换为实际的会话名。
4、创建新会话
tmux new -s training
# 'training'只是该会话的命名,你可以自己命名
5、查看已有tmux会话窗口
你也可以执行下面命令来查看当前有哪些挂载的会话:
tmux ls
6、切换tmux会话
你不需要退出当前会话再打开另一个会话,可以直接在 tmux 会话中执行:
tmux switch -t <会话名>
更多 tmux 命令及技巧,可参考 Linux tmux 命令。
现在用 tmux 启动训练,即使关闭本地电脑,服务器也能继续训练!

浙公网安备 33010602011771号