当前位置: 首页 > java >正文

将YOLO训练进程放至后台的方法-nohup

YOLO训练的脚本文件train.py通常来说如下所示:

import warnings
warnings.filterwarnings('ignore')
from ultralytics import YOLO
from ultralytics.models import RTDETRif __name__ == '__main__':# model = YOLO(r'ultralytics/cfg/models/v8/yolov8x-p2.yaml') # model = YOLO(r"ultralytics/cfg/models/11/yolo11m.yaml")model = YOLO("runs/train/exp5/weights/last.pt")model.train(data=r'Dataset_depth.yaml',cache=False,imgsz=1280,epochs=50,single_cls=False,  # 是否是单类别检测batch=4,close_mosaic=10,workers=0,device=0,optimizer='SGD',amp=True,project='runs/train',name='exp',cfg = None)

但是,由于终端意外关闭/断网掉线/电脑没电导致关机,导致训练意外中断。如何实现安全地在服务器上启动长期训练任务,无需保持终端开启,且所有运行信息完整记录?这里就用到nohup命令:

正常情况下启动训练,是在conda环境中激活YOLO环境(我这里的环境名称就是yolo11),然后运行上面的train.py文件:

/home/hairou/anaconda3/envs/yolo11/bin/python /home/hairou/ctc/ultralytics-main/train.py

这里第一部分是python解释器的路径,第二部分是train.py文件的路径。

使用nohup进行训练,只需要将以上命令更改为:

nohup /home/hairou/anaconda3/envs/yolo11/bin/python train.py > train.log 2>&1 &

详细解释如下:

组件作用必要性
nohup忽略挂断信号(SIGHUP),使进程在终端关闭后仍存活必须
/home/hairou/anaconda3/envs/yolo11/bin/python指定Python解释器的绝对路径(确保使用conda环境的Python)关键
train.py要执行的Python脚本(相对路径)必须
> train.log将标准输出(stdout)重定向到 train.log 文件可选但推荐
2>&1将标准错误(stderr)合并到标准输出(即错误日志也写入 train.log可选但推荐
&将进程放入后台运行,释放当前终端可选但推荐

nohup命令执行流程

  1. 启动进程

    • nohup 捕获并忽略终端关闭信号。

    • 使用指定conda环境中的Python解释器执行 train.py

  2. 日志记录

    • 所有正常输出(如训练进度)写入 train.log

    • 所有错误信息(如报错)也写入同一日志文件。

  3. 后台运行

    • 命令末尾的 & 使进程在后台运行,终端可继续执行其他命令。


关键场景

1. 关闭终端后训练仍持续

即使关闭VS Code或SSH连接,程序仍继续运行。

2. 日志集中管理

所有输出和错误信息集中记录到 train.log,便于调试:

tail -f train.log  # 实时查看日志更新

输出就被全部打印到日志文件中:

3. 避免环境依赖问题

通过绝对路径指定Python解释器,确保:

  • 使用正确的conda环境(如 yolo11)。

  • 避免因环境变量未继承导致的 ModuleNotFoundError(如找不到torch)。

操作验证

1. 检查进程是否存活
ps aux | grep "python train.py"  # 查看进程ID(PID)和状态
2. 强制终止进程
kill -9 <PID>  # 替换<PID>为实际进程ID
3. 日志文件监控
watch tail -n 20 train.log  # 每隔2秒刷新显示日志末尾20行
http://www.xdnf.cn/news/7964.html

相关文章:

  • Oracle BUFFER CACHE内存不足的优化思路
  • 【信息系统项目管理师】第13章:项目资源管理 - 38个经典题目及详解
  • SEO关键词优化与长尾词布局
  • Powershell及命令行文章合集(不定期更新)
  • [Docker排查] 镜像拉取/容器启动/网络不通?Docker常见错误与解决方案
  • ERP 与 WMS 对接深度解析:双视角下的业务与技术协同
  • Linux系统之----文件及缓冲区
  • 实验4 插入数据
  • ETL工具部署的5个注意事项
  • 风车聊天室nodejs环境即可无需数据库
  • 适合初学者的 Blender和怎么下载 Blender格式模型
  • 项目优先级不清,如何合理分配资源?
  • Baumer工业相机堡盟工业相机的工业视觉如何进行药板缺陷检测
  • LeetCode数组-移除元素
  • 力扣热题——零数组变换 ||
  • C++(26): 标准库 <iterator>
  • 使用亮数据代理IP+Python爬虫批量爬取招聘信息训练面试类AI智能体(实战指南)
  • 百度地图的地铁图API所有城市的城市名和citycode的对照关系列表
  • 城市停车场光伏-储能-充电系统耦合机制与效益分析
  • Babylon.js学习之路《七、用户交互:鼠标点击、拖拽与射线检测》
  • 嵌入式八股,空闲任务
  • OpenFeign
  • 人工智能100问☞第28问:什么是过拟合与欠拟合?
  • PCB设计实践(二十四)PCB设计时如何避免EMI
  • mmaction2——tools文件夹下
  • MySQL 5.7 实战:JSON 字段提取、Base64 解码与引号问题全解析
  • Spring循环依赖
  • 从版本控制到协同开发:深度解析 Git、SVN 及现代工具链
  • 六台升降台完整的限位保护逻辑
  • springboot3.x只需两步快速整合nacos作配置中心