项目场景:

入职第三个月的第一天搞崩公司服务器
近期yolov5模型(参考github地址:https://github.com/ultralytics/yolov5)比较火,准备上手更新一下之前用v3做的项目,处理过数据格式问题后,python train.py --img-size 640 --batch-size 16 --epochs 300 --data ./data/score.yaml --cfg ./models/yolov5x.yaml --weights weights/yolov5x.pt准备运行训练代码,结果发生了内核死循环,进程杀不掉的问题,各种kill命令也不好使,最终只能reboot服务器解决问题。


问题描述:

python train.py --img-size 640 --batch-size 16 --epochs 300 --data ./data/score.yaml --cfg ./models/yolov5x.yaml --weights weights/yolov5x.pt开始训练后,服务器发生如下状况:

此时ctrl+c/ctrl+z都无法终止进程,本以为这是不打印训练过程,就放着进程跑了一天(晚上做梦还梦到第二天模型训练好了,我要开始写接口了),结果第二天还是处在上图所示的样子。
因为是screen -S sceesion_name进的screen,我就直接screen -S session_name -X quitkill掉这个进程,原以为结束了,结果才是问题的刚刚开始。
运行nvidia-smi发现事情并没有这么简单

有个PID=323125的进程占着八个GPU的内存,因为我当时训练的时候设置了多进程同时训练,大概率是我的进程没有被杀掉吧,ps -ef |grep 323135查看,的确是我起的进程:

可以看到kill掉screen并没有结束他运行的进程,理论上kill掉screen应该是结束掉screen上的所有进程包括父进程和子进程,但是这个地方的确进程还在,考虑应该是screen是父进程,训练是子进程,父进程强制杀掉以后,子进程托管到了0号进程,查了一些博客大部分在讲应该是进程变成了僵尸进程,按照博客上相关方法做了以下尝试:

step1 用ps和grep命令寻找僵尸进程:

ps -A -ostat,ppid,pid,cmd | grep -e '^[Zz]'  #{-A 参数列出所有进程;-o 自定义输出字段 我们设定显示字段为 stat(状态), ppid(进程父id), pid(进程id),cmd(命令)这四个参数}

的确发现了几个僵尸进程:

其中Z表示进程不活跃,在找解决方法的时候看到了一个对僵尸进程描述比较形象的博客,贴在这里(https://www.sohu.com/a/210923606_261288)所谓僵尸进程可以这样理解:

“你是一家建筑公司的老板。你每天根据工人们的工作量来支付工资。 有一个工人每天来到施工现场,就坐在那里, 你不用付钱, 他也不做任何工作。 他只是每天都来然后呆坐在那,仅此而已!”这个工人就是僵尸进程的一个活生生的例子。但是, 如果你有很多僵尸工人, 你的建设工地就会很拥堵从而让那些正常的工人难以工作。

step2 kill 进程
如上图所示:我程序中从第二行到最后一行的僵尸进程都是由PID=323135这个父进程产生的,一般僵尸进程的子进程很难kill掉,所以我们就kill他的父进程,键入kill -HUP 323135来杀掉父进程,父进程结束后,子进程变成孤儿进程,然后会被init进程清除

其实正常情况到这儿就结束了,但这却不是我的问题所在,当然,如果你遇到僵尸进程的问题上述的方法完全可以解决。


真正的问题:

kill掉僵尸进程并没有解决内存占用问题,top一下,发现有运行中的程序在占用内存,同样是PID=323135的子进程,但他是run中的进程,这也就解决了我一开始的疑问(“为什么僵尸进程还占用这么大的内存”)。
那么,究竟是什么原因呢,调出来模型epochlog以后发现每次起的模型都是在调用GPU的时候出现了问题,在此处陷入了内核死循环,此时kill命令并不是失效,而是kill命令也在等待,等待内核结束循环,但死循环永远不会结束,这也就导致了kill命令一直在等待,直观上表现出内核不接受kill命令的状态。这种问题有且只有一个解决方案。

reboot

备注:

有人说:“你罗里吧嗦这么多,你直接告诉我重启不完了”
服务器上是多任务工作,重启需要协调同事,保证别人没有在服务器上跑程序,而且服务器上部署着一些接口,重启期间接口不能用影响正常网站工作。
最后,此文也是记录我为了解决一个小问题的探索,同时为遇到相同问题的你提供一个小小的帮助。

yolov5-master训练陷入内核死循环相关推荐

  1. yolov5模型训练

    本文将介绍yolov5从环境搭建到模型训练的整个过程.最后训练识别哆啦A梦的模型. 1.anconda环境搭建 2.yolov5下载 3.素材整理 4.模型训练 5.效果预测 - Anconda环境搭 ...

  2. yolov5——断点训练/继续训练【解决方法、使用教程】

    yolov5--断点训练/继续训练[解决方法.使用教程] 1. 问题描述 2. 解决办法 2.1 步骤一 2.2 步骤二 2.3 步骤三 3. 全部流程 1. 问题描述 在用yolov5训练数据的过程 ...

  3. yolov5 继续训练

    yolov5 继续训练 两种情况: 训练过程中中断了,继续训练 训练完了,但是未收敛,在这个基础上,还想用这个权重.学习率等参数继续训练多一些批次 训练过程中中断了,继续训练 断电.或者什么原因中断了 ...

  4. 深度学习评估指标之目标检测——(yolov5 可视化训练结果以及result.txt解析)

    1.机器学习模型评估指标总结 机器学习的数据集一般被划分为训练集和测试集,训练集用于训练模型,测试集则用于评估模型.针对不同的机器学习问题(分类.回归.排序.序列预测等),评估指标决定了我们如何衡量模 ...

  5. 教程:超详细从零开始yolov5模型训练

    本文将介绍yolov5从环境搭建到模型训练的整个过程.最后训练识别哆啦A梦的模型. 1.anconda环境搭建 2.yolov5下载 3.素材整理 4.模型训练 5.效果预测 - Anconda环境搭 ...

  6. 手把手教你用YOLOv5算法训练数据和检测目标(不会你捶我)

    前言 本人从一个小白,一路走来,已能够熟练使用YOLOv5算法来帮助自己解决一些问题,早就想分析一下自己的学习心得,一直没有时间,最近工作暂时告一段落,今天抽空写点东西,一是为自己积累一些学习笔记,二 ...

  7. yolov5继续训练_震惊! 它来了!YOLOv5它来了!

    点击上方"AIWalker",选择加"星标"或"置顶"    重磅干货,第一时间送达 ❝ 今天在刷github时,突然看到了YOLOv5,笔 ...

  8. YOLOv5如何训练自己的数据集

    目录 一.标注 1.1 标注软件下载labelimg 下载地址:mirrors / tzutalin / labelimg · GitCode 1.2 json转txt 1.3 xml转txt 二.修 ...

  9. yolov5模型训练流程

    yolov5简介 YOLOv5(You Only Look Once)是由 UitralyticsLLC公司发布的一种单阶段目标检测算 法,YOLOv5 相比YOLOv4 而言,在检测平均精度降低不多 ...

最新文章

  1. 姿态估计算法汇总|基于RGB、RGB-D以及点云数据
  2. 天问电子少年团DIY作品
  3. 【AR】Vuforia之unity3d 开发环境搭建
  4. python表示数字6_【第六节】Python数字(Number)
  5. linux下yum安装pgsql,CentOS7使用yum安装PostgreSQL和PostGIS的方法
  6. [HAOI2015]T2
  7. MSTP:多生成树实例——应用案列及配置命令(实验)
  8. flutter 路由
  9. mysql省市区递归查询_mysql 递归查询
  10. APICloud 上传文件到云数据库2.0的代码实现
  11. 嗨,你真的懂this吗?bianji
  12. 淘宝购物车测试用例+流程图
  13. xdg-open命令
  14. 计算机专业 本科论文,计算机专业本科毕业设计和毕业论文的感悟
  15. 计算机网络实验-网络嗅探器
  16. V-rep 仿真与python远程控制
  17. 选择城市,按城市的首字母进行排序
  18. Js 的防抖与节流代码分析
  19. 系统服务管理知识-进程守护工具:supervisor
  20. git 国外镜像下载慢的解决方案

热门文章

  1. JavaScript学习笔记(十六)——ES6简介
  2. 浏览器访问互联网的过程
  3. Matlab中使用LMI toolboxLMI
  4. Java语法核心——面向对象编程
  5. struts2-类型转换器
  6. Tomcat无法进行DNS解析域名
  7. python获取音频音量大小_音频响度分析和获取
  8. 【推荐公平性论文阅读笔记】:A unifying and general account of fairness measurement in recommender systems-1区top
  9. 搭建高可用的MongoDB集群:MongoDB的配置与副本集
  10. 方向分布(标准差椭圆)