如何缩短Hugging Face AutoTokenizer的加载耗时?
AutoTokenizer加载缓慢的原因及优化方案
原因分析
- 远程资源拉取延迟:首次调用
AutoTokenizer.from_pretrained('bert-base-uncased')时,会默认从Hugging Face Hub远程下载tokenizer的配置文件、词汇表等资源,网络带宽和服务器响应速度直接决定了加载耗时,这是你遇到8秒延迟的核心原因。 - 自动类型推断的额外开销:AutoTokenizer需要先根据模型名称远程查询并推断对应的具体tokenizer类型(比如BertTokenizer),这个过程包含配置校验、资源匹配等步骤,比直接实例化特定的BertTokenizer多了一层逻辑,会增加少量耗时。
优化方案
1. 本地路径加载(推荐)
AutoTokenizer完全支持从本地路径加载资源,操作步骤如下:
- 先执行一次下载并保存到本地(仅需运行一次):
from transformers import AutoTokenizer tokenizer = AutoTokenizer.from_pretrained('bert-base-uncased') tokenizer.save_pretrained('./local_bert_tokenizer')
- 后续直接从本地路径加载,速度与BertTokenizer本地加载一致,同时保留
word_id()功能:
from transformers import AutoTokenizer import time start = time() tokenizer = AutoTokenizer.from_pretrained('./local_bert_tokenizer') end = time() - start print(f"Loading Time : {round(end, 2)}s") # 预期耗时约50ms
2. 利用本地缓存
首次加载后,Hugging Face会自动将资源缓存到本地默认路径(~/.cache/huggingface/hub),后续再次调用AutoTokenizer.from_pretrained('bert-base-uncased')会直接读取缓存,无需远程下载,耗时会大幅降低至本地加载水平。
3. 强制本地加载(跳过远程校验)
如果确认本地缓存资源完整,可添加local_files_only=True参数,强制从缓存加载,跳过远程资源校验步骤,进一步缩短耗时:
from transformers import AutoTokenizer import time start = time() tokenizer = AutoTokenizer.from_pretrained('bert-base-uncased', local_files_only=True) end = time() - start print(f"Loading Time : {round(end, 2)}s")
内容的提问来源于stack exchange,提问作者황보동준
相关产品推荐
相关产品推荐

