问题描述

明明显存充足,我们服务器有两张卡,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的时候,可以看看是不是自己模型太大,或者计算量太大,试试适量减少一些冗余计算。

Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐