本地加载Colab微调的HuggingFace模型时Tokenizer加载失败求助
trainer.save_model()只会保存模型权重、配置文件和训练参数,完全不会处理tokenizer的相关文件。你从Colab下载的三个文件里没有任何tokenizer需要的配置或词汇表文件,自然加载失败——错误提示里列的那些tokenizer_config.json、special_tokens_map.json、sentencepiece.bpe.model之类的文件,你的本地目录里全缺。
方法一:重新在Colab里完整保存(推荐)
在Colab中,保存模型后必须额外保存tokenizer,把这行代码加上:
# 保存模型之后,添加这行保存tokenizer tokenizer.save_pretrained('./results/best_model')
这样./results/best_model目录下就会同时有模型和tokenizer的所有必要文件,之后把整个目录的所有文件下载到本地models/yu,再加载就没问题了。
方法二:补救现有本地文件(仅适用于未修改tokenizer的情况)
如果不想重新跑微调流程,你可以找到你微调时用的原始预训练模型(比如你用的XLMRoberta的base版本),把它的tokenizer相关文件(tokenizer_config.json、special_tokens_map.json、sentencepiece.bpe.model、tokenizer.json)下载下来,复制到本地models/yu目录里。
注意:如果微调过程中你给tokenizer加了自定义token,这种方法会丢失这些自定义内容,必须用方法一。
正确的加载代码
确保文件齐全后,加载代码可以简化成这样:
from transformers import AutoTokenizer, AutoModelForSequenceClassification model_path = 'models/yu' tokenizer = AutoTokenizer.from_pretrained(model_path, local_files_only=True) model = AutoModelForSequenceClassification.from_pretrained(model_path, local_files_only=True)
HuggingFace Transformers的模型和tokenizer是分开保存的,trainer.save_model()和model.save_pretrained()只负责模型部分,tokenizer必须单独调用tokenizer.save_pretrained()才能完整保存,这是标准流程,别漏了。
内容的提问来源于stack exchange,提问作者sirCornflakes

