执行摘要
- 一句话:修复#23497引入的cu129轮子标签缺失和安装脚本pipefail问题
- 推荐动作:作为#23497的跟进修复,本PR改动小但关键,建议审阅者关注pipefall调优模式的使用。修改内容合理且PR描述清晰,可直接合并。
功能与动机
PR #23497在sgl-kernel构建矩阵中恢复cu129后,H系列(cu129)测试机无法加载正确轮子。具体表现为#21985的CI中Install dependencies步骤因pipefail退出,且cu129构建的轮子缺少+cu129标签,导致脚本找不到匹配轮子而静默回退到主分支轮子。
实现拆解
-
修复轮子标签识别(sgl-kernel/rename_wheels.sh):在detect_cuda_suffix()函数中添加12.9 → +cu129分支,确保cu129构建的轮子文件名包含+cu129后缀。
-
修复pipefail导致脚本提前退出(scripts/ci/cuda/ci_install_dependency.sh):在轮子查找管道命令后添加|| true,使ls无匹配时返回空字符串而非退出码2,从而让后续的[ -z "$KERNEL_WHL" ]错误检查正常触发并输出清晰错误。
-
移除无标签轮子回退逻辑(同上脚本):删除#23497中添加的fallback逻辑,该逻辑允许安装不带CUDA标签的轮子,但这可能引入ABI不兼容或轮子被PyPI分支覆盖的隐患。现在仅允许版本号完全匹配+cuXYZ的轮子,否则显式报错。
关键文件:
scripts/ci/cuda/ci_install_dependency.sh(模块 CI脚本;类别 infra;类型 infrastructure): 修复安装脚本中pipefall导致的提前退出及移除潜在危险的无标签轮子回退逻辑
sgl-kernel/rename_wheels.sh(模块 内核构建;类别 other;类型 core-logic): 添加cu129分支以保证CUDA 12.9构建的轮子获得正确的+cu129标签
关键符号:detect_cuda_suffix
关键源码片段
scripts/ci/cuda/ci_install_dependency.sh
修复安装脚本中pipefall导致的提前退出及移除潜在危险的无标签轮子回退逻辑
# KERNEL_WHL=$(ls ... 2>/dev/null | head -1) # 原代码,无匹配时 ls 返回 2 导致 set -e 退出
# `|| true` swallows `ls`'s exit-2-on-no-match so `set -o pipefail` doesn't abort the
# script before we reach the explicit error check.
KERNEL_WHL=$(ls sgl-kernel/dist/sglang_kernel-${SGL_KERNEL_VERSION_FROM_KERNEL}+${CU_VERSION}-cp310-abi3-manylinux2014_${WHEEL_ARCH}.whl 2>/dev/null | head -1 || true)
if [ -z "$KERNEL_WHL" ]; then
echo "ERROR: No matching sgl-kernel wheel found ..."
ls -alh sgl-kernel/dist/
exit 1
fi
评论区精华
风险与影响
关联脉络
- PR #23497 ci: build sgl-kernel wheels for both cu129 and cu130: 本PR的动机和修改直接源于#23497引入的两个回归问题,是对#23497的跟进修复
- PR #21985 perf: eliminate attention DtoD copy by passing pre-allocated output to FA: PR body中引用了#21985的CI失败作为问题案例,修复后该PR的CI有望通过
- PR #22392 perf: eliminate nvjet memset bubbles via CUTLASS FP8 GEMM: 同为涉及sgl-kernel的PR,本修复确保这类PR的CI不会因为轮子问题失败
参与讨论