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

2024-08-24 15:28

本文主要是介绍解决报错“RuntimeError: CUDA error: device-side assert triggered ”,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

这是一个比较通用的错误,通常发生在以下几种情况下:

  1. 索引超出范围:在某些情况下,操作涉及的张量索引超出了允许的范围。例如,使用 index_selectgather 时,索引可能超出张量的范围。
  2. 非法操作:例如对负数取对数、零除法,或对概率分布应用 log 函数时存在无效值(例如 0)。
  3. 数据类型或维度不匹配:操作的输入张量可能在维度或数据类型上不匹配,这会触发设备端的断言。
  4. 类别标签非法:如果使用了分类损失函数(例如 CrossEntropyLoss),类别标签可能超出了预定义类别的范围。

这里我的下面一段代码出现了报错:

return (torch.pow(((input_embed * output_embed).sum(1) + input_bias + output_bias).squeeze(1) - torch.log(co_num).to(device), 2) * weights).sum()

解决步骤:

1、将代码放在cpu上运行

这是因为gpu给出的报错信息很笼统,一般来说,cpu会给出更为详细的报错信息。

记录一下把数据和模型放到不同设备上的方法:

device = torch.device("cuda:1" if torch.cuda.is_available() else "cpu")
model = model.to(device)

这里就直接把cuda:1替换成cpu可以

进行到这一步,报错信息应该很明朗了,我这里是由于维度不匹配。

2、确保co_num没有0值

确保 co_num 没有任何 0 或负值,因为这会导致 log(co_num) 触发非法操作。

if torch.any(co_num <= 0):raise ValueError("co_num contains zero or negative values, which would cause log(co_num) to be undefined.")

3、检测各个张量的维度

直接print各个张量的维度,然后去查看,在矩阵乘法和加法中,哪些不匹配。

print("input_embed size:", input_embed.size())
print("output_embed size:", output_embed.size())
print("sum result size:", (input_embed * output_embed).sum(1).size())
print("input_bias size:", input_bias.size())
print("output_bias size:", output_bias.size())
print("log_co_num size:", torch.log(co_num).size())

基本上到这里就能解决这个报错,维度不匹配就要看函数传入的数据维度是从哪里来的,也许就是一个embedding_size导致维度不匹配。

这篇关于解决报错“RuntimeError: CUDA error: device-side assert triggered ”的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1102864

相关文章

IDEA和GIT关于文件中LF和CRLF问题及解决

《IDEA和GIT关于文件中LF和CRLF问题及解决》文章总结:因IDEA默认使用CRLF换行符导致Shell脚本在Linux运行报错,需在编辑器和Git中统一为LF,通过调整Git的core.aut... 目录问题描述问题思考解决过程总结问题描述项目软件安装shell脚本上git仓库管理,但拉取后,上l

解决docker目录内存不足扩容处理方案

《解决docker目录内存不足扩容处理方案》文章介绍了Docker存储目录迁移方法:因系统盘空间不足,需将Docker数据迁移到更大磁盘(如/home/docker),通过修改daemon.json配... 目录1、查看服务器所有磁盘的使用情况2、查看docker镜像和容器存储目录的空间大小3、停止dock

idea npm install很慢问题及解决(nodejs)

《ideanpminstall很慢问题及解决(nodejs)》npm安装速度慢可通过配置国内镜像源(如淘宝)、清理缓存及切换工具解决,建议设置全局镜像(npmconfigsetregistryht... 目录idea npm install很慢(nodejs)配置国内镜像源清理缓存总结idea npm in

idea突然报错Malformed \uxxxx encoding问题及解决

《idea突然报错Malformeduxxxxencoding问题及解决》Maven项目在切换Git分支时报错,提示project元素为描述符根元素,解决方法:删除Maven仓库中的resolv... 目www.chinasem.cn录问题解决方式总结问题idea 上的 maven China编程项目突然报错,是

在Ubuntu上打不开GitHub的完整解决方法

《在Ubuntu上打不开GitHub的完整解决方法》当你满心欢喜打开Ubuntu准备推送代码时,突然发现终端里的gitpush卡成狗,浏览器里的GitHub页面直接变成Whoathere!警告页面... 目录一、那些年我们遇到的"红色惊叹号"二、三大症状快速诊断症状1:浏览器直接无法访问症状2:终端操作异常

mybatis直接执行完整sql及踩坑解决

《mybatis直接执行完整sql及踩坑解决》MyBatis可通过select标签执行动态SQL,DQL用ListLinkedHashMap接收结果,DML用int处理,注意防御SQL注入,优先使用#... 目录myBATiFBNZQs直接执行完整sql及踩坑select语句采用count、insert、u

MyBatis Plus大数据量查询慢原因分析及解决

《MyBatisPlus大数据量查询慢原因分析及解决》大数据量查询慢常因全表扫描、分页不当、索引缺失、内存占用高及ORM开销,优化措施包括分页查询、流式读取、SQL优化、批处理、多数据源、结果集二次... 目录大数据量查询慢的常见原因优化方案高级方案配置调优监控与诊断总结大数据量查询慢的常见原因MyBAT

MyBatis/MyBatis-Plus同事务循环调用存储过程获取主键重复问题分析及解决

《MyBatis/MyBatis-Plus同事务循环调用存储过程获取主键重复问题分析及解决》MyBatis默认开启一级缓存,同一事务中循环调用查询方法时会重复使用缓存数据,导致获取的序列主键值均为1,... 目录问题原因解决办法如果是存储过程总结问题myBATis有如下代码获取序列作为主键IdMappe

linux查找java项目日志查找报错信息方式

《linux查找java项目日志查找报错信息方式》日志查找定位步骤:进入项目,用tail-f实时跟踪日志,tail-n1000查看末尾1000行,grep搜索关键词或时间,vim内精准查找并高亮定位,... 目录日志查找定位在当前文件里找到报错消息总结日志查找定位1.cd 进入项目2.正常日志 和错误日

Java中字符编码问题的解决方法详解

《Java中字符编码问题的解决方法详解》在日常Java开发中,字符编码问题是一个非常常见却又特别容易踩坑的地方,这篇文章就带你一步一步看清楚字符编码的来龙去脉,并结合可运行的代码,看看如何在Java项... 目录前言背景:为什么会出现编码问题常见场景分析控制台输出乱码文件读写乱码数据库存取乱码解决方案统一使