深度学习在gpu上训练时,gpu利用率保持在60%左右,请大家分析,如何榨干gpu

这里附上两张cpu以及显卡的使用情况截图,请帮忙分析一下,怎么能提高gpu的使用率,服务器为8张2080ti,训练过程中输入图片为600*600,使用的网络也比较深的那种,所以batchsize设置为32,dataloader的参数设置为shuffle=True, num_workers=8, pin_memory=False

我之前认为是不是cpu影响了gpu的使用,但查看cpu感觉cpu似乎也没跑起来,请帮忙分析分析,还有一点,我每个batch都用了print输出,并将这个输出进行txt文件的保存,这个会严重影响我gpu的速度吗。

img

img

试试调大batchsize?

你搞错了一个概念,那就是GPU利用率是一段时间内的平均使用率,也就是说在你显存吃满的情况下,你的GPU计算速度快,在等待内存的数据,所以平均起来才60。举个极端的例子就是,GPU有60的时间是在计算,40的时间空闲等待IO,综合起来利用率60.所以你目前瓶颈并不在GPU,而是在内存或者CPU这边,调大batch size的方案不管用,因为你的显存就这么大,无法再容忍更大batch的数据。
所以按照木桶理论来说,你需要有足够大的内存来存放和显卡交换的数据,更大的work num来榨干CPU剩余算力。
所以看下你的CPU多少核的,一般来说留下两个核用于其他的东西,将worknum设置为核心-2就差不多是CPU极限了,剩下的就是多线程加载的数据是否足够多,硬盘读写能力是否能跟上CPU的每个线程,内存能否放的下每个线程读取的数据了。都达到的话GPU利用率还是上不去的话,那就是GPU计算速度真的快,网络不够深不够大
另外,打印和存文件的话,影响的是CPU时间,如果你学过汇编的话,这两个都需要CPU中断,进行IO操作,理论上相当于GPU没事干的时间更多了一些。不过一般这个速度也不会影响很大,除非你频繁读写

img