RuntimeError: CUDA error: an illegal memory access was encountered

前言

我在跑深度学习模型。其中卷积用CUDA写的。数据集是cifar10。在运行了1个epoch后,就报错:RuntimeError: CUDA error: an illegal memory access was encountered。这个错误是在调用loss.backward()方法时出现的。
在网上看了很多方法,有说改小batch_size的,有说让input_data和input_label都放在GPU上的,有说升级pytorch版本的,有说换GPU卡的…

解决办法

我在取数据进行训练时,先看看GPU内存和缓存的使用情况,具体是在出错的地方使用

print(torch.cuda.memory_allocated())
print(torch.cuda.memory_cached())

查看存储空间的使用情况。发现这两个值很接近。这说明内存被占用满了。但是我查看GPU的利用率,发现GPU的利用率才达到59%。
感觉挺玄乎的,我在调用loss.backward()前先使用torch.cuda.empty_cache()释放内存,把batch_size改小,就能运行了。
代码如下所示:

    for step, (x, y) in enumerate(train_loader):
        x = x.cuda()
        y = y.cuda()
        if step == 0:
            batch_size = len(y)
        optimizer.zero_grad()

        output = net(x)
        loss = loss_function(output, y).cuda()
        #####加上了代码######
        print(torch.cuda.memory_allocated())
        print(torch.cuda.memory_cached())
        torch.cuda.empty_cache()
        #####加上了代码######
        loss.backward()
        if args.trainspflag:
            UpdateBnFactor()

        optimizer.step()
        total_loss += (loss.item()/length)
        #####在一次epoch完后再释放一次内存####
        torch.cuda.empty_cache()
        ............

总结

玄乎!GPU内存利用率不高,但是就是说内存不够用。最开始我把batch_size调整为1,还是报同样的错!但是当我一边释放内存,一边改小batch_size后,又能用了。唉,我这个小白+菜鸟独闯CUDA编程,特别是涉及到内存管理上,真的是有N多坑要踩啊!

  • 9
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值