用 tmux 在远程服务器跑长时 AI 任务

举报
yd_277333647 发表于 2026/11/09 12:19:31 2026/11/09
【摘要】 在远程 Linux 机器上跑模型下载、数据预处理或推理批处理,最尴尬的情况是任务跑到一半,本地网络抖动,SSH 连接断开,进程跟着被终止。日志停在半截,模型缓存写了一半,只能重来。解决办法不复杂:把任务放进 tmux 会话里跑,连接断了任务还在。先说清楚 tmux 解决什么问题。它提供终端复用,会话独立于 SSH 连接存在。断开后重新连上服务器,执行 tmux attach 就能回到原来的界...

在远程 Linux 机器上跑模型下载、数据预处理或推理批处理,最尴尬的情况是任务跑到一半,本地网络抖动,SSH 连接断开,进程跟着被终止。日志停在半截,模型缓存写了一半,只能重来。解决办法不复杂:把任务放进 tmux 会话里跑,连接断了任务还在。

先说清楚 tmux 解决什么问题。它提供终端复用,会话独立于 SSH 连接存在。断开后重新连上服务器,执行 tmux attach 就能回到原来的界面,看到任务继续输出。但它不解决机器重启:服务器一重启,tmux 会话同样消失。需要开机自启和崩溃恢复,仍然要用 systemd;tmux 适合的是“这次任务要跑几个小时,别被断网打断”。

安装很简单,主流发行版的软件源里都有,装完执行 tmux new -s train 创建名为 train 的会话。进去后先激活虚拟环境,再启动任务,并把输出同时写到日志文件:

bash
source /opt/ai-tool/venv/bin/activate
python train .py 2>&1 | tee -a /opt/ai-tool/logs/train.log
按 Ctrl+b 再按 d 脱离会话,任务继续在后台运行。之后用 tmux ls 查看会话列表,用 tmux attach -t train 重新接入。如果只是想确认进度,也可以不接入,直接 tail -f 那个日志文件。

几个容易踩的坑。第一,会话里不会自动继承你登录 shell 的全部环境,尤其是通过某些跳板或 sudo 切换用户时,虚拟环境、CUDA 路径、代理变量都可能缺失,最好在启动命令前显式 source 或 export。第二,tmux 默认回滚行数有限,任务输出几万行后往上翻看不到早期内容,建议一开始就把输出 tee 到文件,而不是依赖终端回滚。第三,一个会话可以开多个窗口,比如一个窗口跑训练、一个窗口用 nvidia-smi 或 top 看资源、一个窗口看日志,用 Ctrl+b c 新建窗口、Ctrl+b n 切换,比开多个 SSH 连接清楚。第四,别在 tmux 里跑需要交互确认的脚本然后人走开,卡在提示符上等于白等,长时任务应加上非交互参数或提前确认好。

如果任务只需要“断开后继续”,不需要回头交互,nohup 加输出重定向也能做到,但排查问题时看不到实时界面,也不方便中途进容器或切换目录。tmux 的优势是保留一个可操作的工作现场。入门阶段建议养成习惯:凡是预计超过几分钟的远程任务,先进 tmux,再启动,顺手 tee 日志。这样断网、换设备、第二天回来,接上就能继续看,任务不会因为一次连接抖动而前功尽弃。

【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0)

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。