【已解决】RuntimeError: CUDA error: device-side assert triggeredCUDA kernel errors might be asynchronous

简介: 【已解决】RuntimeError: CUDA error: device-side assert triggeredCUDA kernel errors might be asynchronous

问题

报错RuntimeError: CUDA error: device-side assert triggeredCUDA kernel errors might be asynchronous

报错原因分析

完整报错:

RuntimeError: CUDA error: device-side assert triggered

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.

Compile with TORCH_USE_CUDA_DSA to enable device-side assertions.

我们翻译一下:


RuntimeError: CUDA error: device-side assert triggered


运行时错误:CUDA设备端断言被触发。

这表明在GPU设备上执行的代码中有断言失败。断言是一种错误检查,如果代码中的某个条件为假,则会引发断言失败。

CUDA kernel errors might be asynchronously reported at some other API call, so the stacktrace below might be incorrect.


CUDA核心(kernel)错误可能会在某些其他API调用中异步报告,因此下面的堆栈跟踪可能不正确。

由于CUDA操作可能是异步执行的,错误可能不会立即在引发它的确切位置被报告。这意味着错误消息中的堆栈跟踪可能不指向实际引发问题的位置。

For debugging consider passing CUDA_LAUNCH_BLOCKING=1.


为了调试,请考虑传递CUDA_LAUNCH_BLOCKING=1。

这是一个调试技巧。通过设置环境变量CUDA_LAUNCH_BLOCKING=1,可以使CUDA操作同步执行,这有助于准确地定位引发错误的代码行。

Compile with ‘TORCH_USE_CUDA_DSA’ to enable device-side assertions.


使用‘TORCH_USE_CUDA_DSA’编译以启用设备端断言。

这建议在编译PyTorch时启用设备端断言,这可以帮助开发者捕捉到在GPU上执行的代码中的问题。

解决方法

在线搜索解决方案:


我首先在网上搜索了这个问题的解决方案,发现许多网友建议错误可能是由于分类任务中训练数据标签超出了设定的类别数目所导致的。例如,如果设置了8个类别,但训练数据中的标签却包含了9,就会触发这个错误。此外,还需要注意一个常见的陷阱:即使标签从0开始计数,在PyTorch中使用0或负数作为类别标签也会导致错误。因此,如果类别标签从0开始,需要将所有类别标签加1以避免错误。


根据PyTorch的工作原理,它会扫描存放训练数据的train_path目录下每个文件夹(每个类别的图片都存放在自己的文件夹中),并将每个类别映射为一个数值。例如,如果有4个类别,类别标签将被映射为[0, 1, 2, 3]。在二分类问题中,标签会被映射为[0, 1],但在多分类问题中,标签的映射可能会不同,这有时会导致错误。

代码审查:


尽管我按照上述思路进行了修改,但问题依然存在。因此,我仔细检查了代码,最终发现问题并不在于标签与类别数目不匹配,而在于神经网络最后一层的设置有误。具体来说,输出层的设置需要与模型应该输出的类别数目一致。


在我的模型中,原本的代码是这样的:

self.outlayer = nn.Linear(256 * 1 * 1, 3)  # 这是一个3分类问题的全连接层设置

但由于我面对的是5分类问题,我需要修改全连接层以反映正确的类别数目,修改后的代码如下:

self.outlayer = nn.Linear(256 * 1 * 1, 5)  # 修改为5分类问题的全连接层设置

经过这次修改,错误得到了解决。

总结来说,解决这个问题需要仔细检查数据的标签处理以及神经网络模型的设置,确保它们与问题的实际需求相匹配。在调试过程中,对代码的每一个细节都进行仔细的审查是非常关键的。

相关文章
|
并行计算 Linux PyTorch
RuntimeError: CUDA error: device-side assert triggered
我在运行PyG和transformers代码时两次遇到了这一问题,在此加以记录。
|
计算机视觉
如何理解focal loss/GIOU(yolo改进损失函数)
如何理解focal loss/GIOU(yolo改进损失函数)
|
并行计算 Docker 容器
Mamba 环境安装:causal-conv1d和mamba-ssm报错解决办法
Mamba 环境安装:causal-conv1d和mamba-ssm报错解决办法
4344 0
|
算法 数据库 计算机视觉
Dataset之COCO数据集:COCO数据集的简介、下载、使用方法之详细攻略
Dataset之COCO数据集:COCO数据集的简介、下载、使用方法之详细攻略
|
11月前
|
算法 PyTorch 算法框架/工具
Pytorch学习笔记(九):Pytorch模型的FLOPs、模型参数量等信息输出(torchstat、thop、ptflops、torchsummary)
本文介绍了如何使用torchstat、thop、ptflops和torchsummary等工具来计算Pytorch模型的FLOPs、模型参数量等信息。
1575 2
|
机器学习/深度学习
神经网络各种层的输入输出尺寸计算
神经网络各种层的输入输出尺寸计算
627 1
|
数据采集 机器学习/深度学习 Python
【Python】已完美解决:ImportError: cannot import name ‘Imputer‘ from ‘sklearn.preprocessing
【Python】已完美解决:ImportError: cannot import name ‘Imputer‘ from ‘sklearn.preprocessing
896 3
|
9月前
|
数据采集 前端开发 物联网
【项目实战】通过LLaMaFactory+Qwen2-VL-2B微调一个多模态医疗大模型
本文介绍了一个基于多模态大模型的医疗图像诊断项目。项目旨在通过训练一个医疗领域的多模态大模型,提高医生处理医学图像的效率,辅助诊断和治疗。作者以家中老人的脑部CT为例,展示了如何利用MedTrinity-25M数据集训练模型,经过数据准备、环境搭建、模型训练及微调、最终验证等步骤,成功使模型能够识别CT图像并给出具体的诊断意见,与专业医生的诊断结果高度吻合。
16008 5
【项目实战】通过LLaMaFactory+Qwen2-VL-2B微调一个多模态医疗大模型
|
并行计算 PyTorch Linux
大概率(5重方法)解决RuntimeError: CUDA out of memory. Tried to allocate ... MiB
大概率(5重方法)解决RuntimeError: CUDA out of memory. Tried to allocate ... MiB
8579 0
|
11月前
|
机器学习/深度学习 人工智能 文字识别
ultralytics YOLO11 全新发布!(原理介绍+代码详见+结构框图)
本文详细介绍YOLO11,包括其全新特性、代码实现及结构框图,并提供如何使用NEU-DET数据集进行训练的指南。YOLO11在前代基础上引入了新功能和改进,如C3k2、C2PSA模块和更轻量级的分类检测头,显著提升了模型的性能和灵活性。文中还对比了YOLO11与YOLOv8的区别,并展示了训练过程和结果的可视化
16886 0