BUG:解决跑AI模型(非大模型)爆内存问题

问题描述:在跑各种不是很大的模型中,时常存在着爆内存的问题(即明明是一个不大的模型,但是运行会出问题),这种问题分以下两种,附带解决方式

问题1: 爆GPU内存

问题报错描述:OutOfMemoryError: CUDA out of memory. Tried to allocate 186.27 GiB. GPU 0 has a total capacty of 12.00 GiB of which 7.12 GiB is free. Of the allocated memory 3.75 GiB is allocated by PyTorch, and 68.99 MiB is reserved by PyTorch but unallocated. If reserved but unallocated memory is large try setting max_split_size_mb to avoid fragmentation. See documentation for Memory Management and PYTORCH_CUDA_ALLOC_CONF

这种属于GPU的内存爆了,相当于想要把模型和数据放到GPU上时出现内存不足的情况。一般是由于将训练的数据一次性太大企图放到GPU上导致的。该问题出现的原因可能是由于以下类似代码造成的。
正确的代码应该是这样:

train_data = torch.Tensor(data[:batch_size])

然后实际中写成了这样:

train_data = torch.Tensor(data)

错误的将原本应该放入一个batch_size的数据放到gpu上,结果直接将整个数据集数据放到了GPU上,就会导致GPU的内存直接爆炸。

问题2:爆cpu内存

爆cpu内存分为两种可能,首先观察是否有测试部分(即对test测试集进行测试,若有可能是第2.1问题,若没有可能是2.2问题)

2.1 梯度下降导致的内存爆炸

在进行测试集测试时,要在测试集的开头加上

with torch.no_grad():
2.2 train_loss导致的内存爆炸

因为我们有的时候需要作图,所以我们会将训练过程中的loss放到一个列表中来,但是这样可能会导致内存占有的不断提升,因为往列表里放入train_loss,表明这个对象在一个list列表里面有用,则不会被释放掉空间,类似于会出现问题的代码如下所示:

train.append(train_loss)

改成如下代码即可避免这个问题:

train.append(train_loss.item())

找bug不易,点个赞再走吧

  • 5
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值