自定义训练Tokenizer加载过慢:如何调试及解决该问题?
自定义Tokenizer加载缓慢的调试与优化方案
调试步骤
- 排查网络影响:
from_pretrained默认从远程仓库拉取文件,先手动下载tokenizer的核心文件(vocab.json、merges.txt、tokenizer_config.json等)到本地目录,改用本地路径加载:
若加载速度恢复正常,说明问题出在网络层面。from transformers import AutoTokenizer test_tokenizer = AutoTokenizer.from_pretrained('./local-tokenizer-folder') - 检查文件规模:查看tokenizer相关文件的大小,若词汇表(vocab.json)或合并规则(merges.txt)过大(比如百万级条目),加载解析自然耗时,需评估是否存在冗余内容。
- 启用调试日志定位瓶颈:通过日志查看加载过程中哪一步卡顿,代码如下:
日志会输出下载、文件解析、初始化等各阶段的耗时,精准定位问题点。import logging logging.basicConfig(level=logging.DEBUG) from transformers import AutoTokenizer test_tokenizer = AutoTokenizer.from_pretrained('raptorkwok/cantonese-tokenizer-test')
优化方案
- 确保生成并使用Fast版本Tokenizer:确认你的tokenizer仓库中存在
tokenizer.json文件,这是PreTrainedTokenizerFast的核心文件。如果没有,重新训练时生成:
拥有# 训练后保存时指定生成fast格式 tokenizer.save_pretrained("save_dir", legacy_format=False)tokenizer.json后,PreTrainedTokenizerFast的加载速度会远快于普通版本。 - 复用本地缓存:Hugging Face会自动缓存已下载的模型/Tokenizer文件,默认路径为
~/.cache/huggingface/hub。检查该路径下是否存在对应tokenizer的缓存目录,避免重复下载;若缓存损坏,删除对应目录后重新拉取。 - 精简tokenizer文件:清理仓库中不必要的附加文件(如冗余配置、大体积注释文件),减少加载时的文件读取量。
- 完全离线加载:将所有tokenizer相关文件下载到本地,始终通过本地路径加载,彻底规避网络波动的影响。
内容的提问来源于stack exchange,提问作者Raptor
相关产品推荐
相关产品推荐

