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.xdnf.cn/news/16335.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

【Gitee版】一篇教你如何快速入门git(详解)

前言--区分Git与Gitee Git 是一个强大的分布式版本控制系统&#xff0c;用于管理源代码。市面上有很多基于git的仓库网站&#xff0c;例如&#xff1a;GitHub、Gitee、GitCode等&#xff0c;它们之间的关系就好像是&#xff1a;git为基类&#xff0c;剩余为子类的样子。使用的…

Linux系统编程学习 NO.11——进程的概念(2)

谈谈进程的性质 进程的竞争性 由于CPU资源是稀缺的,进程数量是众多的。不可避免需要造成进程排队等待CPU资源的动作&#xff0c;内核的设计者为了让操作系统合理的去调度这这些进程&#xff0c;就产生了进程优先级的概念。设置合理的进程优先级能让不同进程公平的去竞争CPU资…

灵神 刷题DAY1

Python与java的刷题的区别 1. Python没有分号 2. Python不能return的时候赋值 3. Python没有小括号和花括号 4. Python的循环很奇怪&#xff0c;没有for(int i0;i<32;i)这种形式 而是直接用的是for i in range(n)这种 5. Python中没有 6. Python中没有&& 是an…

Nginx中使用keepalive实现保持上游长连接实现提高吞吐量示例与测试

场景 HTTP1 .1之后协议支持持久连接&#xff0c;也就是长连接&#xff0c;优点在于在一个TCP连接上可以传送多个HTTP请求和响应&#xff0c; 减少了建立和关闭连接的消耗和延迟。 如果我们使用了nginx去作为反向代理或者负载均衡&#xff0c;从客户端过来的长连接请求就会被…

【Spring AOP 原理】

首先AOP跟OOP(面向对象编程)、IOC(控制反转)一样都是一种编程思想 跟OOP不同, AOP是面向切面编程, 面对多个不具备继承关系的对象同时需要引入一段公共逻辑的时候, OOP就显得有点笨重了, 而AOP就游刃有余, 一个切面可以横跨多个类或者对象去执行公共逻辑, 极大的提升了开发效率…

Vue3集成搜索引擎智能提示API

需求&#xff1a; 如何在项目中实现像百度搜索框一样的智能提示效果&#xff0c;如下图所示&#xff1a; 相关知识&#xff1a; 下面是各厂商提供的免费API 厂商请求百度http://suggestion.baidu.com/su?wd中国&cbwindow.baidu.sug必应http://api.bing.com/qsonhs.as…

python3的基本数据类型:可变集合的用法

一. 简介 前面学习了 python3中的一种基本数据类型-集合&#xff0c;文章如下&#xff1a; python3的基本数据类型&#xff1a;集合的创建与分类-CSDN博客 本文继续学习 Python3中的集合&#xff0c;主要学习 可变集合的用法。 二. python3的基本类型&#xff1a;可变集合的…

从零开始:我的鸿蒙学习之旅(二)

前言 记录我在学习鸿蒙操作系统过程中的成长&#xff0c;旨在激励我自己&#xff0c;也希望能激发读者们的学习热情&#xff0c;一起愉快地探索鸿蒙开发的世界&#xff01; 我说说这几天的学习成果吧&#xff0c;将开发入门的第一部分的剩下小节以及第二部分的第一小结写完了…

SSM学习记录(一)之SSM整合

SSM学习记录&#xff08;一&#xff09;之SSM整合 一、SSM整合二、SSM整合的核心问题1、SSM需要几个IoC容器2、每个IoC容器对应哪些类型组件3、IoC容器之间的关系和调用方向4、具体有多少配置以及对应的容器的关系5、IoC初始化方式和配置位置 一、SSM整合 微观&#xff1a;将学…

【从理论到应用】HTTP请求响应详解 (请求数据格式,请求方式,Web开发中的体现)

目录 一.HTTP协议 二.HTTP请求数据格式 请求方式 三.Web开发中的HTTP请求与响应 接收HTTP请求 同一响应格式 四.使用第三方工具发送HTTP请求&#xff08;Apifox、postman、Yapi&#xff09; 一.HTTP协议 HTTP&#xff08;Hypertext Transfer Protocol&#xff0c;超…

猎板PCB罗杰斯板材的应用案例

以下是几个猎板 PCB 与罗杰斯板材结合的具体案例&#xff1a; 案例一&#xff1a;5G 通信基站天线 PCB 在 5G 通信基站的天线系统中&#xff0c;对高频信号的传输和处理要求极高。猎板 PCB 采用罗杰斯板材&#xff0c;凭借其稳定的低介电常数&#xff08;如 RO4003C 板材&…

基于Java Springboot快递物流管理系统

一、作品包含 源码数据库全套环境和工具资源部署教程 二、项目技术 前端技术&#xff1a;Html、Css、Js、Layui 数据库&#xff1a;MySQL 后端技术&#xff1a;Java、Spring Boot、MyBatis 三、运行环境 开发工具&#xff1a;IDEA 数据库&#xff1a;MySQL8.0 数据库管…

力扣662:二叉树的最大宽度

给你一棵二叉树的根节点 root &#xff0c;返回树的 最大宽度 。 树的 最大宽度 是所有层中最大的 宽度 。 每一层的 宽度 被定义为该层最左和最右的非空节点&#xff08;即&#xff0c;两个端点&#xff09;之间的长度。将这个二叉树视作与满二叉树结构相同&#xff0c;两端…

Servlet的使用

一.Servelt简介 1.为什么需要servlet:因为前端三件套无法操控数据库,即与用户进行交互操作 2.servlet由服务器端调用和执行的(由tomcat解析和调用的),由java语言编写,本质就是java类 3.功能强大,可以完成几乎所有的网站功能,按照Servlet规范开发 二.手动开发Servelt 1.Servl…

【嵌入式C语言】GCC概述+C语言编译过程

目录 前言1 课程介绍1.1 计算机程序语言的学习思路?1.2 基本程序设计思想:1.3 C语言工具的特性:1.4 推荐教材 2 GCC的使用及其常用选项介绍2.1 GCC概述gcc -vgcc -ogcc -v -o 2.2 C语言编译过程2.2.1 预处理2.2.2 编译2.2.3 汇编2.2.4 链接2.2.5 问题 2.3 宏的使用 前言 重新学…

C语言 数组排序 – 插入法排序 - C语言零基础入门教程

目录 一.简介二.数组插入法排序原理三.数组插入法排序实战四.猜你喜欢 零基础 C/C 学习路线推荐 : C/C 学习目录 >> C 语言基础入门 一.简介 经过前面的学习&#xff0c;我们已经学会了数组遍历&#xff0c;在开发中&#xff0c;我们经常回碰到对数组进行排序&#xff0c…

vulnhub- Machine_Matrix_v3靶机的测试报告

目录 一、测试环境 1、系统环境 2、使用工具/软件 二、测试目的 三、操作过程 1、信息搜集 2、Getshell 3、提权 四、结论 一、测试环境 1、系统环境 渗透机&#xff1a;kali2021.1(192.168.200.131) 靶 机&#xff1a;Linux matrix 4.16.3-porteus(192.168.200.1…

2024-11-13 Unity Addressables1——概述与导入

文章目录 1 概述1.1 介绍1.2 主要作用1.3 Addressables 与 AssetBundle 的区别 2 导入3 配置3.1 方法一3.2 方法二 1 概述 1.1 介绍 ​ Addressables 是可寻址资源管理系统。 ​ Unity 从 2018.2 版本开始&#xff0c;建议用于替代 AssetBundle 的高阶资源管理系统。在 Unit…

操作系统lab4-页面置换算法的模拟

操作系统lab4-页面置换算法的模拟 文章目录 操作系统lab4-页面置换算法的模拟实验目的实验内容实验分析 代码测试用例运行结果 实验目的 1、掌握请求分页存储管理的常用理论&#xff1a;页面置换算法。 2、理解请求分页中的按需调页机制。 实验内容 独立地用高级语言编写和…

springboot的依赖实现原理:spring-boot-starter-parent解析

01 dependencyManagement的作用 在使用springboot时我们会在项目pom引入以下配置和依赖 <parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.7.18</version> &l…