当前位置:   article > 正文

显存充足,pytorch却报错CUDA out of memory?(已解决)_torch.cuda.outofmemoryerror: allocation on device

torch.cuda.outofmemoryerror: allocation on device 0 would exceed allowed mem

问题描述

明明显存充足,我们服务器有两张卡,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())
  • 1
  • 2
  • 3

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

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/知新_RL/article/detail/165748
推荐阅读
相关标签
  

闽ICP备14008679号