RuntimeError: CUDA out of memory. Tried to allocate 144.00 MiB (GPU 0; 24.00 GiB total capacity; 3.29 GiB already allocated; 21.71 GiB free)
这个看起来GPU还有足够的空间,但事实上可能是你的内存可能不够!
我在在显存为12G的RTX 3060 运行一个模型能够成功,但在显存为24G的RTX 3090 Ti运行同一个模型失败,并提示CUDA内存不够。但从报错提示后可以清楚地看到显存还剩余很多。
在显存为12G的RTX 3060 运行程序,并打开任务管理器监控内存、CPU使用情况。未训练模型时,内存、CPU使用情况如下所示(内存64G对于大部分实验应该是足够的):
接下来开始运行程序,发现最多占用了超过28G内存:
而一旦完成模型的前向计算迭代过程内存占用又下滑到10G左右:
而监控显卡的情况 发现GPU自始至终利用率都不是很高,不知道是不是我的代码问题:
总结来说,显存为12G的RTX 3060内存有64G那么处理起来肯定是游刃有余的;但在显存为24G的RTX 3090 Ti内存只有32G,加上有其他程序正在运行,因此内存是远远不够的。虽然显示的是cuda memory不足,但其实是真正的memory不足。
1.增加内存容量,这个得加钱;
2.减少数据维度,会降低图片分辨率;
3.减少batch_size,可能会导致训练结果不好看;
4.放弃视觉,改换门庭。