Machine Learning-CUDA out of memory 解决

Machine Learning-CUDA out of memory 解决,第1张

Machine Learning-CUDA out of memory 解决 报错原文
RuntimeError: CUDA out of memory. Tried to allocate 20.00 MiB 
(GPU 0; 10.92 GiB total capacity; 1.43 GiB already allocated; 10.69 MiB free; 1.49 GiB reserved in total by PyTorch) 
If reserved memory is >> allocated memory try setting max_split_size_mb to avoid fragmentation.  
See documentation for Memory Management and PYTORCH_CUDA_ALLOC_CONF
太长不看版
  1. 就是显存不够了,换更大的显卡或者调小你的batch_size吧
  2. 在报错的代码那里加上 torch.cuda.empty_cache( ),及时清理不用的缓存变量
  3. 同时使用model.eval()和torch.no_grad(),就像下面这样
self.model.eval()
with torch.no_grad():
{
	训练代码
}
  1. 如果上面的方法对你都没用的话,那你可能就得接着往下看了
详细解决

前段时间训练模型的时候突然碰到这么一个报错,读了一下发现说是内存爆了,我心里一寻思,不能吧,以前在Colab上跑都没遇到过这事,现在怎么换成高大上的实验室里的服务器反而爆内存了呢?
于是大概研究了一下,首先:

nvidia-smi

这行代码简单来说就是可以看到当前设备上显卡的使用情况,具体的解释这位大哥写的很详细啦
nvidia-smi 命令详解
于是我发现,我们这个服务器上一共是有两张卡的,其中一张卡占用率是100%,另一张卡是13%,按理说显存不应该爆呀?
后来我仔细看了一下代码,发现原因是这么回事:
首先,熟悉pytorch的朋友可能都知道,Pytorch内部有这么一个函数:
torch.nn.DataParallel(),这个函数简单来说就是可以把数据分别移动到你所有可用的显卡上进行计算,那么在0卡被占满的情况下就肯定会报错了
那么我把这个部分的代码注释掉之后,把device直接设置cuda:1发现还是不行,这是因为1卡还是被占用的缘故。

所以在这种情况下,解决方法就变成了:
1. 等着另外的大哥用完之后把卡让出来或者把计算设备换成cpu

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/714627.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-04-24
下一篇 2022-04-24

发表评论

登录后才能评论

评论列表(0条)

保存