RuntimeError:CUDA 错误:触发了设备端断言 - BART 模型

Posted

技术标签:

【中文标题】RuntimeError:CUDA 错误:触发了设备端断言 - BART 模型【英文标题】:RuntimeError: CUDA error: device-side assert triggered - BART model 【发布时间】:2021-10-14 08:09:50 【问题描述】:

我正在尝试为文本生成任务运行 BART 语言模型。

当我用于另一个编码器-解码器模型 (T5) 时,我的代码运行良好,但使用 bart 时出现此错误:

File "train_bart.py", line 89, in train
    outputs = model(input_ids = ids, attention_mask = mask, decoder_input_ids=y_ids, labels=lm_labels)                                                     cs-lab-host1" 12:39 10-Aug-21
  File ".../venv/tf_23/lib/python3.6/site-packages/torch/nn/modules/module.py", line 1051, in _call_impl
    return forward_call(*input, **kwargs)
  File ".../venv/tf_23/lib/python3.6/site-packages/transformers/models/bart/modeling_bart.py", line 1308, in forward
    return_dict=return_dict,
  File ".../venv/tf_23/lib/python3.6/site-packages/torch/nn/modules/module.py", line 1051, in _call_impl
    return forward_call(*input, **kwargs)
  File ".../venv/tf_23/lib/python3.6/site-packages/transformers/models/bart/modeling_bart.py", line 1196, in forward
    return_dict=return_dict,
  File ".../venv/tf_23/lib/python3.6/site-packages/torch/nn/modules/module.py", line 1051, in _call_impl
    return forward_call(*input, **kwargs)
  File ".../venv/tf_23/lib/python3.6/site-packages/transformers/models/bart/modeling_bart.py", line 985, in forward
    attention_mask, input_shape, inputs_embeds, past_key_values_length
  File ".../venv/tf_23/lib/python3.6/site-packages/transformers/models/bart/modeling_bart.py", line 866, in _prepare_decoder_attent
ion_mask
    ).to(self.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.

这就是发生错误的地方:

for _, data in tqdm(enumerate(loader, 0), total=len(loader), desc='Processing batches..'):
    y = data['target_ids'].to(device, dtype = torch.long)
    y_ids = y[:, :-1].contiguous()
    lm_labels = y[:, 1:].clone().detach()
    lm_labels[y[:, 1:] == tokenizer.pad_token_id] = -100
    ids = data['source_ids'].to(device, dtype = torch.long)
    mask = data['source_mask'].to(device, dtype = torch.long)

    outputs = model(input_ids = ids, attention_mask = mask, decoder_input_ids=y_ids, labels=lm_labels)
    loss = outputs[0]

loader 是标记化和处理后的数据。

【问题讨论】:

【参考方案1】:

我建议您将批量大小更改为 1 并暂时在 CPU 中运行代码以获得更具描述性的回溯错误。

这会告诉你错误在哪里。

萨塔克

【讨论】:

感谢@SarthakJain,这帮助我调试了错误。【参考方案2】:

打了好几个小时后,我发现错误是由于在 Bart 分词器中添加了新的分词造成的。因此我需要调整模型输入嵌入矩阵的大小:

model.resize_token_embeddings(len(tokenizer))

我仍然不清楚的一点是,在不调整嵌入矩阵大小的情况下,我能够毫无问题地微调 T5 模型,但不是 Bart。

也许这是因为 Bart 在输入层和输出层之间共享权重(我也不确定)。

【讨论】:

以上是关于RuntimeError:CUDA 错误:触发了设备端断言 - BART 模型的主要内容,如果未能解决你的问题,请参考以下文章

带有 CUDA 和 Nvidia 卡的 PyTorch:RuntimeError:CUDA 错误:所有支持 CUDA 的设备都忙或不可用,但 torch.cuda.is_available() 为 T

如何解决这个奇怪的错误:“RuntimeError: CUDA error: out of memory”

RuntimeError:尝试在 CUDA 设备上反序列化对象,但 torch.cuda.is_available() 为 False,Dataloader 错误,并且设置 pin_memory=Fa

使用VGG网络训练发生错误RuntimeError: CUDA out of memory解决方案:

使用VGG网络训练发生错误RuntimeError: CUDA out of memory解决方案:

RuntimeError:CUDA 错误:仅使用 GPU 调用 `cublasSgemm(handle)` 时出现 CUBLAS_STATUS_EXECUTION_FAILED