Prhub

#35024 [Deprecation] Remove old locations of `get_tokenizer` and `resolve_hf_chat_template`

原始 PR 作者 DarkLight1337 合并时间 2026-05-15 15:13 文件变更 17 提交数 3 评论 5 代码增减 +15 / -64

执行摘要

移除旧版 get_tokenizer 和 resolve_hf_chat_template 导入路径

PR 的动机是 lm-eval 库已更新(PR #33994,版本 0.4.12),支持新的导入路径,因此可以安全移除 vllm 中提供的废弃向后兼容代码。

此 PR 是清理老旧废弃代码的良好实践,展示了如何协调外部依赖更新以安全移除兼容层。建议维护者确保所有内部代码已不再使用旧导入路径。对于读者,值得关注其与 lm-eval 社区的协作流程。

讨论亮点
  • 作者发现 lm-eval 尚未更新新导入路径,主动在 lm-eval 仓库提交 PR(EleutherAI/lm-evaluation-harness#3595)。
  • 随后 lm-eval 发布 v0.4.12,作者确认后请求合并本 PR。
  • Reviewers(Isotr0py、tjtanaa)均批准,无异议。

实现拆解

  1. 删除旧导入路径文件:移除 vllm/transformers_utils/tokenizer.py 整个文件,该文件仅包含一个 __getattr__ 函数,用于将 get_tokenizer 重新路由到 vllm.tokenizers.get_tokenizer
  2. 清理 entrypoints 模块:在 vllm/entrypoints/chat_utils.py 中删除 __getattr__ 函数,该函数为 resolve_hf_chat_template 提供后向兼容。同时移除了不再需要的 warnings 导入。
  3. 更新依赖版本:在 requirements/test/cuda.inrequirements/test/rocm.in 中将 lm-eval 最低版本从 0.4.11 提升到 0.4.12,确保测试环境使用已更新的 lm-eval。
  4. 同步 CI 脚本:在 .buildkite/lm-eval-harness/ 下的多个 shell 脚本以及 TPU CI 脚本中,将 lm-eval 版本要求同步更新为 >=0.4.12
  5. 调整锁定文件requirements/test/cuda.txtrequirements/test/rocm.txt 随之更新,反映依赖版本变化及部分间接依赖的调整。
文件 模块 状态 重要度
vllm/transformers_utils/tokenizer.py 分词器 removed 7.16
vllm/entrypoints/chat_utils.py 入口点 modified 6.74
requirements/test/cuda.in 测试依赖 modified 3.42
requirements/test/rocm.in 测试依赖 modified 3.42
.buildkite/scripts/hardware_ci/run-tpu-v1-test.sh CI 脚本 modified 2.64

关键符号

__getattr__

关键源码片段

vllm/transformers_utils/tokenizer.py deletion

被整体删除的核心文件,之前提供 get_tokenizer 的后向兼容导入。

# SPDX-License-Identifier: Apache-2.0
# SPDX-FileCopyrightText: Copyright contributors to the vLLM project
import warnings# 此 __getattr__ 函数已被移除,不再提供 vllm.transformers_utils.tokenizer.get_tokenizer
# 的向后兼容导入。改为直接使用 vllm.tokenizers.get_tokenizer。
def __getattr__(name: str):
    # Keep until lm-eval is updated
    if name == "get_tokenizer":
        from vllm.tokenizers import get_tokenizer
​
        warnings.warn(
            "`vllm.transformers_utils.tokenizer.get_tokenizer` "
            "has been moved to `vllm.tokenizers.get_tokenizer`. "
            "The old name will be removed in a future version.",
            DeprecationWarning,
            stacklevel=2,
        )
​
        return get_tokenizer
​
    raise AttributeError(f"module {__name__!r} has no attribute {name!r}")
vllm/entrypoints/chat_utils.py dependency-wiring

删除了 __getattr__ 函数及相关的 warnings 导入,清除 resolve_hf_chat_template 的旧入口。

# 以下 __getattr__ 函数已从 vllm/entrypoints/chat_utils.py 中移除。
# 用户应改用 vllm.renderers.hf.resolve_chat_template。
# 同时移除了 import warnings。def __getattr__(name: str):
    if name == "resolve_hf_chat_template":
        from vllm.renderers.hf import resolve_chat_template
​
        warnings.warn(
            "`vllm.entrypoints.chat_utils.resolve_hf_chat_template` has been moved to "
            "`vllm.renderers.hf.resolve_chat_template`. "
            "The old name will be removed in v0.16.",
            DeprecationWarning,
            stacklevel=2,
        )
​
        return resolve_chat_template
​
    raise AttributeError(f"module {__name__!r} has no attribute {name!r}")

评论区精华

lm-eval 更新进度协调 other

作者发现 lm-eval 尚未支持新导入路径,主动在 lm-eval 仓库提交了 PR(EleutherAI/lm-evaluation-harness#3595)。随后 lm-eval 发布 v0.4.12,作者确认后请求合并本 PR。

结论:lm-eval v0.4.12 已发布并支持新路径,本 PR 可安全合并。 · 已解决

风险与影响

低风险:旧导入路径已废弃一段时间并带有 DeprecationWarning,外部使用者应已迁移。lm-eval 依赖从 0.4.11 升到 0.4.12 为最小 patch 升级,兼容性风险极低。但需注意任何未升级的 lm-eval 版本(<0.4.12)将无法通过测试;如外部代码直接引用旧路径,更新后会出现 ImportError。

影响面窄:主要影响 vllm 内部维护,减少废弃兼容代码。对用户而言,若仍使用 vllm.transformers_utils.tokenizer.get_tokenizervllm.entrypoints.chat_utils.resolve_hf_chat_template,将需要改用新路径 vllm.tokenizers.get_tokenizervllm.renderers.hf.resolve_chat_template。依赖 lm-eval 的测试或用户需确保版本 ≥0.4.12。

废弃兼容层移除可能影响旧用法 lm-eval 版本锁定需同步

关联 Issue

未识别关联 Issue

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

完整报告

参与讨论