Prhub

#22602 ci: use local NVIDIA wheels to avoid re-downloading ~2GB every CI run

sgl-project/sglang · 作者 alisonshao · 合并时间 2026-04-12 12:32

分析状态 已生成
文件变更 1提交数 1 · 评论 4
代码增减 +17 / -3
run-ci dependencies

执行摘要

优化 CI 依赖下载,通过本地缓存避免每次运行重复下载 ~2GB NVIDIA wheel。

根据PR body描述,pypi.nvidia.com返回Cache-Control: no-store,导致每次CI运行都会重新下载所有NVIDIA torch依赖(约2GB,包括cublas 581MB、cufft 200MB、cusolver 338MB、cusparse 366MB等)。这尤其影响网络较慢的5090 runner,使约7分钟的下载时间占用了20分钟安装超时的大部分。目标是避免重复下载,提升CI效率。

该PR变更简单直接,适合快速浏览以了解CI优化策略。值得关注的设计决策是条件式环境变量设置,既实现了优化又保持了向后兼容性。对于使用uv的runner,可参考review评论考虑后续补充UV_FIND_LINKS支持。

讨论亮点

review中仅有一条评论来自gemini-code-assist[bot],指出PIP_FIND_LINKS只适用于使用标准pip的runner(如Blackwell/5090),而许多其他CI runner使用uv(通过PIP_CMD=uv pip设置),uv不识别PIP_FIND_LINKS,需要使用UV_FIND_LINKS。建议同时导出两个环境变量以确保所有runner受益。此评论未在PR中得到回复或采纳,PR已合并,表明可能被视为非阻塞问题或后续处理。

实现拆解

仅修改一个文件scripts/ci/cuda/cache_nvidia_wheels.sh:

  1. 更新脚本注释,说明从仅缓存cudnn和nvshmem扩展到缓存所有NVIDIA依赖。
  2. 新增变量NVIDIA_PIP_WHEELS指向本地缓存目录/root/.cache/nvidia-pip-wheels/。
  3. 在脚本末尾添加条件判断:如果该目录存在且包含.whl文件,则导出PIP_FIND_LINKS环境变量,使pip优先从本地目录查找wheel。
  4. 保持原有缓存和安装cudnn、nvshmem的逻辑不变。
文件 模块 状态 重要度
scripts/ci/cuda/cache_nvidia_wheels.sh CI/ 基础设施 modified 8.0

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

评论区精华

支持 uv 包管理器的环境变量 正确性

gemini-code-assist[bot] 指出 PIP_FIND_LINKS 只适用于 pip,而许多 runner 使用 uv,需要导出 UV_FIND_LINKS 以确保优化覆盖所有 runner。

结论:未在 PR 中采纳或回复,可能视为非关键问题。 · 未解决

风险与影响

风险较低:

  • 脚本通过条件判断[ -d "$NVIDIA_PIP_WHEELS" ] && ls ...确保目录存在且包含wheel文件时才设置环境变量,避免影响没有预缓存目录的runner(如H100/B200)。
  • 潜在风险是如果本地缓存目录中的wheel版本与pip要求的版本不匹配,可能导致安装失败或版本冲突,但脚本未包含版本检查逻辑。
  • 根据review评论,未支持UV_FIND_LINKS可能使使用uv的runner无法受益于此优化,但不会导致功能错误,只是效率未提升。

影响范围限于CI基础设施:

  • 对用户和系统功能无直接影响。
  • 对团队:可显著减少CI运行时间(特别是5090 runner节省约7分钟),降低网络带宽消耗,提升开发迭代效率。
  • 影响程度中等,属于优化类变更,不改变核心逻辑。
缺少 uv 支持 潜在版本冲突

关联 Issue

未识别关联 Issue

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

完整报告

执行摘要

该PR通过修改CI脚本cache_nvidia_wheels.sh,引入本地NVIDIA wheel缓存机制,避免每次CI运行重复下载约2GB依赖,显著提升5090等网络较慢runner的效率,节省约7分钟安装时间。变更风险低,但review中提到的uv包管理器支持问题未解决。

功能与动机

动机:pypi.nvidia.com的Cache-Control: no-store策略导致每次CI运行都重新下载所有NVIDIA torch依赖(如cublas、cufft等,总计约2GB),这不仅浪费带宽,还使网络较慢的5090 runner面临超时风险(下载占用约7分钟,总安装超时20分钟)。PR body明确指出目标是“避免重复下载”,优化CI性能。

实现拆解

仅修改一个文件scripts/ci/cuda/cache_nvidia_wheels.sh

  • 注释更新:从仅缓存cudnn和nvshmem扩展为缓存所有NVIDIA依赖,并说明预缓存目录位置(/opt/ci-cache/nvidia-pip-wheels/)。
  • 核心逻辑
    bash NVIDIA_PIP_WHEELS="/root/.cache/nvidia-pip-wheels" if [ -d "$NVIDIA_PIP_WHEELS" ] && ls "$NVIDIA_PIP_WHEELS"/*.whl &>/dev/null; then export PIP_FIND_LINKS="${PIP_FIND_LINKS:+$PIP_FIND_LINKS }$NVIDIA_PIP_WHEELS" fi
    条件判断确保目录存在且包含wheel文件时才设置PIP_FIND_LINKS,使pip优先从本地安装,不影响无缓存目录的runner。

  • 原有功能保留:继续缓存和安装cudnn、nvshmem wheel。

评论区精华

review中仅有一条来自gemini-code-assist[bot]的评论,指出潜在问题:

PIP_FIND_LINKS covers runners using standard pip... many other CI runners use uv... uv does not respect PIP_FIND_LINKS; it uses UV_FIND_LINKS instead.”

建议同时导出两个环境变量以确保所有runner受益。此评论未得到回复,PR已合并,可能被视为优化补充项而非阻塞问题。

风险与影响

风险

  • 本地缓存wheel版本可能与pip要求不匹配,但脚本无版本检查,依赖预缓存机制的正确性。
  • 未支持UV_FIND_LINKS,使用uv的runner无法享受优化,但不会导致功能错误。

影响

  • 正面:减少CI下载时间和网络负载,提升5090 runner稳定性。
  • 范围:仅影响CI基础设施,对用户功能和系统逻辑无影响。

关联脉络

从近期历史PR看,该PR属于一系列CI优化的一部分:

  • PR 22609调整B200测试时间防止超时。
  • PR 22608重命名GB200工作流文件。
  • PR 22228修复AMD CI超时配置。

这些PR共同反映了团队对CI效率和稳定性的持续改进,特别是在多硬件平台(如Blackwell、AMD)和网络环境下的优化趋势。本PR通过本地缓存解决依赖下载瓶颈,是基础设施优化的重要一环。

参与讨论