执行摘要
- 一句话:修复 CI 中 nvidia-cusparselt-cu13 库文件缺失问题
- 推荐动作:建议合并。该 PR 针对 CI 中的偶发依赖故障提供了稳健的防御机制,且改动量小、逻辑清晰。适合快速集成以消除 CI 不稳定因素。后续可关注类似的 pip 部分安装失败场景,考虑更通用的检测方案。
功能与动机
CI runner 上 nvidia-cusparselt-cu13 升级至 0.9.1 时出现部分失败,导致 libcusparseLt.so.0 文件丢失,torch import 失败(错误日志见 PR body 中 action 链接)。因为 pip 元数据标记为已安装,后续所有 pip install 操作均跳过该包,问题持续存在。
实现拆解
- 定位脚本:在
scripts/ci/cuda/ci_install_dependency.sh 的 install_sglang 函数末尾增加检查逻辑。
- 检查缺失:使用
python3 获取 site-packages 路径,检查 nvidia/cusparselt/lib/libcusparseLt.so.0 是否存在。
- 条件重装:如果该文件不存在但
pip show nvidia-cusparselt-cu13 成功(元数据存在),则打印 WARNING 并执行 pip install --reinstall nvidia-cusparselt-cu13 强制重装 wheel。
- 执行顺序:该防御段放在
pip install -e "python[${EXTRAS}]" 之后,确保不干扰正常安装流程。
关键文件:
scripts/ci/cuda/ci_install_dependency.sh(模块 CI 脚本;类别 infra;类型 infrastructure;符号 install_sglang): 主要变更文件,在 install_sglang 函数末尾添加了防御性重装逻辑,用于检测和修复 nvidia-cusparselt-cu13 元数据存在但库文件缺失的问题。
关键符号:install_sglang
关键源码片段
scripts/ci/cuda/ci_install_dependency.sh
主要变更文件,在 install_sglang 函数末尾添加了防御性重装逻辑,用于检测和修复 nvidia-cusparselt-cu13 元数据存在但库文件缺失的问题。
# install_sglang 函数末尾增加防御性检查
# 某些 runner 上 nvidia-cusparselt-cu13 的 pip 元数据存在但 .so 文件丢失,
# 导致任何 torch import 失败。若文件缺失则强制重装 wheel。
SITE_PACKAGES=$(python3 -c "import site; print(site.getsitepackages()[0])")
if [ ! -f "$SITE_PACKAGES/nvidia/cusparselt/lib/libcusparseLt.so.0" ] \
&& pip show nvidia-cusparselt-cu13 >/dev/null 2>&1; then
echo "WARNING: nvidia-cusparselt-cu13 metadata present but libcusparseLt.so.0 missing — reinstalling"
$PIP_CMD install --reinstall nvidia-cusparselt-cu13 $PIP_INSTALL_SUFFIX
fi
评论区精华
gemini-code-assist[bot] 指出:将 setup_ld_library_path 提前至 install_sglang_kernel 之前确实修复了 torch import,但从原位置移除该调用可能导致后续函数(如 install_extra_deps、fix_nvidia_deps)安装的其他 NVIDIA 包的库路径未加入 LD_LIBRARY_PATH。建议保留两个调用以确保所有路径正确。但最终实现并未采纳该建议——作者在后续 commit 中移除了与 setup_ld_library_path 相关的改动,仅保留了 cusparselt 的修复,避免了该副作用。
- setup_ld_library_path 位置冲突 (design): 作者未采用该建议,而是移除了所有与 setup_ld_library_path 相关的变更,仅保留 cusparselt 修复,从而避免副作用。
风险与影响
- 风险:风险极低:仅新增一段防御性 shell 指令,在文件缺失时触发重装,不影响正常路径。但重装操作可能略微增加 CI 执行时间(只在故障 runner 上触发)。
- 影响:直接影响 CI 安装流程的可靠性,防止因 nvidia-cusparselt-cu13 部分安装失败导致整个 CI 任务阻塞。因仅修改 CI 基础设施脚本,对业务逻辑无影响。
- 风险标记:CI 稳定性修复, 偶发依赖问题
关联脉络
- PR #24102 ci: add per-host utilization view to runner-utilization report: 同一仓库 CI 基础设施的改进,共同提升 CI 观测性和可靠性。
- PR #24155 [AMD] Nightly image release for deepseek v4: 同为 CI 配置变更,但本 PR 涉及通用依赖修复,AMD 相关也可能受益。
参与讨论