pytorch 提高gpu利用率

pytorch跑Unet代码,gpu利用率在0%-20%闪现,主要问题是GPU一直在等cpu处理的数据传输过去。利用top查看cup的利用率也是从0省道100%且显然cup的线程并不多,能处理出的数据也不多。在一般的程序中,除了加载从dataloader中数据和model的运行需要gpu,其余更多的dataset、dataloader、loss的计算和日志的输出很多部分都需要cup的计算。
所以,可以提升的方面包括 从class dataset的优化、dataloader的优化和其他部分代码的优化。当然代码的优化是一个长期的考验代码能力的问题。那么短期的提升在于对dataloader的优化:
1.batchsize调大 提高GPU内存占用率
2.num_works 调到适当值,一般情况下为8、16是比较合适的值。太小就会出现我上述讲道的一些问题。太大的话cpu线程增加会导致gpu的利用率降低。因为模型需要将数据平均分配到几个子线程去进行预处理,分发等数据操作,设高了反而影响效率。(具体原因请参考,分析很全面的一篇文章)
3.pin_memory =True 省掉了将数据从CPU传入到缓存RAM里面,再给传输到GPU上;为True时是直接映射到GPU的相关内存块上,省掉了一点数据传输时间。

    原文作者:ARYAD
    原文地址: https://blog.csdn.net/ARYAD/article/details/115507756
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞