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

讲一下 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,这当然是不行的。

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

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值