RuntimeError: CUDA error: an illegal memory access was encountered 解决思路

问题描述:

在跑编译正常通过CPU上也正常运行的某项目时,在运行到某个epoch时,程序突然出现以下错误:

RuntimeError: CUDA error: an illegal memory access was encountered
CUDA kernel errors might be asynchronously reported at some other API call,so the stacktrace below might be incorrect.
For debugging consider passing CUDA_LAUNCH_BLOCKING=1.

如下图所示
请添加图片描述


原因分析:

网络上有很多解决方案,但是实测都不太适用(因为出现这种bug的原因是多种的):

  1. [彻底解决]CUDA error: an illegal memory access was encountered(CUDA错误 非法访问内存)
  2. 【debug】报错RuntimeError: CUDA error: an illegal memory access was encountered
  3. 如何解决一个诡异的pytorch的illegal memory access报错? - 知乎
  4. pytorch报错:CUDA error: an illegal memory access was encountered

有一个博客评论指出:这种错误会出现在自己编写的一些loss或指标函数上面,由于转化为了cpu运行numpy所出现的错误。这种情况与笔者遇到的问题是类似的,其在里面加time.sleep(1)可以解决;

另一篇博客指出:在外网的评论说可能是GPU硬件问题导致的错误

综合起来并实测来看,可能是GPU负载过大访问冲突/越界导致的,并且受多种因素影响。


解决方案:

首先,一定要在CPU模式下,完全编译通过!很多情况是代码本身写错了,出现访问越界之类的情况。

.cpu().numpy() 处出现报错

  1. 在模型训练代码相关位置里面添加延时函数 Thread.sleep(毫秒数) 或者 time.sleep(1) ,以延缓GPU压力;
  2. 减小dataloader里的 num_worker 数量,
  • 12
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值