问题描述

明明显存充足,我们服务器有两张卡,nvidia-smi 查看时两张卡空闲:

但是train的时候总是提示“CUDA out of memory”:

注意!这里的allocated是你自己程序所占用的,我之前理解错了,以为是被别人占用的(然而并没有其他进程)。

原因分析:

原因是cuda内存不够,查了一下试过以下方法(都没解决):

1、改小batchsize,后面调到1了都不行; 2、改小num_worker,设置为0了都不行; 3、用torch.cuda.empty_cache() 清理空闲内存,没啥用(可能我没用对); 4、还有博主建议说改小图像尺寸,我的图像已经是256x256了,不大,所以我没试。

解决方案:

我先是在程序里面查看了一下GPU占用情况:

# 查看GPU使用情况

print(torch.cuda.memory_allocated())

print(torch.cuda.memory_reserved())

然后我发现,在某些代码片段内部,内存占用率就很高了,会不会是某些计算占用内存太多?于是我恍然大悟:由于我是要对比不同编码器的特征提取效果,训练的时候每一个编码器都会运行一遍,占用了大量内存!于是我先注释掉不用的编码器,只留下本次实验想要运行的编码器,问题解决! 所以大家在上述方法都不work的时候,可以看看是不是自己模型太大,或者计算量太大,试试适量减少一些冗余计算。

精彩链接

评论可见,请评论后查看内容,谢谢!!!
 您阅读本篇文章共花了: