本地电脑关机后,如何让远程服务器继续运行代码?

通过 tmux 会话管理,实现 SSH 断开后远程服务器上的深度学习训练任务继续运行。

目录


一、场景

你是否有过这种经历:每次使用本地计算机通过 SSH 连接远程服务器运行深度学习代码时,都不敢关闭本地计算机或者断开网络连接。

原因如下:

当你通过 PyCharm 终端(本质是 SSH 会话)在服务器上运行 python main.py train 时,该进程是 SSH 会话的子进程。本地电脑断网后,SSH 连接被迫断开,服务器会向该会话的所有子进程发送 SIGHUP 信号,导致训练程序终止。

那么,如何避免呢?有三种常用方法:tmuxnohupscreen

下面,我将重点介绍使用 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 会话为例)。

正确的按键方式:

  1. 先按住 Ctrl 键不放
  2. 再按一下 B
  3. 松开 CtrlB
  4. 然后按一下 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 启动训练,即使关闭本地电脑,服务器也能继续训练!

posted @ 2026-05-15 23:30  only赟  阅读(92)  评论(0)    收藏  举报