nvidia-smi 和watch -n 1 nvidia-smi命令显示GPU占用为0,没有进程使用
GPU0上有11G空闲,但是训练模型时报错:
提示:
CUDA out of memory. Tried to allocate 1.12 GiB (GPU 0; 11.17 GiB total capacity; 9.99 GiB already allocated; 877.75 MiB free; 1.25 MiB cached)
需要1.12G内存,但是不够。明明有11.17G啊!
再次命令查看GPU占用,确认没有进程在跑。那为什么分配了9.99G?纳闷!!!
网上找了各种解决GPU内存泄漏,减少变量存储的方法,依然不管用。
关键是这句话:
Tried to allocate 1.12 GiB (GPU 0; 11.17 GiB total capacity; 9.99 GiB already allocated; 877.75 MiB free; 1.25 MiB cached)
我理解错误了!我以为自己程序一共需要1.12G内存,9.99G是被别人占用了(然而并没有其他进程)。
原来是报错里面提到allocated 9.99G的内存其实就是已经分配给我的进程的内存,但是我还需要1.12G内存,剩下的内存不够,所以报错!!!!
最后把图片尺寸调小,batchsize调小,程序可以正常运行!特别是没调图像尺寸前,GPU内存占用真的太大!