Prhub

#36422 add suffix for xpu kernel upload space

原始 PR 作者 ZailiWang 合并时间 2026-08-31 13:41 文件变更 2 提交数 3 评论 1 代码增减 +4 / -2

执行摘要

XPU kernel 发布独立到 +xpu 标签空间

作者在 PR body 中明确说明动机:\"To put xpu kernel releases into a separate https://github.com/sgl-project/whl/releases/tag/v0.1.0+xpu space so that it would not be mixed up with other package releases at https://github.com/sgl-project/whl/releases/tag/v0.1.0\"。此前 sglang-kernel-xpu 与其他后端 wheel 共用同一个 GitHub Release tag,产物混杂、难以区分;本次把 XPU 发布挪到独立 tag 下,使发布空间与后端一一对应。

该 PR 体量小、逻辑直白,适合快速浏览,可作为发布基础设施命名空间隔离的参考。值得关注的设计点:把后缀设计成带默认值的参数透传,使 CUDA/ROCm/MUSA 行为零变化,同时为后续后端扩展留了口子;但两处 tag 拼接分散在 workflow 与脚本中,建议后续抽成单一配置源,并补充 URL 生成的单元测试。

讨论亮点

该 PR 没有形成公开的 review 讨论:唯一审查者 alexnails 直接 APPROVED(无评论),作者通过 Issue 评论 /tag-run-ci-label 手动触发 CI。CI 面板显示 Latest PR Test 通过、Latest PR Test (Extra) 失败,失败原因需结合 CI 日志确认,本材料未提供。

实现拆解

  1. 索引脚本参数化:在 scripts/update_kernel_whl_index.py_update_non_cuda_wheel_index 中新增 release_tag_suffix="" 参数,默认空串,保证 rocm/musa 等既有调用方行为不变。
  2. URL Tag 拼接:生成 full_url 时由 v{ver} 改为 v{ver}{release_tag_suffix},使 XPU 索引页里的下载链接指向 v0.1.0+xpu 独立 Release 空间。
  3. XPU 专属调用update_wheel_index_xpu() 显式传入 "+xpu",与 sglang_kernel_xpu 包名、sglang-kernel-xpu 索引目录共同构成 XPU 独立发布链路。
  4. 发布 workflow 同步.github/workflows/release-whl-kernel-xpu.ymltag_name${{ inputs.tag_name }} 改为 ${{ inputs.tag_name }}+xpu,保证 GH Release 实体与索引 URL 落在同一标签。
  5. 配套情况:无新增测试;CI 主测试(Latest PR Test)通过,Extra 测试显示失败且本材料无失败详情,建议合并前确认。
文件 模块 状态 重要度
scripts/update_kernel_whl_index.py 索引脚本 modified 4.67
.github/workflows/release-whl-kernel-xpu.yml 发布流水线 modified 2.55

关键符号

_update_non_cuda_wheel_index update_wheel_index_xpu

关键源码片段

scripts/update_kernel_whl_index.py core-logic

索引生成逻辑的核心改动处:新增 `release_tag_suffix` 参数并在下载 URL 拼接中使用,是本次功能真正生效的代码路径,且通过参数默认值保证其他后端行为不变。

# 非 CUDA 后端(xpu/rocm/musa)共用的索引生成入口。
# release_tag_suffix 用于把指定后端的发布放到独立的 GitHub Release tag 空间,
# 例如 xpu 后端传入 "+xpu" 后,Tag 形如 v0.1.0+xpu,
# 避免与其他后端共享 v0.1.0 标签导致产物混淆。
def _update_non_cuda_wheel_index(
    backend,
    version=None,
    package_name="sglang_kernel",
    index_package_name="sglang-kernel",
    release_tag_suffix="",
):
    backend_dir = f"{backend}{version or ''}"
    index_dir = pathlib.Path(f"sgl-whl/{backend_dir}/{index_package_name}")
    index_dir.mkdir(exist_ok=True, parents=True)
    base_url = "https://github.com/sgl-project/whl/releases/download"
​
    for path in sorted(pathlib.Path("python/sglang/kernels/aot/dist").glob("*.whl")):
        # 跳过不属于该后端的 wheel
        if re.search(f"{backend}", path.name) is None:
            continue
        with open(path, "rb") as f:
            sha256 = hashlib.sha256(f.read()).hexdigest()
        # 从 wheel 文件名解析版本号,容忍 +{backend} 之类的本地版本后缀
        ver = re.findall(
            rf"{re.escape(package_name)}-([0-9.]+(?:\.post[0-9]+)?)(?:\+{backend}[0-9]+)?-",
            path.name,
        )[0]
        # 核心变化:下载 URL 的 Tag 部分由 ver 与 release_tag_suffix 拼接而成,
        # 默认空串时保持历史行为(v0.1.0),xpu 则生成 v0.1.0+xpu。
        full_url = f"{base_url}/v{ver}{release_tag_suffix}/{path.name}#sha256={sha256}"
        with (index_dir / "index.html").open("a") as f:
            f.write(f'<a href="{full_url}">{path.name}</a><br>\n')# XPU kernel 专属入口:使用独立的 +xpu 发布命名空间
# 与 workflow 中 tag_name 的 +xpu 拼接保持一致。
def update_wheel_index_xpu():
    _update_non_cuda_wheel_index(
        "xpu",
        package_name="sglang_kernel_xpu",
        index_package_name="sglang-kernel-xpu",
        release_tag_suffix="+xpu",
    )

评论区精华

没有提炼出高价值讨论线程

当前评论区没有形成足够清晰的争议点或结论,后续有更多讨论时会体现在这里。

风险与影响

  • 两处 tag 拼接一致性:发布 workflow(release-whl-kernel-xpu.yml)与索引脚本(update_kernel_whl_index.py)各自拼接一次 tag,任何一处漏改都会导致 index.html 链接 404 或产物混入旧标签,建议后续统一配置源。
  • 旧链接失效:已发布到 v0.1.0 的 XPU wheel 索引链接将随命名空间切换而失效,依赖旧链接的安装脚本需切换。
  • + 字符兼容性+ 在 GitHub tag 与 URL 中合法,但部分工具链对 +(如 PEP 440 本地版本标识语义)的解析可能不一致。
  • 测试缺失:URL 生成逻辑无单测覆盖,回归主要依赖人工验证。

影响范围限定在 XPU kernel 发布链路(sglang-kernel-xpu 索引页及对应 GH Release),CUDA/ROCm/MUSA 路径零变化(后缀默认空串)。对终端用户而言,通过标准 pip --extra-index-url 指向该索引时,解析行为基本透明;对团队而言,确立了按后端隔离 Release tag 的发布约定,后续其他后端可直接复用 release_tag_suffix 参数扩展。

发布命名空间变更 两处 tag 拼接需保持一致 缺少测试覆盖

关联 Issue

未识别关联 Issue

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

完整报告

参与讨论