Prhub

#23497 ci: build sgl-kernel wheels for both cu129 and cu130

原始 PR 作者 jasperjiaguo 合并时间 2026-04-23 09:08 文件变更 4 提交数 1 评论 2 代码增减 +42 / -25

执行摘要

修复 CI 中 sgl-kernel wheel 构建矩阵,同时支持 cu129 和 cu130 以避免测试静默失败。

PR body指出,H系列测试运行器使用NVIDIA驱动535.x,仅支持CUDA ≤ 12.x,无法加载cu130-built wheels。当PR修改sgl-kernel时,测试会静默安装公共main分支wheel,导致内核变更被丢弃,引发TypeError等错误。例如#21985添加了out=参数,但由于wheel不匹配而失败,凸显了修复必要性。

建议团队在修改sgl-kernel时关注此PR,确保CI能正确测试内核变更。对于CI维护者,这是一个重要的配置修复,值得了解wheel选择逻辑和兼容性处理。

讨论亮点

无review评论,但PR body中作者详细解释了问题根源和解决方案,强调静默失败的风险:"H-series CI boxes still ship NVIDIA driver 535.x ... which supports CUDA ≤ 12.x — it cannot load cu130-built wheels at all." 并指出修复后测试将正确运行PR的内核变更。

实现拆解

  1. 扩展构建矩阵:在.github/workflows/pr-test.ymlpr-test-multimodal-gen.ymlpr-test-sgl-kernel.yml中,将sgl-kernel-build-wheels作业的矩阵从仅cuda-version: "13.0"扩展为同时包含"13.0""12.9",确保PR构建cu129和cu130两种wheel。
  2. 修改下载模式:在上述workflow文件中,将下载artifact的patternwheel-python3.10-cuda13.0改为wheel-python3.10-cuda*,以匹配所有CUDA版本wheel。
  3. 优化安装脚本:在scripts/ci/cuda/ci_install_dependency.sh中,调整wheel选择逻辑,优先选择文件名匹配$CU_VERSION(如+cu129+cu130)的wheel,并添加回退逻辑以兼容旧分支。
  4. 无测试或部署配套改动:这是纯CI基础设施变更,不影响运行时行为,无需额外测试。
文件 模块 状态 重要度
scripts/ci/cuda/ci_install_dependency.sh 安装脚本 modified 4.58
.github/workflows/pr-test.yml CI 流水线 modified 4.14

关键源码片段

scripts/ci/cuda/ci_install_dependency.sh infrastructure

核心安装脚本,负责选择匹配 CUDA 版本的 sgl-kernel wheel,避免静默回退到公共 wheel,是修复问题的关键。

# Wheel filenames carry a +cuXYZ local version tag (e.g. sglang_kernel-0.4.0+cu130-...).
# 当构建矩阵产生多个 CUDA 版本 wheel 时,选择匹配测试运行器 $CU_VERSION 的 wheel,
# 以避免触发 PyPI 回退重安装(这会用公共 main 分支 wheel 替换 PR 构建的 wheel)。
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)
if [ -z "$KERNEL_WHL" ]; then
    # 回退逻辑:对于旧分支仅构建单版本 wheel 的情况,选择无 +cuXYZ 标签的 wheel。
    # 限制相同架构,避免选择不匹配 CUDA 版本的 wheel,防止静默替换。
    SINGLE_CUDA_WHL=$(ls sgl-kernel/dist/sglang_kernel-${SGL_KERNEL_VERSION_FROM_KERNEL}-cp310-abi3-manylinux2014_${WHEEL_ARCH}.whl 2>/dev/null | head -1)
    if [ -n "$SINGLE_CUDA_WHL" ]; then
        KERNEL_WHL="$SINGLE_CUDA_WHL"
    fi
fi
if [ -z "$KERNEL_WHL" ]; then
    echo "ERROR: No matching sgl-kernel wheel found in sgl-kernel/dist/ for version ${SGL_KERNEL_VERSION_FROM_KERNEL} arch ${WHEEL_ARCH} cuda ${CU_VERSION}"
    ls -alh sgl-kernel/dist/
    exit 1
fi

评论区精华

静默失败问题 正确性

作者在 PR body 中解释 H 系列运行器因驱动限制无法加载 cu130 wheel,导致测试静默安装公共 wheel,丢弃 PR 变更,引发 TypeError 等错误。

结论:通过构建双版本 wheel 和优化安装脚本来修复,确保测试正确运行 PR 的内核变更。 · 已解决

风险与影响

风险较低:主要风险是CI配置错误可能导致wheel选择失败,但脚本添加了回退逻辑以兼容旧分支。兼容性风险:确保旧分支(仅构建单版本wheel)仍能工作。性能风险:增加一个矩阵作业,延长CI时间约10分钟,但这是必要的成本以修复测试静默失败。

对用户无直接影响,仅影响CI流程。对团队:修复了测试静默失败问题,确保sgl-kernel变更在H系列运行器上正确测试,避免假阳性结果。系统:提升CI可靠性,确保内核修改在混合驱动环境中得到验证。

CI 配置变更 兼容性风险 测试静默失败修复

关联 Issue

未识别关联 Issue

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

完整报告

参与讨论