研一暑假总结-关于训练和瓶颈分析

一、关于数据集的制作

1. 学习使用labelme制作数据集

二、关于yolox模型训练

1. 模型训练需要将自己的数据集标签改动

2. 读取数据集文件的路径需要改动

3. 使用的数据集过小,导致训练不了的原因:

epoch_step      = num_train // batch_size
epoch_step_val  = num_val // batch_size  
if epoch_step == 0 or epoch_step_val == 0:
     raise ValueError("数据集过小,无法继续进行训练,请扩充数据集。")

与batch_size设置的大小有关系,在下文中提到的瓶颈分析问题中,我提到了batch_size的设置问题,但是我在实际训练的时候,batch_size的设置过大,但是我的数据集有的只有500,在训练集和验证集比例为9:1的情况下,会导致验证集数量过小,进而导致epoch_step_val为零的情况,所以在训练时会出现报错的情况。。

发现过程十分简单,我让同门也拿一样的数据集进行训练,它的batch_size设置的十分小,所以训练起来没有问题。

4. 训练数据集的速度问题

        4.1 硬件设施问题,跟显卡算力有很大关系

        4.2 我使用的是AutoDL 的云服务器,一开始使用的是 RTX2080Ti,跑一个一万多的数据集500个epoch需要将近2天的时间,于是开始找问题,看AutoDL的官方解释文档,一步一步进行问题的查找

发现主要是由于设置的num_work和CPU核的不对应以及batch_size的设置有关系

瓶颈解决过程:

1. 首先使用Linux命令行:nvidia-smi 打开观察GPU的性能使用情况(watch -n x nvidia-smi)每隔x秒查看一次GPU的使用性能

Memery-usage 是显存的利用率;GPU-utili是GPU的使用率

 2. 根据实时显示的性能进行调试,查阅了很多博主的回复,一般都说是num_work为CPU的核数效率高

 batch_size 是指一次训练喂给模型的样本数,直接影响模型的训练结果和是否能够将显存榨干,我根据显存的利用率直接进行batch_size的调节。

经过以上调节过后,训练一轮的速度从原来的7分钟缩短到5分中左右,但是GPU的利用率会出现忽上忽下()的使用率,请教过大佬说:

最后设置为:

设备型号:CPU(4核 Intel(R) Xeon(R) Silver 4110 CPU @ 2.10GHz),显卡2080ti,

训练yoloX模型,GPU利用率忽高忽低(0%  20% 最高 58%)

其中模型中bach_size设置为16,num_worker设置了4 (设置过8和16,感觉4跑一轮epoch最快)。

哦对了,还有就是之前我一直将我的代码、数据放在系统盘,后来才知道放在云服务的数据盘运行速度是最快的。。。嗯。。就是之前太傻了

在进行调节会发现,CPU的利用率虽然上来了,但是训练的速度反而下降了。(怪不得很多博主说num_work的数量保持在CPU的核数最合适)

补充:我使用的云服务器可以在线实时查看我的实例的CPU的使用效率

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值