我正在尝试在启用 GPU 的情况下在 Google Colab 上初始化张量。
device = torch.device('cuda' if torch.cuda.is_available() else 'cpu')
t = torch.tensor([1,2], device=device)
但是我遇到了这个奇怪的错误。
RuntimeError: CUDA error: device-side assert triggered
CUDA kernel errors might be asynchronously reported at some other API call,so the stacktrace below might be incorrect.
For debugging consider passing CUDA_LAUNCH_BLOCKING=1
即使将该环境变量设置为 1 似乎也没有显示任何进一步的细节。
有人遇到过这个问题吗
虽然我尝试了你的代码,并且没有给我错误,但我可以说,通常调试 CUDA 运行时错误:像你这样的设备端断言的最佳实践是将协作转向 CPU 并重新创建错误。它会给你一个更有用的回溯错误。
大多数时候,CUDA 运行时错误可能是导致某些索引不匹配的原因,就像您尝试在具有 15 个标签的数据集上训练具有 10 个输出节点的网络一样。这个 CUDA 错误的问题是,一旦您收到此错误一次,您使用 torch.tensors 执行的每个操作都会收到该错误。这会迫使您重新启动笔记本。
我建议您重新启动笔记本,通过转移到 CPU 来获得更准确的回溯,并检查其余代码,特别是如果您在某处的一组目标上训练模型。
正如其他受访者所指出的:在 CPU 上运行它会显示错误。我的目标标签为 {1,2},我将其更改为 {0,1}。这个程序为我解决了这个问题。
仔细检查 GPU 的数量。一般情况下,除非你有多个gpu,否则应该是gpu=0。
第一次:
使用 simpletransformers 库针对多类分类问题微调基于 Transformer 的模型时出现相同的错误。 simpletransformers 是一个写在 Transformers 库之上的库。
我将标签从字符串表示形式更改为数字,并且它起作用了。
第二次:
在使用
transformers
库训练另一个基于 Transformer 的模型进行文本分类时,再次面临相同的错误。
我在数据集中有 4 个标签,分别命名为 0、1、2 和 3。但在模型类的最后一层(线性层)中,我有两个神经元。 nn.Linear(*, 2)*
我必须用 nn.Linear(*, 4)
替换它,因为我总共有四个标签。
我在 Colab 上也遇到了同样的问题。 如果您的代码在设备(“cpu”)上正常运行,请尝试删除当前的 Colab 运行时并重新启动它。这对我有用。
也许,我的意思是在某些情况下
这是因为您在将 logit 发送到 BCE Loss 之前忘记添加 sigmoid 激活。
希望能帮到你:P
我也遇到了这个问题,找到了原因,因为词汇维度是8000,但是我模型中的embedding维度设置为5000
使用 Transformers Trainer 时遇到同样的问题。
就我而言,问题是由“模型输入和分词器长度大小不匹配”引起的。
这就是为我解决问题的方法:
model.resize_token_embeddings(len(tokenizer))
并且添加
pad
令牌时导致不匹配:
tokenizer.add_special_tokens({'pad_token': '<pad>'})
,位于supervised_finetuning_trainer.train()
步骤。