【yolo系列:运行报错RuntimeError: CUDA error: an illegal memory access was encountered CUDA kernel errors m】
已于 2023-10-11 16:07:52 修改
2023-09-06 20:16:46 阅读量 581

项目场景:

使用yolov7训练数据集,但是训练到一半就开始停止了并且报错

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.

使用yolov7训练数据集,训练过半报错。
在这里插入图片描述

原因分析:

提示:这里填写问题的分析:

这通常是由以下几种原因之一引起的:

内存溢出:模型或数据可能太大,无法适应GPU内存。这会导致CUDA错误。可以减小批量大小、减小模型规模或使用更小的输入图像来减少内存使用。
GPU驱动问题:有时,过时的或不稳定的GPU驱动程序可能导致CUDA错误。更新PU驱动程序到最新版本,或者回滚到一个较稳定的版本。

解决方案:

提示:这里填写该问题的具体解决方案:

CUDA_LAUNCH_BLOCKING:根据错误消息的建议,设置环境变CUDA_LAUNCH_BLOCKING=1。
在系统环境变量里面设置如上的
在这里插入图片描述
然后重启电脑即可。

这个错误信息表明在使用CUDA(NVIDIA的并行计算平台和应用程序接口)加速深度学习模型时,程序遇到了一个非法的内存访问错误。CUDA是一种并行计算框架,它允许在NVIDIA的GPU上进行高效的数值计算,加速深度学习模型的训练和推断过程。

在这个错误中,程序试图访问GPU内存的某个位置,但该位置不在合法的内存范围内,可能是由于数组越界、指针错误或其他内存访问错误引起的。这种错误通常是由于代码逻辑或者数据处理的问题引起的。

在错误信息中,还提到了可能的解决方案,其中一种是通过设置环境变量CUDA_LAUNCH_BLOCKING=1来启用CUDA的阻塞启动模式。在阻塞启动模式下,CUDA会等待每个核函数(CUDA程序的一个执行单元)完成后再继续执行下一个,这样可以更容易地捕获错误并确定问题出现的位置。但请注意,在阻塞启动模式下,程序的执行速度可能会受到影响。

要解决这个问题,你可以考虑以下步骤:

检查代码逻辑:仔细检查你的代码,特别是涉及到GPU内存访问的部分,确保没有数组越界、指针错误等问题。
数据处理:如果你的代码中涉及到数据的加载、预处理等操作,检查这些部分是否有问题。确保数据的维度、类型等与模型期望的输入匹配。
GPU内存管理:检查你的代码中关于GPU内存的分配和释放操作,确保没有内存泄漏或者释放已经释放的内存。
CUDA调试工具:使用NVIDIA提供的CUDA调试工具,例如Nsight等,来进行更详细的内存访问分析和错误定位。
降低Batch Size:如果问题出现在模型训练时,尝试减小Batch Size(批量大小),以减少内存占用。
更新驱动和CUDA版本:确保你的NVIDIA显卡驱动和CUDA版本是最新的,有时更新驱动和CUDA版本可以解决一些已知的问题。

通过以上方法,你可以更好地定位和解决CUDA错误,确保你的深度学习程序能够在GPU上顺利运行。
原因分析:
网络上有很多解决方案,但是实测都不太适用(因为出现这种bug的原因是多种的):

[彻底解决]CUDA error: an illegal memory access was encountered(CUDA错误 非法访问内存)
【debug】报错RuntimeError: CUDA error: an illegal memory access was encountered
如何解决一个诡异的pytorch的illegal memory access报错? - 知乎
pytorch报错:CUDA error: an illegal memory access was encountered
有一个博客评论指出:这种错误会出现在自己编写的一些loss或指标函数上面,由于转化为了cpu运行numpy所出现的错误。这种情况与笔者遇到的问题是类似的,其在里面加time.sleep(1)可以解决;

原文链接:

然而使用CPU跑却可以 报错 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 ... RuntimeError: CUDA error: an illegal memory access was encountered 首先,大家先检查自己的网络的参数是否有问题,如果参数有问题会导致此问题。 其次,博主遇到一个情况。在单GPU下开启时,eval阶段会报这种错误。 torch.nn.DataParallel(net,device_ids=[0]) 在net eval之前加... 用pytorch在多卡训练transformers的时候出现了以下问题: RuntimeError: CUDA error: an illegal memory access was encountered terminate called after throwing an instance of 'c10::Error' what(): CUDA error: an illegal memory access was encountered Exception raised from create 先说一下在网上看到的问题: 第一种可能你的程序涉及到并行计算,但你只有一张卡,因此只要将程序涉及到并行计算的部分改成单卡即可 找找有没有 torch.nn.DataParallel() 第二种一部分数据或者模型在cpu上,另外一部分在gpu上。 PS:第二种和第一种可以强行 os.environ["CUDA_VISIBLE_DEVICES"]为指定ID 第三种CUDNN版本不对?感觉这种可能比较小 然后说一下我是怎么解决的: 最关键的,也是我遇到的问题,这个错误没有表明和显存溢出存在着联系,因为显存溢出 mmseg工程报错RuntimeError: CUDA error: an illegal memory access was encountered解决。 标题用pycharm导入numpy包的和使用时报错RuntimeError: The current Numpy installation (‘D:\python3.6\lib\site-packages\numpy\init.py 1.file→settings→project interpreter→+(建议用pychon3.6版本,我之前用3.8版本安装不上numpy), 2.搜索numpy,注意把下面对号点上 3.现在简单用numpy还是会报错RuntimeError: The current Numpy installation (‘D:\python3.6\lib\site import tornado.ioloop import tornado.web from tornado.httpclient import HTTPClient, AsyncHTTPClient class MainHandler(tornado.web.RequestHandler): def get(self): h_c = HTTPClient() res = h_c.fetch("http://www.baidu.com") # print(res) # pass