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

目录

项目场景

问题描述

原因分析

解决方案


项目场景

在自己手搓transformer架构时遇到了如题的问题;

问题描述

具体报错如下图


原因分析

由于GPU上运行,报错只能提示 CUDA error: device-side assert triggered,而且按照提示设置 CUDA_LAUNCH_BLOCKING=1 也并未返回特定的报错细节,所以我们先在CPU上进行调试,调试正常后再返回GPU上运行!!

去掉 .to(device) 后立刻产生了明确的报错:

于是返回查看,博主报错在embedding 层,这通常是因为输入的索引超出了嵌入(embedding)层权重的范围。我们输出所有的层大小,检查维度问题:

print("Source input indices:", src)
print("Target input indices:", tgt)
print("Max index in source input:", src.max())
print("Max index in target input:", tgt.max())

 

print(f"Embedding weight shape: {model.encoder_embed.weight.shape}")  # 对于 source embedding
print(f"Embedding weight shape: {model.decoder_embed.weight.shape}")  # 对于 target embedding

 这一来问题就很明显了:

源输入和目标输入中的最大索引分别为 4579748411,这显然都超出了嵌入层定义的索引范围32000!!


解决方案

修改维度的设置即可

总结下来,核心就是先让程序在CPU上运行,找到问题并调好后,再放回GPU上运行即可,祝大家调试顺利! 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值