Prhub

#52431 [Bugfix] Fix modelscope usage

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

执行摘要

修复 ModelScope KeyError 并支持 VLLM_USE_MODELSCOPE=1

PR body 明确指出:调用 modelscope_list_repo_files 时,新版 ModelScope 不再返回 Type 字段,导致 KeyError(作者在通过 ModelScope 加载 meta-models/Muse-Glimmer-30B 时遇到);同时 VLLM_USE_MODELSCOPE=1 未被识别,与其他布尔环境变量的用法不一致,因此需要修复。

值得快速浏览,特别是使用 ModelScope 的团队;设计上强调与 Hugging Face Hub 行为对齐和布尔环境变量的一致性。代码简单,无深层架构影响。可后续补充一个针对 modelscope_list_repo_files 的 mock 单元测试,防止第三方 API 变更再次破坏。

讨论亮点

三位维护者(noooop、Isotr0py、jeejeelee)批准了该 PR,无实质性 review 讨论。claude[bot] 自动评论指出 fork PR 禁用自动 review,可手动触发。Issue 评论仅为 CI 触发与确认,无技术交锋。

实现拆解

  1. 修改 vllm/transformers_utils/utils.py 中 modelscope_list_repo_files:移除 file["Type"] == "blob" 过滤条件,直接返回所有 file["Path"]。原因是新版 ModelScope 的 get_model_files 返回对象不再包含 Type 键,原有过滤会触发 KeyError;recursive=True 时返回的项目均为文件,过滤本身已无必要。
  2. 修改 vllm/envs.py 中 VLLM_USE_MODELSCOPE 解析逻辑:从 .lower() == "true" 改为 .strip().lower() in ("1", "true"),同时删除注释中 not numbers 的说明,接受 1 作为开启值,与 VLLM_USE_FASTOKENS 等布尔型环境变量风格对齐。
  3. 无测试或文档配套修改;PR body 的 Test Plan 为空,已触发 Buildkite CI(#84016)。
文件 模块 状态 重要度
vllm/transformers_utils/utils.py 模型工具 modified 5.1
vllm/envs.py 环境配置 modified 4.42

关键符号

modelscope_list_repo_files

关键源码片段

vllm/transformers_utils/utils.py core-logic

核心修复:modelscope_list_repo_files 移除对 file["Type"] 的依赖,消除新版 ModelScope API 导致的 KeyError,同时简化返回逻辑。

def modelscope_list_repo_files(
    repo_id: str,
    revision: str | None = None,
    token: str | bool | None = None,
) -> list[str]:
    """List files in a modelscope repo."""
    from modelscope.hub.api import HubApi
​
    api = HubApi()
    api.login(token)
​
    # 与 huggingface_hub.list_repo_files 对齐:
    # 新版本 ModelScope 返回的文件对象不再包含 "Type" 键,
    # 若继续按 file["Type"] == "blob" 过滤会触发 KeyError,
    # 因此这里直接收集所有文件的 "Path" 字段。
    return [
        file["Path"]
        for file in api.get_model_files(
            model_id=repo_id, revision=revision, recursive=True
        )
    ]

评论区精华

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

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

风险与影响

  • 移除 Type == "blob" 过滤后,若未来 ModelScope API 在 recursive=True 时返回非文件对象(如目录标记),可能将非文件路径混入结果,导致后续下载或加载失败。当前假设 API 只返回文件。
  • VLLM_USE_MODELSCOPE 解析改为接受 "1",与常见布尔环境变量一致;但 "2" 等不被接受,行为符合预期。
  • 缺少针对 modelscope_list_repo_files 的单元测试,未来第三方 API 改动可能再次引入回归。
  • 用户影响:修复依赖 ModelScope 下载模型的用户(尤其中国大陆用户)在加载模型时的 KeyError,并允许 VLLM_USE_MODELSCOPE=1 这一常见写法。
  • 系统影响:仅涉及模型仓库枚举与启动配置解析,不改变核心推理路径;但 env 行为的变化对所有使用 VLLM_USE_MODELSCOPE 的部署配置生效。
  • 团队影响:改动小、无 API 变更,风险低。
第三方 API 兼容性依赖 缺少测试覆盖

关联 Issue

未识别关联 Issue

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

完整报告

参与讨论