Prhub

#49907 [Tokenizer] Use HF config for HF tokenizers

原始 PR 作者 AndreasKaratzas 合并时间 2026-07-27 15:49 文件变更 1 提交数 1 评论 0 代码增减 +10 / -4

执行摘要

修复 HF tokenizer 在双格式仓库中错误选择 tokenizer 类

修复在双格式 Mistral 仓库中,自动检测优先选择 params.json,但将通用配置传递给 AutoTokenizer 会选错 tokenizer 类的问题。PR body 提到 'Keep native Mistral auto-detection while preventing dual-format repositories from selecting the wrong tokenizer class.'

建议精读,这是一个小而精的 bugfix,展示了如何通过调整控制流顺序解决双格式仓库的歧义问题。

讨论亮点

无 review 讨论。

实现拆解

  1. 提前解析 tokenizer 后端:将 tokenizer_cls_ 的解析从配置加载后移到配置加载前,这样在调用 get_config 时就能知道最终使用的 tokenizer 类。
  2. 根据后端决定配置格式:新增 config_format = "hf" if tokenizer_cls_ is CachedHfTokenizer else "auto",对 HF 后端强制使用 hf 格式(即 config.json),避免 Mistral 的 params.json 干扰;对其他后端保留 auto 格式,维持原有自动检测逻辑。
  3. 将 config_format 传入 get_config:在调用 get_config 时传入 config_format=config_format,使配置加载按指定格式进行。
  4. 简化控制流:移除了原来位于配置加载后的 elif tokenizer_cls == TokenizerLike 分支和 else 分支,因为它们已提前执行。
文件 模块 状态 重要度
vllm/tokenizers/registry.py 分词器 modified 6.02

关键符号

get_tokenizer

关键源码片段

vllm/tokenizers/registry.py core-logic

核心变更文件,修改了 get_tokenizer 函数中的 tokenizer 后端解析和配置加载顺序,新增 config_format 参数传递,修复双格式仓库的 tokenizer 类选择问题。

# vllm/tokenizers/registry.py (get_tokenizer 函数关键片段 )def get_tokenizer(...) -> _T:
    # ... 省略前置准备
​
    # 提前解析 tokenizer 后端,以便在加载配置时就知道最终使用的类
    if tokenizer_cls == TokenizerLike:
        tokenizer_cls_ = TokenizerRegistry.load_tokenizer_cls(tokenizer_mode)
    else:
        tokenizer_cls_ = tokenizer_cls
​
    # HF-backed tokenizers must receive the HF config.
    # In a dual-format Mistral repository, auto detection intentionally prefers params.json,
    # but passing that generic config to AutoTokenizer can select the wrong tokenizer class.
    config_format = "hf" if tokenizer_cls_ is CachedHfTokenizer else "auto"
    config = None
    with contextlib.suppress(ValueError, OSError):
        config = get_config(
            tokenizer_name,
            trust_remote_code=trust_remote_code,
            revision=revision,
            config_format=config_format, # 新增:强制 HF 后端使用 hf 格式
        )
    # ... 后续逻辑保持不变

评论区精华

没有提炼出高价值讨论线程

当前评论区没有形成足够清晰的争议点或结论,后续有更多讨论时会体现在这里。

风险与影响

低风险。变更仅影响 get_tokenizer 函数中配置加载的逻辑,且仅在 tokenizer 后端为 CachedHfTokenizer 时改变行为,其他情况行为不变。

影响所有使用 get_tokenizer 加载 tokenizer 的路径,特别是 Mistral 双格式仓库的用户。修复了潜在的 tokenizer 类选择错误,确保 HF tokenizer 始终使用正确的 HuggingFace 配置。

核心路径变更

关联 Issue

未识别关联 Issue

当前没有检测到明确关联的 Issue 链接,后续同步到相关引用后会出现在这里。

完整报告

参与讨论