ImportError: pass # Fall back to slow if fast not available

用户在 Transformers v5 (v5.8.0, v5.0.0 ~ v5.7.0) 中使用 AutoTokenizer.from_pretrained() 加载以下模型家族时触发: - OLMo2 (GPT2Tokenizer) - HyperClovaX (GPT2Tokenizer) -

ImportError: pass # Fall back to slow if fast not available

ImportError: pass # Fall back to slow if fast not available

快速结论:该报错出现在 HuggingFace Transformers v5 的 AutoTokenizer.from_pretrained() 中,加载某些模型(如 OLMo2、HyperClovaX、DeepSeek-R1-Distill-Llama 等)时错误地使用了慢速 tokenizer,导致 token ID 与模型训练时使用的 fast tokenizer 不匹配。优先检查 tokenizer_config.json 中的 tokenizer_class 字段,并确保代码中未强制指定 use_fast=False

问题场景

用户在 Transformers v5 (v5.8.0, v5.0.0 ~ v5.7.0) 中使用 AutoTokenizer.from_pretrained() 加载以下模型家族时触发:
– OLMo2 (GPT2Tokenizer)
– HyperClovaX (GPT2Tokenizer)
– Granite / GraniteMoEHybrid (GPT2Tokenizer)
– DeepSeek-R1-Distill-Llama (LlamaTokenizer)
– Yi (LlamaTokenizer)
– ERNIE (LlamaTokenizer)
共发现约 62 个受影响模型,合计下载量超过 3M。

报错原文

# 典型复现代码输出(非崩溃,但 token ID 错误)
# AutoTokenizer 产生的错误 token ID:
[508, 1419]  # tok_v5.encode("2023", add_special_tokens=False)
# 正确 token ID(使用 PreTrainedTokenizerFast):
[2366, 18]   # tok_correct.encode("2023", add_special_tokens=False)

# 底层对应文件位置:src/transformers/models/auto/tokenization_auto.py
# 关键代码行(注释原文):
pass  # Fall back to slow if fast not available

原因分析

根本原因:这是 Transformers v5 的回归问题(与 #45812 Granite 模型同根同源)。
AutoTokenizer.from_pretrained()tokenization_auto.py 中的分支逻辑:

  1. 从模型的 tokenizer_config.json 读取 tokenizer_class 字段(例如 "GPT2Tokenizer"
  2. 直接实例化该(慢速)tokenizer 类,不检查是否存在 fast 变体
  3. 慢速 tokenizer 的预分词算法与训练时使用的 fast tokenizer 不同,导致 token ID 完全错误

影响范围:仅 GPT2TokenizerLlamaTokenizer 类被发现受影响,但所有具有自定义 __init__ 的 tokenizer 类理论上都可能受影响。

环境排查

  • Transformers 版本:确认版本 ≥5.0.0(v5.8.0 仍未修复)
  • Python 版本:3.12.13(已验证)
  • Tokenizers 版本:0.22.2
  • Huggingface_hub 版本:1.14.0
  • 受影响模型示例allenai/OLMo-2-0425-1Bdeepseek-ai/DeepSeek-R1-Distill-Llama-8Bnaver-hyperclovax/HyperCLOVAX-SEED-Think-14Bibm-granite/granite-4.1-8b01-ai/Yi-34B-Chatbaidu/ERNIE-4.5-21B-A3B-Thinking

解决步骤

  1. 临时方案(可优先尝试):改用 PreTrainedTokenizerFast.from_pretrained(model_id) 替代 AutoTokenizer.from_pretrained(model_id),确保加载 fast tokenizer。
  2. 检查手动修复:通过 AutoTokenizer.from_pretrained(model_id, use_fast=True) 显式请求 fast tokenizer(尽管 Issue 指出 v5 的 use_fast 参数可能被忽略)。
  3. 等待官方修复(Issue 中提出的修复方案:在 tokenization_auto.py 中添加 SLOW_TO_FAST_TOKENIZER_MAP 映射,或在 from_pretrained 中优先检查 fast 变体)。
  4. 验证受影响范围:如果使用 GPT2TokenizerLlamaTokenizer 类的模型,建议先用 PreTrainedTokenizerFast 验证 token ID 是否正确。

验证方法

运行以下回归测试脚本,确认 AutoTokenizer 是否加载了 fast tokenizer 且 token ID 一致:

import pytest
from transformers import AutoTokenizer, PreTrainedTokenizerFast

test_cases = [
    ("allenai/OLMo-2-0425-1B", "GPT2Tokenizer"),
    ("deepseek-ai/DeepSeek-R1-Distill-Llama-8B", "LlamaTokenizer"),
    ("naver-hyperclovax/HyperCLOVAX-SEED-Think-14B", "GPT2Tokenizer"),
]
for model_id, expected_class in test_cases:
    tok = AutoTokenizer.from_pretrained(model_id)
    assert "Fast" in type(tok).__name__, (
        f"Loaded slow tokenizer: {type(tok).__name__}"
    )
    tok_fast = PreTrainedTokenizerFast.from_pretrained(model_id)
    assert tok.encode("2023", add_special_tokens=False) == tok_fast.encode("2023", add_special_tokens=False), (
        f"Token ID mismatch for {model_id}"
    )
print("All tests passed: AutoTokenizer correctly uses fast tokenizer.")

参考来源

huggingface/transformers #45920

GamsGo AI

AI 工具推荐

想把多个 AI 模型放在一个入口?

GamsGo AI 集成 ChatGPT、DeepSeek、Gemini、Claude、Midjourney、Veo 等常用模型,适合写作、绘图、视频和日常 AI 工作流。

了解 GamsGo AI

推广链接:通过此链接购买,我可能获得佣金,不影响你的价格。

celebrityanime
celebrityanime
文章: 8815

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注