GPU显存占满但利用率却很低

来帕多瓦联培已经一个多月了,最近调代码跑实验又发现了这个问题。这里提供另外一个解决思路。一个原因还是 cpu没跟上gpu节奏

通常我们都会用尽可能大的 batch 来占满显存。但是如果cpu的读取和传输跟不上的话就会导致gpu利用率时上时下,而且训练时间还会变长。

这里可以尝试减小batch,以减轻cpu工作负担,增加gpu利用率,同时还能加速训练。 举个例子。

训练 基于resnet101+deeplabv3的语义分割模型:
1. batch size为4:总训练时间一小时;
2. batch size为2:总训练时间半小时;

下图为batch size=4时的设备状态。
可以看到gpu中间是有很多次休息的。
GPU显存占满但利用率却很低_第1张图片
同时训练时间也要一个多小时。
在这里插入图片描述

下图为batch size=2时的设备状态。
可以看到,仅仅降低了batch size,就把gpu利用率拉满了。
GPU显存占满但利用率却很低_第2张图片
同时训练时间也缩短了不少。

在这里插入图片描述
最后小batch的问题可以通过累积几个batch梯度再优化来解决。

总结

说到底还是不够有钱,这样也好,多出来的内存还能再让我跑跑别的程序!

你可能感兴趣的:(神经网络,图像,pytorch,深度学习,python)