讲一下 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,这当然是不行的。
其实是一个很简单的事情,但是因为知识储备不足,忙活了很多不相干的事情,导致浪费了大量时间。