关于yolov5训练大量数据存在的问题记录

2023-11-17

相关配置环境

拉取官方最新的镜像(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查找相关解决方法,作者提供了训练变快的方法

yolov5作者提供
自己也在网上找了一些训练加速的方法:

  • –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

调试技巧

  1. 训练过程中发现batch-size并不是设置越大越快,测试发现batch-size=320和batch-size=128是一样的训练速度。 (来源网络:对于batch-size,有点玄学。理论是能尽量跑满显存为佳,但实际测试下来,发现当为8的倍数时效率更高一点。就是32时的训练效率会比34的高一点,这里就不太清楚原理是什么了,实际操作下来是这样。)
  2. workers也是一样,在镜像中workers不能设置过高会导致shm不够。我配置了–shm-size=256g能勉强最高使用32。测试发现使用32时算法并不进行卡着不执行,16会比8快三分之一左右
  3. 使用cache进行缓存训练是比一边加载一边训练快,所以不管数据多少都可以使用cache缓存循环会更快
  4. DDP分布式训练,在NCCL不超时的情况下理论上会更快(待测试)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

关于yolov5训练大量数据存在的问题记录 的相关文章

随机推荐

  • 验证码图片实现

    使用验证码进行验证 自动生成验证码 后台实现 package common makeCertPic import java awt Color import java awt Font import java awt Graphics im
  • 第15课:生活中的命令模式——大闸蟹,走起

    用程序来模拟生活 从剧情中思考命令模式 命令模式 命令模式的模型抽象 代码框架 类图 模型说明 实战应用 应用场景 故事剧情 David 听说阿里开了一家实体店 盒马鲜生 特别火爆 明天就周末了 我们一起去吃大闸蟹吧 Tony 吃货 真是味
  • 前端三剑客---HTML&CSS&JavaScript

    HTML CSS JavaScript 1 HTML 1 1 介绍 1 2 快速入门 1 3 基础标签 1 3 1 标题标签 1 3 2 hr标签 1 3 3 字体标签 1 3 4 换行标签 1 3 5 段落标签 1 3 6 加粗 斜体 下
  • diagnose-tools 编译报错

    在 Ubuntu 20 04 4 LTS 环境中 编译diagnose tools 执行make deps时报错 checking whether gcc m32 makes executables we can run no config
  • ValueError: Buffer dtype mismatch, expected ‘unsigned char‘ but got ‘long‘

    在使用pydensecrf进行densecrf时出现ValueError def dense crf img probs n labels 2 h probs shape 0 w probs shape 1 probs np expand
  • NBA GLOSSARY

    NBA 全称 National Basketball Association 美国国家篮球协会 DRAFT draft dr ft n 选秀 R1 Round one 第一轮 St Vincent St Mary HS OH Saint V
  • electron-builder打包过程中报错——网络下载篇(转)

    在electron使用electron builder打包过程中需要用到几个github上的包 但是由于网络原因 会科学上网的同学基本不用看了 下载不下来 导致出错 一 electron v8 2 0 win32 x64 zip 如下图 导
  • MCP4725介绍和STM32模拟IC2驱动

    一 MCP4725 简单总结为下面几个特点 1路DAC输出 12位分辨率 I2C 接口 标准 快速 高速支持 供电电压2 7 5 5 内部EEPROM存储设置 I2C地址可配置 A0 A1 A2内置 默认为 00 二 硬件设计 MCP472
  • torch 测试GPU能否正常使用

    运行程序 import torch print torch cuda is available num gpu 1 Decide which device we want to run on device torch device cuda
  • 介绍D3DPOOL和Lock

    介绍D3DPOOL和Lock 分类 DirectX 2013 02 28 00 21 322人阅读 评论 0 收藏 举报 D3D RUTIME的内存类型 分为3种 VIDEO MEMORY VM AGP MEMORY AM 和SYSTEM
  • 最能感动女人的十大瞬间

    拉着手在街上闲逛 忽然之间 他将她拽停 伸手轻轻地将眼睑下的一根睫毛拨开 她顿感幸福 拨走睫毛不过是弹指之间的小事 却充分说明他对她的注意力100 集中 要不是他喜欢仔细地偷看她 怎能发现刚跌落的一根细小睫毛 没有一个女人 能够抵抗男人如此
  • Java爬虫框架WebMagic的使用总结

    最近 项目做一个公司新闻网站 分为PC 移动端 h5 数据来源是从HSZX与huanqiu2个网站爬取 主要使用Java编写的WebMagic作为爬虫框架 数据分为批量抓取 增量抓取 批量抓当前所有历史数据 增量需要每10分钟定时抓取一次
  • CSS3 弹性盒子(flex、flex-direction属性、flex-wrap属性、align-items属性、align-content属性)详解

    文章目录 flex flex direction 属性 flex wrap 属性 align items 属性 align content 属性的使用 flex 在 CSS3 中给 display 属性增加了新的属性值 flex 如果一个元
  • 关于MFC中使用ShellExecute出现的进程冲突问题

    目录 问题背景 问题分析 问题背景 现在有一个MFC写的界面程序 以及一个外部exe文件 用户通过界面选择文件a MFC将文件a的路径作为参数 调用exe文件生成一个解析文件b 然后MFC再读取这个文件b 为了完成这一目的 就需要在MFC中
  • Airtest IDE 使用方法

    1 assert exists 找到图片则返回图片坐标 否则报错 raise AssertionError 引发断言错误 2 assert not exists 没找到图片则返回None 否则报错 raise AssertionError
  • 项目实战——文档扫描OCR识别

    扫描全能王的实现 maybe 目录 一 文档扫描 1 引入所需要的库 2 图像的读取与预处理 读取图像 图像reszie 图像灰度化 滤波 边缘检测 3 轮廓检测 4 透视与二值变换 二 文字识别 一 文档扫描 文档扫描所实现的功能如下图所
  • 【转载】浅谈蓝牙 Mesh 组网技术

    本文转载自 Eren https www erenship com posts 63c7 html 蓝牙技术联盟官方网址 https www bluetooth com zh cn 蓝牙技术联盟公众号 BluetoothSIG 蓝牙技术联盟
  • BIO与NIO、AIO的区别

    IO的方式通常分为几种 同步阻塞的BIO 同步非阻塞的NIO 异步非阻塞的AIO 一 BIO 在JDK1 4出来之前 我们建立网络连接的时候采用BIO模式 需要先在服务端启动一个ServerSocket 然后在客户端启动Socket来对服务
  • 使用Nuget 安装指定版本package或者更新package到指定版本

    首先打开程序包管理器控制台 工具 Nuget程序包管理器 程序包管理器控制台 打开如下图所示的命令行界面 安装指定版本的Package 例如 EntityFramework 5 0 PM gt Install Package BenchMa
  • 关于yolov5训练大量数据存在的问题记录

    相关配置环境 拉取官方最新的镜像 docker pull ultralytics yolov5 以及代码 git clone https github com ultralytics yolov5 torch 1 10 1 cu102 CU