一次惨痛的debug的经历-RuntimeError: CUDA error: an illegal memory access was encountered

之所以说惨痛是有原因的。这个错误有人严重怀疑是显卡和pytorch二者之一有一个是有问题的,也曾经想一度放弃,最后还是分享我的解决方法是啥,不确定对大家都适用。
一开始遇到这个错误,报的是我写的一个模块内的:

File "/gpfs/share/home/1601111331/uda_for_convex/convex_mirror_block/convex_mirror_block.py", line 126, in forward
    Rotx = torch.zeros(B, 3, 3).to(self.device)
RuntimeError: CUDA error: an illegal memory access was encountered

语法啥的也没有问题,这个错误出现的iter是随机的,就是不确定运行到哪一步就会出现这个问题,为了解决这个问题,我先从最简单的解决方案入手
比如使用cudnn benchnark=False之类的,还是不行,然后用CUDA_LAUNCH_BLOCKING=1还是不行,然后我感觉可能是数据声明的方式有问题,那我直接换利用一个现成的cuda上的tensor,进行new,这样的话就不会有创建tensor然后放到cuda上这样一个步骤,显然还是不行
然后我就怀疑是cuda版本和pytorch版本的问题,我就升级到了最新的pytorch1.9版本,还是会报这个错误,一度绝望。
关键是我用同样的代码,在我本地跑的时候就没有这个问题,我本地的环境是cuda8,pytorch1.0,所以我准备在学校的服务器上配置这个环境,但是在此之前,我一直想尝试但是没有尝试github上的一个人的解决方案,这个方案是:

If I use device = torch.device("cuda:1"), I always got RuntimeError: CUDA error: an illegal memory access was encountered error. But when I set a specific gpu by torch.cuda.set_device(1), everything is fine.

之前一直没有尝试是因为,这个解决方案修改起来太麻烦,毕竟我不可能逐个的去修改代码,看看哪些地方用.to(device),哪些地方用.cuda(),但是就在刚刚用同样的pytorch-1.9.0的环境,竟然没有报错...
所以接下来应该用这种方式将数据或者模型放到cuda之中...

评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值