一次惨痛的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之中...


后来发现好像.cuda()也不能解决问题,然后我将pytorch下降到1.1,这个问题得到了解决

真难受,明明是降级pytorch可以解决的问题,但是我却解决了一个星期...

posted on 2021-07-29 20:05  YongjieShi  阅读(8083)  评论(2编辑  收藏  举报

导航