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的相关内存块上,省掉了一点数据传输时间。
pytorch 提高gpu利用率
于 2021-04-08 10:36:11 首次发布
本文讨论了在使用PyTorch运行Unet模型时遇到的GPU利用率低的问题,主要原因是GPU等待CPU传输数据。建议通过增大batch size和调整num_workers来优化dataloader,同时启用pin_memory以减少数据传输时间。此外,还提到对classdataset、dataloader和其他代码部分的优化也是提升性能的关键。
部署运行你感兴趣的模型镜像
您可能感兴趣的与本文相关的镜像
PyTorch 2.7
PyTorch
Cuda
PyTorch 是一个开源的 Python 机器学习库,基于 Torch 库,底层由 C++ 实现,应用于人工智能领域,如计算机视觉和自然语言处理

2214





