Colab调用BERT fill_mask接口报RuntimeError设备不匹配错误如何解决
错误原因
你使用Colab的GPU环境训练时,Hugging Face的Trainer会自动将模型迁移到GPU显存中,但是后续初始化fill-mask pipeline时没有指定设备,pipeline默认会将输入文本转为CPU上的张量,就出现了模型和输入所在设备不一致的报错。
另外你的代码存在两处无意义的冗余,不影响运行但可以清理:
- 重复导入了
BertTokenizer、BertForMaskedLM - 中间初始化
BertModel打印配置的代码完全没用,后续你重新初始化了BertForMaskedLM,这段可以直接删除。
解决方案
有两种可选的修改方式,选任意一种即可:
方式一:指定pipeline使用GPU运行
初始化pipeline时增加device=0参数,直接用GPU做推理,速度更快,适配Colab的GPU环境:
fill_mask = pipeline( "fill-mask", model=model, tokenizer=bert_tokenizer, device=0 )
方式二:将模型迁回CPU后运行
如果你不需要用GPU做推理,手动将模型移回CPU即可:
# 先把模型移到CPU model = model.to("cpu") fill_mask = pipeline( "fill-mask", model=model, tokenizer=bert_tokenizer )
内容的提问来源于stack exchange,提问作者Naqi
相关产品推荐
相关产品推荐

