4090+13900 跑 yolov8,gpu 效率上不去,cpu 频率高但是占用率不高

请问 yolov8 模型用 coco2017 数据集进行训练,为啥 gpu 运算效率没法一直稳定很高

大概情况就是 gpu 效率从 1%~5% 在 2 秒内涨到 70% 左右,然后运算效率就回到 1%~5%,然后再等上 5 秒左右再上去
 
期间 cpu 占用率也不高,但是 cpu 频率很高
 
数据集是在固态上面的,workers=16
 
之前也了解了下这种情况,有一种说法是可能总线异常导致数据送入 gpu 很慢,gpu 等数据送来后两下就运算完了,然后等待新的数据到来。
 
如果是总线异常导致的,那么总线部分该如何检测呢,是否还有其他异常的可能。
 
本来按照运算单位来看不到 4 分钟就能跑完一个 epoch,然而实际上跑一个 epoch 得 17 分多
 
期间 nvidia-smi 的输出也不是实时的,大概就是只有 gpu 在运算时才是实时显示(这个可能只是 gpu 因为没工作,所以没输出信息)
 

img


同样的模型和数据集,我在 1080ti 上应该是出于正常跑的状态,gpu 效率基本都在 80~90%甚至更高徘徊,cpu 还是个 1700x,反而频率没有太高
 
而且 nvidia-smi 输出是动态实时的

【相关推荐】




如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^

@kakaccys 能帮我瞅瞅吗

引用 皆我百晓生 小程序回复内容作答:
有几个可能的原因可以解释为什么您在使用GPU运行yolov8模型时效率无法稳定保持高:

  1. 数据传输的瓶颈:在训练过程中,数据集的传输速度可能会成为限制GPU效率的瓶颈。当GPU等待新的数据到达时,它的占用率会下降,直到新的数据到达后才会再次增加。这可能是由于总线异常或数据传输速度较慢导致的。要解决这个问题,您可以尝试优化数据集的读取和传输方式,例如减少数据传输所需的时间。

  2. GPU计算资源不足:如果GPU的计算资源不足以应对训练过程中的工作量,效率可能会降低。您可以通过使用更高性能的GPU或调整框架参数、模型大小等来改善这个问题。

  3. 同时使用的其他任务:如果您的系统同时在进行其他计算密集型任务,例如训练其他模型或运行其他应用程序,可能会导致GPU的效率下降。在确保没有其他任务或应用程序干扰的情况下,可以提高GPU的效率。

  4. 软件设置问题:有时,软件设置可能会影响GPU的效率。您可以尝试更新GPU驱动程序、更新框架版本或调整相关的配置选项来解决潜在的软件问题。

至于如何检测总线异常或其他可能的异常,您可以尝试使用性能分析工具来监测GPU和系统的性能。例如,使用NVIDIA提供的GPU性能分析工具,可以获取详细的GPU使用率信息、数据传输速度、计算时间等数据,以帮助您确定可能的问题所在。

最后,关于nvidia-smi的输出不是实时的问题,可能是因为nvidia-smi默认的刷新频率较低。您可以尝试使用参数"-lms"或"-l interval"来设置nvidia-smi的刷新频率,以实时监测GPU的使用情况。

你目前的是batch size已经差不多久只能这么大了,那么此时numworks并不是越大越好,你可以往小了一些改下说不定还有奇效(特别是旧版本的linux跑13900这种大小核的设计,很多时候都得屏蔽小核心达到最佳效果的)。另外一点就是你的内存大小也有点关系的,一般为了最佳适配,内存都会是显存的两倍左右及其以上的时候才是最合适的。