SSH断开后如何保持AWS EC2上的PyTorch训练持续运行?
问题根因
仅在命令末尾加&只会将进程放到当前SSH会话的后台执行,进程仍与当前登录会话强绑定。关闭SSH终端时,系统会向该会话关联的所有进程发送SIGHUP(挂断)信号,进程默认响应该信号直接终止,因此重连后无法查询到运行中的训练进程。
可落地方案
方案1:nohup 启动(零额外安装,最轻量)
nohup的核心作用是让启动的进程忽略SIGHUP信号,和SSH会话解绑,启动时将输出重定向到日志文件即可持久查看训练记录:
- 启动命令:
nohup python main.py > train_log.log 2>&1 &
- 参数说明:
nohup:配置进程忽略SSH挂断信号> train_log.log:将标准输出(训练loss、精度、常规打印信息)写入train_log.log文件2>&1:将标准错误(运行报错、告警信息)合并写入同一个日志文件- 末尾
&:将进程放入后台运行
- 配套操作:
- 实时滚动查看训练日志:
tail -f train_log.log - 查询训练进程PID:
ps aux | grep main.py - 终止训练任务:
kill 查到的PID
执行启动命令后先输入exit正常退出SSH会话再关闭本地终端,不要直接点窗口叉号强制断开,避免异常信号终止进程。重连后进程会持续在后台运行,日志持续写入指定文件。
- 实时滚动查看训练日志:
方案2:tmux/screen 终端复用(推荐,支持随时回到交互终端)
如果需要随时回到训练的交互界面、查看实时滚动的输出(比如tqdm进度条)、手动输入交互指令,优先用终端复用工具,主流EC2镜像的官方源都可直接安装:
以tmux为例:
- 安装(系统未预装时执行):
- Ubuntu/Debian系:
sudo apt update && sudo apt install tmux -y - Amazon Linux/CentOS系:
sudo yum install tmux -y
- Ubuntu/Debian系:
- 新建命名为
pytorch_train的独立会话:tmux new -s pytorch_train - 在弹出的tmux终端窗口内正常执行训练命令:
python main.py - 按下快捷键
Ctrl+B后松开,再按D键,即可从当前tmux会话脱离(detach)回到原SSH会话,此时训练进程完全在tmux独立会话内运行,和SSH会话解绑 - 后续SSH重连后,执行
tmux a -t pytorch_train即可直接回到之前的训练终端,所有输出、交互状态和断开前完全一致
- 配套操作:
- 查看所有现存tmux会话:
tmux ls - 关闭不需要的会话:进入会话后输入
exit,或执行tmux kill-session -t pytorch_train
- 查看所有现存tmux会话:
方案3:systemd 系统服务托管(适合长周期大任务,稳定性最高)
如果是需要运行数天的大规模训练任务,需要进程异常退出自动恢复、实例重启后自动启动,可使用系统自带的systemd托管进程:
- 新建服务配置文件:
sudo vim /etc/systemd/system/pytorch-train.service - 写入以下配置,注意替换为你自己的用户名、项目路径、Python解释器绝对路径:
[Unit] Description=PyTorch Training Task After=network.target [Service] User=ubuntu # 替换为你登录EC2的用户名,如ubuntu、ec2-user WorkingDirectory=/home/ubuntu/your_project_dir # 替换为main.py所在的项目绝对路径 ExecStart=/home/ubuntu/miniconda3/envs/your_env/bin/python main.py # 替换为你的Python解释器绝对路径+启动命令,避免环境变量找不到的问题 Restart=always # 进程异常退出时自动重启 RestartSec=10 [Install] WantedBy=multi-user.target
- 加载配置并启动训练:
sudo systemctl daemon-reload sudo systemctl start pytorch-train # 可选:配置实例开机自动启动训练 sudo systemctl enable pytorch-train
- 配套操作:
- 实时查看训练日志:
sudo journalctl -u pytorch-train -f - 停止训练任务:
sudo systemctl stop pytorch-train - 查看任务运行状态:
sudo systemctl status pytorch-train
- 实时查看训练日志:
注意事项
- 所有后台运行方案都建议将日志持久化写入文件,不要依赖终端打印,避免后续无法回溯训练报错、指标记录
- 提前确认EC2实例配置了无操作不休眠、系统盘/数据盘存储空间充足,避免实例本身的休眠、关机、磁盘满导致任务中断
- 如果训练周期很长,建议在代码里加入断点续训逻辑,避免极端情况(比如实例意外重启)导致训练进度丢失
内容的提问来源于stack exchange,提问作者user13410977
相关产品推荐
相关产品推荐

