关于yolov5训练大量数据存在的问题记录
相关配置环境
拉取官方最新的镜像(docker pull ultralytics/yolov5)
以及代码(git clone https://github.com/ultralytics/yolov5)torch 1.10.1+cu102 CUDA:0 (Tesla V100-PCIE-32GB, 32510MiB)
相关问题
我是自定义数据集一共多达4.5w张,图像大小大多为3M(4000*3000)甚至更高。因为使用的是V100 32G显卡,本着batch_size越大训练越快的原则直接把batch_size设置为最大。
python train.py --batch-size 320 --data data/test.yaml --cfg models/yolov5s.yaml --weights yolov5s.pt
1、batch_size设置最大后发现,训练特别慢,且显卡使用率长时间为0,偶尔会有使用率。结合打印日志发现,当完成一部分训练进行百分比展示时显卡使用率也会有。因此判断显卡未使用时是在进行io操作,在读取缓存数据,因为batch_size设置过大所以缓存特慢,当缓存完成才会进行训练,所以显存也会偶尔有使用率。(百度查询查到别人的分析:是exchange存取数据的问题,那个应该是个差不多网络存储的服务器,由于本身数据体积就比较大,程序在跑的时候数据读写速度跟不上,gpu就一直在等数据读进来)确定完原因开始在ylov5官方lssuse查找相关解决方法,作者提供了训练变快的方法
自己也在网上找了一些训练加速的方法:
- –workers 线程数量默认8(改成0或者增加)
- –noval 每个epoch不进行评估
- –cache 使用缓存训练
- 使用DDP (python -m torch.distributed.launch --nproc_per_node 2 train.py)
2、最开始我一直在workers这个参数以及DDP进行测试,发现并没有提升太多,还是很慢。后面就把这四点进行结合,在DDP上进行缓存训练、不评估进行多线程。问题又来了,因为数据量过大,在DDP上进行RAM缓存时时间会超时NCCL设置的1800000(半个小时),保存本地disk缓存也是一样。自己排查觉得两部分解决这个问题:1.修改NCCL超时时间 2.加快缓存速度从而减少时间。因为需要快速训练所以并没有去解决
python -m torch.distributed.run --nproc_per_node 2 train.py --batch-size 320 --data data/test.yaml --cfg models/yolov5s.yaml --weights yolov5s.pt --noval --workers 32 --cache
3、当DDP行不通,就想着使用最原始的python train.py的方式去使用缓存训练,没想到一试竟然成功了。RAM和disk都可以,ram缓存到内存需要有足够大的虚拟内存也就是启动docker镜像的时候加上–shm-size 256g这个参数,disk缓存本地本地有足够大的存储即可。
python train.py --batch-size -1 --data data/test.yaml --cfg models/yolov5s.yaml --weights yolov5s.pt --workers 16 --cache disk
4.5w数据 309轮 训练时间:02:10
调试技巧
- 训练过程中发现batch-size并不是设置越大越快,测试发现batch-size=320和batch-size=128是一样的训练速度。 (来源网络:对于batch-size,有点玄学。理论是能尽量跑满显存为佳,但实际测试下来,发现当为8的倍数时效率更高一点。就是32时的训练效率会比34的高一点,这里就不太清楚原理是什么了,实际操作下来是这样。)
- workers也是一样,在镜像中workers不能设置过高会导致shm不够。我配置了–shm-size=256g能勉强最高使用32。测试发现使用32时算法并不进行卡着不执行,16会比8快三分之一左右
- 使用cache进行缓存训练是比一边加载一边训练快,所以不管数据多少都可以使用cache缓存循环会更快
- DDP分布式训练,在NCCL不超时的情况下理论上会更快(待测试)
关于yolov5训练大量数据存在的问题记录相关推荐
- YOLOV5训练数据集过程中特殊问题记录
项目场景: yolov5训练GX数据集 问题描述: 运行train.py Traceback (most recent call last):File "/home/milk/yolov52 ...
- ubuntu+docker使用yolov5训练自己数据踩坑指南
报错一: AssertionError: Label class 16 exceeds nc=1 in data/data.yaml. Possible class labels are 0-0 原因 ...
- yolov5训练自己的数据集,OpenCV DNN推理
学更好的别人, 做更好的自己. --<微卡智享> 本文长度为4238字,预计阅读9分钟 前言 上一篇<OpenCV--自学笔记>搭建好了yolov5的环境,作为目标检测在应用中 ...
- 【目标检测】YOLOv5训练工具,简化训练准备过程
目录 引流 前言 安装步骤 0. 环境配置 1. 下载项目 2. 安装项目 3.下载权重文件 操作步骤 After Training 引流 YOLOX算法的检测性能超过YOLOv5啦,所以推荐大家使用 ...
- 【深度学习】【Python】【Widerface数据集】 转VOC格式,VOC 转YOLOv5格式,YOLOv5训练WiderFace数据集,检查yolo labels对不对
文章目录 Widerface数据集转VOC格式 VOC 转YOLO格式 数据集的imageslisttxt YOLOv5训练 检查yolo labels对不对 并行训练 Widerface数据集转VO ...
- YOLO-v5训练自己的数据+TensorRT推理部署(2)
YOLO-v5训练自己的数据+TensorRT推理部署(2) 代码下载地址:下载地址 YOLO v5转TensorRT模型并调用 0.pt模型转wts模型 python3 gen_wts.py # 注 ...
- YOLO-v5训练自己的数据+TensorRT推理部署(1)
YOLO-v5训练自己的数据+TensorRT推理部署(1) 代码下载地址:下载地址 YOLO v5在医疗领域中消化内镜目标检测的应用 YOLO v5训练自己数据集详细教程
- yolov5训练自己的数据
组件知识笔记: yolov5组件笔记_jacke121的专栏-CSDN博客_yolov5深度可分离卷积 参考:使用YOLOv5训练自己的数据集_laovife的博客-CSDN博客_使用yolov5训练 ...
- yolov5使用教程训练our数据——手把手教你训练预测(以阿里天池比赛为例)
玩转yolov5 前言 1.yolov5项目克隆和安装 1.1 代码下载 1.2 安装环境 1.3 下载预训练权重 1.4 安装测试 2.数据准备 2.1 数据形式 2.2 数据转换 2.3 转换结果 ...
最新文章
- Java线上问题排障:Linux内核bug引发JVM死锁导致线程假死
- 阻止保存要求重新创建表的更改
- PostgreSQL学习手册(客户端命令Ⅱ)
- linux下载哪个python版本-Linux安装python3.6
- lvs负载均衡—ldirectord(DR模式的健康检查)
- Jedis使用测试——连接本地及远程的Redis
- PAT甲级1012 (结构体,排序)
- IBM AIX创建lv
- ewebeditor高版本=5.50day
- 算法速学速用大辞典 pdf_随机梯度蒙特卡洛算法-重要性采样
- c51单片机音乐门铃C语言程序,89c51六首歌曲的音乐门铃程序
- 激光投影仪与普通投影仪有什么区别?应该怎么购买?
- UVa12304(计算几何中圆的基本操作)
- NVIDIA边缘端设备(nano、tx2、xavier等)查看安装的jetpack版本
- 电商平台订单号生成策略
- Windows11无法打开Windows安全中心(需要使用新应用打开此windowsdefender链接)
- 配色表和配色网站:获取好看的配色
- 字节跳动扣响搜索扳机
- PHP删除字符串中的空格和换行符终极方法
- perl和python各自擅长的领域