RuntimeError: CUDA out of memory

问题描述

运行开源代码,使用CUDA在GPU运行,报错RuntimeError: CUDA out of memory. Tried to allocate 800.00 MiB (GPU 0; 6.00 GiB total capacity; 3.78 GiB already allocated; 155.14 MiB free; 679.80 MiB cached)

可以发现有6g用了3.78g,但是为什么说剩下只有155M,还有一个679Mcache是什么?现在我也不是很清楚,只是解决了问题

解决方法

搜罗网上方法

  1. tensorflow和pytorch冲突
    我用anaconda创建了新的虚拟环境,还是不行,顺便一提实际上不会冲突至少我最后解决时环境两个都装了,没有发生冲突现象两个都能用。
  2. 使用gpu进程过多导致gpu显存不足,关闭杀死一些进程
    我用命令 nvidia-smi和任务管理器查看了6g显存几乎没用,显然不是
  3. 设备号问题默认使用0号显卡,该显卡被用或者其他原因不能使用,应该设置使用其他如1,2号显卡。也有说要显示设置使用0号显卡
    具体参考:这里和这里和这里(皮一下)
    结论是不行,设备号问题应该是多显卡才会可能发生,我的电脑就一个GTX1060的独显,默认设备号0,根本没有别的设备号可以选
    (注:任务管理器能看到gpu0是集显主板intel自带,gpu1是独显n卡,但是cuda只支持n卡,所以我的cuda设备设置gpu号也只有1个0号,集显应该直接不算cuda里)
  4. 减少bitchSize
    成功解决!!
    这个方法最后才尝试主要原因是我刚刚接触CUDA和深度学习不熟悉这是什么,要修改工程原代码不知道怎么弄,所以一开始看到了这个方法也没有尝试。
    最后逼不得已还是去工程代码里翻出来了修改由100->50成功运行。
    bitchSize应该是设置GPU并行计算大小的。

原因分析

运行成功后发现,显存6g几乎用完了,虽然不知道程序做了什么但是果然是一次加载太多了,呢个bug应该是分块申请已经申请或被别的使用了好多(主要是程序申请走的,因为不跑程序的时候专业GPU显存利用率几乎是0),在申请下一个块的时候空间不够了,失败报错。

你可能感兴趣的:(bug解决)