问题描述:

在跑编译正常通过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 数量,
Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐