使用 tmux 让服务器训练任务在后台持续运行

在做深度学习训练时,我们常常会遇到这样的烦恼:通过 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):

  1. 进入回滚模式 :先按 Ctrl + B,松开后再按 [(左中括号)。

    此时你会看到右上角出现类似 [0/123] 的行号指示器。

  2. 上下滚动:

    • 使用键盘的 ↑ 和 ↓ 方向键逐行滚动。
    • 使用 Page Up 和 Page Down 键快速翻页。
  3. 退出回滚模式 :按 q 或 Esc 键,就能回到正常的终端输入状态。

方法二:开启鼠标滚轮(最方便,推荐)

如果你觉得按键盘太麻烦,习惯直接用鼠标滚轮,可以手动开启 tmux 的鼠标支持。

临时开启(只对当前会话有效):

  1. 按 Ctrl + B,松开后再按 :(冒号键,注意可能需要按住 Shift)。
  2. 此时底部会出现一个输入提示符,输入 set -g mouse on 然后回车。
  3. 现在你就可以直接用鼠标滚轮上下翻看日志了!

永久开启(以后每次都生效):

如果你希望以后所有的 tmux 会话都支持鼠标滚动,可以修改配置文件:

bash 复制代码
# 1. 在普通终端里追加配置
echo "set -g mouse on" >> ~/.tmux.conf

# 2. 让配置立即生效
tmux source-file ~/.tmux.conf

💡 进阶提示:增加回滚行数

tmux 默认只保存最近 2000 行左右的历史记录。对于深度学习训练来说,几万个 epoch 的日志很容易就会把历史记录刷掉。

建议你扩大历史记录容量:

bash 复制代码
echo "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
相关推荐
虎头金猫3 天前
4K 视频总卡在公网带宽?用 N1 + OpenList 把网盘播放链路重新理顺
运维·服务器·网络·python·容器·beautifulsoup·pandas
-梅3 天前
linux(8) 软硬链接
linux·运维·服务器
Wang's Blog3 天前
Java 项目实战: 外卖平台-文件下载与ServletOutputStream回写浏览器
服务器·项目开发
琥珀色糖3 天前
SimlpeHttp
linux·服务器
第十人i3 天前
Linux 日志管理系统:journald 配置与优化
linux·服务器
ITxiaobing20233 天前
IP 定位服务选型指南:从准确率到工程落地的技术考察
linux·服务器·网络
wuyk5553 天前
【Socket 进阶之路】第 9 章 Linux 网络服务量产稳定性优化|心跳保活、TIME_WAIT、SO_LINGER、内存池、断线重连、完整异常防护框架
linux·服务器·开发语言·网络·物联网
Julien20043 天前
Docker 容器存储原理(一)
linux·运维·服务器·ssh·学习方法
筝筝ba3 天前
GUI 测试之只读用户恢复BMC出厂设置
服务器
Wang's Blog3 天前
Java 项目实战: 外卖平台-新增菜品DishDto双表插入与事务控制
服务器·项目开发