执行摘要
该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通过本地缓存解决依赖下载瓶颈,是基础设施优化的重要一环。
参与讨论