使用 screen 保障远程训练不中断
当前存在的问题
长时间在服务器上训练模型时,若 SSH 连接意外掉线,最糟糕的情况是程序直接终止,前期计算资源全部浪费;即使训练脚本已设置断点(checkpoint),频繁的异常中断也会打乱实验进度,造成时间浪费与心理压力。
为避免此类风险,推荐使用 Linux 终端复用工具 screen。它允许你在服务器上启动一个“虚拟终端”,即便与服务器的网络连接中断,该终端内的进程仍持续运行;重新连接后,可随时回到原来的会话继续操作。
screen 的工作机制
-
创建虚拟终端:screen 在后台生成一个独立会话(session),会话内运行的命令与宿主 SSH 连接解耦。
-
连接 / 分离:
-
附着attach 到会话时,你获得对该虚拟终端的交互控制。
-
分离detach 时,控制权释放,但会话本身仍在后台运行。
-
- 多会话管理:可同时创建多个会话,互不影响。
换言之,失去的是与 虚拟终端 的连接,而非终端内部进程本身。
接下来是一些常用的指令(跑代码足够)。
常用指令
1. 创建会话
创建并进入名为 的会话
screen -S name
2. 连接会话
附着到指定会话;若唯一会话可简写为 screen -r
screen -r name
3. 查看会话
列出当前所有会话及状态
screen -ls
输出类似:
There are screens on:
12345.pts-0.hostname (Detached)
67890.pts-1.hostname (Detached)
2 Sockets in /tmp/screens/S-username.
12345.mytrain 与 67890.prep 为两个正在后台运行的会话。
左侧数字是会话 ID,可用来附着:screen -r 12345。
4. 分离会话
在screen里执行完命令就可以润了
在 screen 会话中,按下以下组合键:
Ctrl + A 然后按 D
(即 Ctrl + A 后,按 D 键)。
这会将当前会话分离(detach),使其继续在后台运行,同时你可以安全地退出 screen。
5. 结束会话
终止会话并关闭其中进程
在会话内运行 exit
,或在外部执行 screen -X -S <name> quit