关于隐藏在CUDA error: device-side assert triggered之下的embedding层报错IndexError: index out of range in self

文章讲述了在将Roberta模型换成bert-tiny后遇到CUDAerror:device-sideasserttriggered的问题。问题根源在于Roberta和bert-tiny的词表大小写处理不同,导致预处理后的数据集与新模型不兼容。解决方案是禁用GPU,使用CPU运行并在内存中调试,找出索引错误,提示需要对预处理数据集进行调整以匹配bert-tiny的词表。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

讲一下 CUDA error: device-side assert triggered 报错的背景。

我正式的项目是用Roberta-base做句子分类,我后面因为想在自己笔记本上跑一个迷你版本,所以就把Roberta换成了bert-tiny。简单替换运行后就得到了

CUDA error: device-side assert triggered

这个报错的意思是程序运行时发生了意料之外的情况,但是因为这是在显存里发生的事情,具体是错误什么编译器就不知道了。

解决方法也很简单:把数据移到内存里,用cpu来运行。我们就可以看到到底是什么错误了。

# self.gpu = torch.cuda.is_available()
self.gpu = False

if config.gpu:
    data = self.cuda_data(*data)
当然你可能还要把一些随机数种子什么的移到内存。

再次运行得到报错:

 我们可以看到embedding的时候索引报错。

这时候原因就很明了了,这是因为Roberta用的词表是区分大小写的,而bert-tiny的词表是不区分大小写的。因为我是用Roberta的词表预处理数据集,而我又用bert-tiny来embedding这些token-id,这当然是不行的。

其实是一个很简单的事情,但是因为知识储备不足,忙活了很多不相干的事情,导致浪费了大量时间。

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值