首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >RuntimeError: CUDA错误:设备端断言触发- BART模型

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

Stack Overflow用户
提问于 2021-08-10 19:01:33
回答 2查看 1.4K关注 0票数 1

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

当我使用另一个编码器-解码器模型(T5)时,我的代码工作得很好,但在使用bart时,我得到了这个错误:

代码语言:javascript
运行
复制
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.

这就是错误发生的地方:

代码语言:javascript
运行
复制
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是经过标记化和处理的数据。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2021-08-11 15:29:21

经过几个小时的努力,我发现这个错误是由于向Bart记号赋予器添加新的记号造成的。因此,我需要调整模型输入嵌入矩阵的大小:

代码语言:javascript
运行
复制
model.resize_token_embeddings(len(tokenizer))

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

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

票数 0
EN

Stack Overflow用户

发布于 2021-08-10 19:35:51

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

这将告诉您错误在哪里。

萨塔克

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68732271

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档