Prhub

#47551 [CI] Bump `huggingface-hub` from `v1.10.2` to `v1.22.0`

原始 PR 作者 hmellor 合并时间 2026-07-04 22:45 文件变更 25 提交数 8 评论 4 代码增减 +49 / -45

执行摘要

升级 huggingface-hub 至 v1.22.0,优化模型下载缓存

旧版 huggingface-hub 在重新下载已缓存的模型时需要对每个文件发起元数据请求,开销较大。新版本引入了基于磁盘缓存的文件列表,使得重新下载只需一次网络调用来解析分支/标签。同时,Hub 上的 gpt2 别名已被移除,继续使用会导致测试失败。此外,lm-evaluation-harness 的旧版 fork 与新 huggingface-hub 不兼容,需迁移至更新版。

建议快速合入此 PR,因为依赖升级带来明确的性能收益且经过了充分测试。开发人员应注意离线场景可能出现的 IncompleteSnapshotError,并确保缓存策略的完整性。测试维护者需确认所有 gpt2 引用已更新完毕。

讨论亮点

在 Issue 评论区中,AndreasKaratzas 观察到 LoRA 测试组运行超时并手动重启。hmellor 指出测试失败但不会终止 CI Runner,导致 GitHub 侧显示为持续运行。最终通过强制设置与上游测试相同的 max_num_seqs 值解决了该问题。

实现拆解

  1. 升级依赖版本:在 requirements 文件中将 huggingface-hub 版本从 v1.10.2 提升至 v1.22.0,启用新的缓存功能。
  2. 修复离线模型路径检查:在 vllm/transformers_utils/repo_utils.py 的 get_model_path 函数中,向 snapshot_download 的 common_kwargs 添加 ignore_patterns="*" 参数,并改用 dict() 构造以兼容新版本 API。
  3. 统一模型名称引用:将测试套件中所有对 "gpt2" 的引用替换为 "openai-community/gpt2",因为原始 gpt2 的简短名称在 Hub 上已不可用。
  4. 迁移 lm-evaluation-harness 依赖:将 evaluation 框架指向 vLLM 维护的兼容分支,确保与新 huggingface-hub 兼容。
  5. 修复 LoRA 测试 OOM:在 fully-sharded chatglm3 LoRA 测试中添加 max_num_seqs 限制,避免 FULL cudagraph capture 时因批处理过大导致显存溢出。
文件 模块 状态 重要度
vllm/transformers_utils/repo_utils.py 模型下载 modified 5.52
tests/tokenizers_/test_basic.py 测试 modified 4.19
tests/models/registry.py 测试 modified 4.05
tests/lora/test_chatglm3_tp.py 测试 modified 3.46
tests/benchmarks/test_txt_slices_dataset.py 测试 modified 3.99

关键符号

get_model_path

关键源码片段

vllm/transformers_utils/repo_utils.py core-logic

核心源码变更:修复离线模型路径检查,添加 ignore_patterns="*" 参数,适配新版本 huggingface-hub API。

def get_model_path(model: str | Path, revision: str | None = None):
    if os.path.exists(model):
        return model
    assert huggingface_hub.constants.HF_HUB_OFFLINE
    common_kwargs = dict(
        local_files_only=huggingface_hub.constants.HF_HUB_OFFLINE,
        ignore_patterns="*", # 新增:跳过文件匹配,避免离线时触发不必要下载
        revision=revision,
    )
​
    if envs.VLLM_USE_MODELSCOPE:
        from modelscope.hub.snapshot_download import snapshot_download
        return snapshot_download(model_id=model, **common_kwargs)
​
    return hf_api().snapshot_download(
        repo_id=model,
        **common_kwargs,
    )

评论区精华

LoRA test flakiness 测试

LoRA 测试组运行超时,AndreasKaratzas 手动重启。hmellor 指出测试失败但不会终止 CI Runner,导致 GitHub 显示为持续运行。

结论:通过设置与上游测试相同的 max_num_seqs 值解决 OOM,测试恢复正常。 · 已解决

风险与影响

1) 离线模式兼容性:新版 huggingface-hub 在无法访问 Hub 且本地缓存不完整时会抛出 IncompleteSnapshotError,而旧版会静默返回部分文件,可能影响已部署的离线服务。
2) 模型名称变更:虽然 gpt2 别名已被移除,但仍有其他测试和用户可能依赖旧名称,需要全面检查。
3) lm-evaluation-harness fork 迁移可能引入新的兼容性问题。
4) ignore_patterns="*" 参数在离线模式下会跳过所有文件匹配,如果后续需要选择性下载文件可能导致意外行为。

用户侧:模型下载和缓存重载性能提升,但离线场景需确保本地缓存完整。系统侧:无直接运行时影响,但所有涉及模型文件下载的路径均受此依赖升级影响。团队侧:后续添加新测试时应使用完整的模型标识符,避免简写。CI 中 LoRA 测试的稳定性得到改善。

离线模式兼容性风险 模型名称引用变更 依赖升级行为变化

关联 Issue

未识别关联 Issue

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

完整报告

参与讨论