RuntimeError: CUDA out of memory 解决办法

服务器的gpu内存不够,导致程序运行失败。
问题如下:

RuntimeError: CUDA out of memory. Tried to allocate 38.15 GiB (GPU 0; 31.75 GiB total capacity; 1.07 GiB already allocated; 26.18 GiB free; 3.45 GiB cached)

内存不够的解决办法:

1.不使用梯度方法

在test过程中,在dataloader循环前加入,

with torch.no_grad():

即不使用梯度回传,节省计算。

2.torch.nn.DataParallel()

针对拥有多卡的方法,可以使用该函数将内存较为平均的放到每张卡上,而不是只用一张卡来计算。
语句为:

device = 'cuda' if torch.cuda.is_available() else 'cpu'
net = net.to(device)
if device == 'cuda':
    net = torch.nn.DataParallel(net)
    cudnn.benchmark = True

3.减少batch_size

有时一个batch的size过大,会导致一个batch的训练过于冗余,减少batch_size的大小能省很多内存。

parser.add_argument('--batch_size', default=256, type=int, help='Number of images in each mini-batch')

如以上,从1024减小到256,训练模型效果没有降低太多,但保证在当前gpu环境下可以很好运行。

4.释放无关内存

在报错的行前后都加上:

if hasattr(torch.cuda, 'empty_cache'):
	torch.cuda.empty_cache()
  • 6
    点赞
  • 34
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
当在训练AI模型时遇到CUDA内存不足的问题,这可能是由于模型过大或者训练数据量大导致的。我们可以采取一些措施来解决这个问题。 首先,我们可以尝试减小模型的规模。可以通过减少模型的隐藏层数、每层的神经元数目或者使用更小的词嵌入矩阵等方法来减小模型的尺寸。通过减小模型的规模可以减少所需的内存量,从而避免CUDA内存不足的问题。 其次,我们可以使用更小的批量大小来训练模型。批量大小越大,所需的内存量就越大。通过减小批量大小,我们可以减少内存的使用量,从而解决CUDA内存不足的问题。虽然较小的批量大小可能会对训练的速度产生一定影响,但这是一个权衡的问题。 另外,我们可以考虑将模型的训练进行分布式处理。通过将模型训练过程分解到多个GPU或者多台机器上,可以同时利用多个设备的内存来解决内存不足的问题。这种方式需要使用分布式训练框架,如TensorFlow的分布式训练。 此外,我们还可以考虑使用更大的GPU显存或者使用具有更高显存容量的设备。GPU显存越大,我们可以训练更大的模型或者使用更大的批量大小。这需要确保训练设备具有足够的显存容量来存储模型参数和中间计算结果。 总之,在遇到CUDA内存不足的问题时,我们可以通过减小模型规模、采用较小的批量大小、分布式训练或者使用更大的GPU显存等方式来解决。选择适合的方法取决于具体的情况和可用的资源。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值