zoukankan      html  css  js  c++  java
  • 一次惨痛的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之中...

  • 相关阅读:
    数组常用操作实现
    链表简单实现栈与队列
    亿万级别的表数据处理方式
    ubuntu安装与卸载.dep软件
    pg数据库表接口和数据导出
    深入分析理解Tomcat体系结构
    Servlet源码级别进行详解
    Maven命令行创建java或javaWeb项目
    解释语言与编译语言
    C++中Reference与Pointer的不同
  • 原文地址:https://www.cnblogs.com/yongjieShi/p/15076835.html
Copyright © 2011-2022 走看看