当前位置: 首页 > article >正文

CUDA error: device-side assert triggered 报错解决

bug show

报错如下:

[E ProcessGroupNCCL.cpp:915] [Rank 1] NCCL watchdog thread terminated with exception: 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.
 
Exception raised from c10_cuda_check_implementation at ../c10/cuda/CUDAException.cpp:44 (most recent call first):
frame #0: c10::Error::Error(c10::SourceLocation, std::string) + 0x57 (0x7feeb00c5617 in /usr/local/lib/python3.10/dist-packages/torch/lib/libc10.so)
frame #1: c10::detail::torchCheckFail(char const*, char const*, unsigned int, std::string const&) + 0x64 (0x7feeb008098d in /usr/local/lib/python3.10/dist-packages/torch/lib/libc10.so)
frame #2: c10::cuda::c10_cuda_check_implementation(int, char const*, char const*, int, bool) + 0x118 (0x7feeb0176518 in /usr/local/lib/python3.10/dist-packages/torch/lib/libc10_cuda.so)
frame #3: c10d::ProcessGroupNCCL::WorkNCCL::finishedGPUExecutionInternal() const + 0x80 (0x7fedff6a0150 in /usr/local/lib/python3.10/dist-packages/torch/lib/libtorch_cuda.so)
frame #4: c10d::ProcessGroupNCCL::WorkNCCL::isCompleted() + 0x58 (0x7fedff6a3f78 in /usr/local/lib/python3.10/dist-packages/torch/lib/libtorch_cuda.so)
frame #5: c10d::ProcessGroupNCCL::workCleanupLoop() + 0x24b (0x7fedff6ba7bb in /usr/local/lib/python3.10/dist-packages/torch/lib/libtorch_cuda.so)
frame #6: c10d::ProcessGroupNCCL::ncclCommWatchdog() + 0x78 (0x7fedff6baac8 in /usr/local/lib/python3.10/dist-packages/torch/lib/libtorch_cuda.so)
frame #7: <unknown function> + 0xdc253 (0x7feeb0439253 in /usr/lib/x86_64-linux-gnu/libstdc++.so.6)
frame #8: <unknown function> + 0x94ac3 (0x7feeb31f3ac3 in /usr/lib/x86_64-linux-gnu/libc.so.6)
frame #9: <unknown function> + 0x126850 (0x7feeb3285850 in /usr/lib/x86_64-linux-gnu/libc.so.6)
 
terminate called after throwing an instance of 'std::runtime_error'
  what():  [Rank 1] NCCL watchdog thread terminated with exception: 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以避免错误。

大部分错误是由于下边的原因导致的

  • 1.1 数据类型不匹配
    在PyTorch中,张量的数据类型必须与模型的预期类型匹配。如果存在不匹配,可能会导致CUDA设备上的断言失败。例如,如果模型期望输入是torch.FloatTensor类型,而实际输入是torch.LongTensor,就会引发该错误。

  • 1.2 索引超出范围
    在使用索引操作时,如果索引超出了张量的范围,也会触发CUDA设备上的断言错误。比如,在进行分类任务时,如果目标标签的索引值超出了类别数的范围,就会导致该错误。

  • 1.3 未正确初始化的张量
    在某些情况下,未正确初始化的张量也会导致设备断言错误。例如,在使用未初始化的张量进行计算时,可能会触发此错误。

我这里的在做了很多debug后,发现是一个int 类型的tensor中不小心混入了一个float(“nan”),然后在用idx去tensor中取具体的值时,因为float的内存大小和int不一样,导致越界,直接内核报错推出。

英语原文:
https://discuss.pytorch.org/t/scattergatherkernel-cu-assertion-idx-dim-0-idx-dim-index-size-index-out-of-bounds/195356

https://stackoverflow.com/questions/58242415/how-to-fix-runtimeerror-cuda-error-device-side-assert-triggered-in-pytorch

https://github.com/pytorch/pytorch/issues/67978


http://www.kler.cn/a/393555.html

相关文章:

  • Go语言 实现将中文转化为拼音
  • Mac intel 安装IDEA激活时遇到问题 jetbrains.vmoptions.plist: Permission denied
  • 【面试题】发起一次网络请求,当请求>=1s,立马中断
  • 【OceanBase 诊断调优】—— ocp上针对OB租户CPU消耗计算逻辑
  • 【Pikachu】目录遍历实战
  • 24.11.13 Javascript3
  • androidstudio下载gradle慢
  • openai Realtime API (实时语音)
  • 鸿蒙版APP-图书购物商城案例
  • 2023年MathorCup数学建模A题量子计算机在信用评分卡组合优化中的应用解题全过程文档加程序
  • ip addr show
  • 建筑施工特种作业人员安全生产知识试题
  • docker 镜像索引和用法
  • c++学习:封装继承多态
  • 「QT」几何数据类 之 QVector4D 四维向量类
  • 揭秘文心一言,智能助手新体验
  • Yolo11改进策略:上采样改进|CARAFE,轻量级上采样|即插即用|附改进方法+代码
  • 冒泡排序讲解
  • 【Linux取经之路】进程信号的保存
  • Python 正则表达式的一些介绍和使用方法说明(数字、字母和数字、电子邮件地址、网址、电话号码(简单)、IPv4 )
  • 报名开启|开放原子大赛“Rust数据结构与算法学习赛”
  • 吴恩达深度学习笔记(12)14
  • VBA高级应用30例应用3在Excel中的ListObject对象:插入行和列
  • 阿里云云效制品仓库(maven)私服配置快速入门
  • Linux软件包管理与Vim编辑器使用指南
  • 文件包含绕过(session打条件竞争应该是文件上传的!!!)