Prhub

#21778 Cache nvidia wheels locally to skip repeated 830 MB downloads in CI

原始 PR 作者 hnyls2002 合并时间 2026-04-01 07:06 文件变更 2 提交数 14 评论 1 代码增减 +36 / -6

执行摘要

通过本地缓存 Nvidia wheels,避免 CI 中每次运行重复下载 830 MB 文件,显著缩短安装时间。

PR body 指出:'pypi.nvidia.com returns Cache-Control: no-store, causing pip to re-download cudnn (~707 MB) and nvshmem (~125 MB) on every CI run.' 这导致 CI 运行效率低下,浪费时间和带宽,目标是通过本地缓存避免重复下载。

对于 CI 维护者和工程师,此 PR 值得关注,展示了如何通过本地缓存和完整性验证优化大型依赖下载。建议学习其设计模式,并考虑推广到其他类似 CI 场景以提升效率。

讨论亮点

review 评论为空,但 commit 历史显示作者迭代了多个方案:初始使用 pip 约束,后改为本地缓存,最终采用 curl 下载和完整性检查。这表明了在 CI 环境中解决缓存问题的设计演进,例如从 'pip download' 回退到 'curl' 以绕过 no-store 限制。

实现拆解

实现分为两部分:

1) 新增脚本 'scripts/ci/cuda/cache_nvidia_wheels.sh',使用 curl 将 Nvidia wheels 下载到持久化目录 '/root/.cache/nvidia-wheels/',通过 'unzip -t' 验证文件完整性,并预安装以确保 pip 识别为已满足依赖;
2) 修改 'scripts/ci/cuda/ci_install_dependency.sh',提取 Nvidia 包版本为变量(NVIDIA_CUDNN_VERSION 和 NVIDIA_NVSHMEM_VERSION)以避免硬编码,并在安装主包前 source 缓存脚本。

文件 模块 状态 重要度
scripts/ci/cuda/cache_nvidia_wheels.sh CI/CD 基础设施 added 7.0
scripts/ci/cuda/ci_install_dependency.sh CI/CD 基础设施 modified 6.0

分析完成后,这里会展示 LLM 生成的相对完整源码片段和详细注释。

评论区精华

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

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

风险与影响

风险包括:

1) 本地缓存文件可能损坏或过期,但脚本使用 'unzip -t' 进行完整性验证以缓解;
2) wheels 的 URL 硬编码了特定版本(如 9.10.2.21),若 Nvidia 更新版本,脚本需手动更新,可能影响兼容性;
3) 缓存目录 '/root/.cache/nvidia-wheels/' 依赖特定路径,在不同 CI 环境中可能存在权限或可用性问题,但已添加 'mkdir -p' 确保目录创建。

正面影响:CI 运行时间显著减少,安装主包时间从 175 秒降至 90 秒,总安装时间从约 4.5 分钟缩短到 1.5 分钟,提升了 CI 效率和开发速度。对用户和开发者透明,无需额外配置。潜在影响:若缓存机制失败,可能回退到下载,但脚本设计了验证步骤来最小化风险。

依赖版本硬编码 缓存完整性风险

关联 Issue

未识别关联 Issue

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

完整报告

参与讨论