在做深度学习训练时,我们常常会遇到这样的烦恼:通过 SSH 连接到服务器跑训练,结果一关电脑、断网或者退出终端,训练任务就跟着挂掉了。第二天打开电脑一看,进度全没,又得从头再来。
tmux 就是解决这个问题的神器。下面用四个步骤,带你完整走一遍"启动训练 → 后台挂起 → 第二天恢复查看"的完整流程。
目录
- [0. 安装 tmux](#0. 安装 tmux)
- [1. 使用 tmux 创建持久化会话](#1. 使用 tmux 创建持久化会话)
- [2. 准备并启动训练任务](#2. 准备并启动训练任务)
- [3. 将任务挂起至后台(分离会话)](#3. 将任务挂起至后台(分离会话))
- [4. 重新查看训练进度(恢复会话)](#4. 重新查看训练进度(恢复会话))
- [5. 回滚查看历史输出(查看之前刷过的日志)](#5. 回滚查看历史输出(查看之前刷过的日志))
- 小结
0. 安装 tmux
在开始之前,先确认服务器上是否已经装了 tmux。在终端输入:
bash
tmux -V
如果输出类似 tmux 3.2a 的版本号,就说明已经装好了,可以直接跳到下一步。如果提示 command not found,按下面对应的系统安装即可。
Ubuntu / Debian:
bash
sudo apt update
sudo apt install tmux
没有 sudo 权限怎么办?
如果你在公司或学校的服务器上没有 sudo 权限,可以让管理员帮忙安装;或者用 conda 在用户目录下装一份,不需要任何系统权限:
bash
conda install -c conda-forge tmux
装好后再跑一次 tmux -V 确认能正常调用,就可以进入正题了。
1. 使用 tmux 创建持久化会话
bash
tmux new -s train
tmux 是一个终端复用工具 。这行命令创建了一个名为 train 的独立虚拟终端窗口。在这个窗口里运行的任何程序,即使你关闭了外部的连接工具,它也会在服务器后台继续运行。
💡
-s是 session 的缩写,train是会话名字,可以根据任务自定义,比如train-bert、finetune等等。
2. 准备并启动训练任务
bash
conda activate your_env
python your_script.py
3. 将任务挂起至后台(分离会话)
text
# 按 Ctrl+B 然后按 D 断开(detach)
这是 tmux 的快捷键操作。先按住键盘上的 Ctrl 和 B 键,松开后再按 D 键(Detach)。
这个操作会把你当前看到的终端界面"隐藏"到后台,退回到你最初登录服务器的界面。此时你可以安全地关闭 SSH 连接(关闭电脑回家或睡觉),那个训练程序依然会在服务器后台不知疲倦地运行。
4. 重新查看训练进度(恢复会话)
bash
tmux attach -t train
当你第二天打开电脑,重新通过 SSH 连上服务器后,输入这行命令(attach 意思是附加),就能回到名为 train 的那个终端窗口,继续查看模型训练的实时日志和进度了。
💡 如果忘了会话名字,可以用
tmux ls查看当前所有的 tmux 会话。
5. 回滚查看历史输出(查看之前刷过的日志)
恢复会话后,你可能发现想看的训练日志已经被刷到屏幕外了,普通的鼠标滚轮还滚不动------这是因为 tmux 接管了终端,需要进入它专属的模式才能回滚。
主要有两种方法:键盘模式和开启鼠标支持。
方法一:使用键盘(最通用,无需配置)
你需要进入 tmux 专属的复制模式 (Copy Mode):
-
进入回滚模式 :先按
Ctrl + B,松开后再按[(左中括号)。此时你会看到右上角出现类似
[0/123]的行号指示器。 -
上下滚动:
- 使用键盘的
↑和↓方向键逐行滚动。 - 使用
Page Up和Page Down键快速翻页。
- 使用键盘的
-
退出回滚模式 :按
q或Esc键,就能回到正常的终端输入状态。
方法二:开启鼠标滚轮(最方便,推荐)
如果你觉得按键盘太麻烦,习惯直接用鼠标滚轮,可以手动开启 tmux 的鼠标支持。
临时开启(只对当前会话有效):
- 按
Ctrl + B,松开后再按:(冒号键,注意可能需要按住 Shift)。 - 此时底部会出现一个输入提示符,输入
set -g mouse on然后回车。 - 现在你就可以直接用鼠标滚轮上下翻看日志了!
永久开启(以后每次都生效):
如果你希望以后所有的 tmux 会话都支持鼠标滚动,可以修改配置文件:
bash
# 1. 在普通终端里追加配置
echo "set -g mouse on" >> ~/.tmux.conf
# 2. 让配置立即生效
tmux source-file ~/.tmux.conf
💡 进阶提示:增加回滚行数
tmux默认只保存最近 2000 行左右的历史记录。对于深度学习训练来说,几万个 epoch 的日志很容易就会把历史记录刷掉。建议你扩大历史记录容量:
bashecho "set -g history-limit 50000" >> ~/.tmux.conf tmux source-file ~/.tmux.conf这样
tmux就会为你保留多达 5 万行的历史输出了。
小结
| 操作 | 命令 |
|---|---|
| 新建会话 | tmux new -s <名字> |
| 分离会话(挂到后台) | Ctrl+B 然后按 D |
| 查看所有会话 | tmux ls |
| 恢复会话 | tmux attach -t <名字> |
| 进入回滚模式 | Ctrl+B 然后按 [,q 退出 |
| 开启鼠标滚轮(临时) | Ctrl+B 然后输入 :set -g mouse on |
| 关闭会话 | 在会话中输入 exit |