Prhub

#24385 Fix sgl-deep-gemm release workflow

原始 PR 作者 Fridge003 合并时间 2026-05-05 05:37 文件变更 3 提交数 6 评论 5 代码增减 +117 / -43

执行摘要

修复 deep-gemm wheel 发布流程中重命名和 PyPI 上传问题

重命名 wheel 和剥离 +cu130 的步骤在自托管构建节点上运行,但系统 python3 缺少 pip 模块("No module named pip"),且需要修改由构建容器创建的 root 拥有文件,因此需要将这些操作移到 Docker 容器内执行。同时需要默认 Python 版本从 3.10 升级到 3.12,并补齐 cu130 发布流程。

对于关注发布自动化和 CI/CD 的工程师值得精读,尤其是将操作移入容器避免环境依赖的实践。但 reviewer 建议的代码优化未纳入,建议在后续 PR 中跟进。

讨论亮点

Review 由 gemini-code-assist[bot] 提出四点改进建议:

  • CUDA_VERSION 映射重复:脚本和 Dockerfile 中均有版本到标签的映射,建议统一通过构建参数传递。
  • 内联 bash 逻辑复杂:版本剥离的 bash -c 字符串可读性差,建议独立成脚本。
  • wheel 解包路径查找脆弱find | head -1 可能因失败导致空目录,应增加验证。
  • 版本剥离正则不够通用:建议使用 cut -d+ -f1 替代 sed 以剥离所有 local version。
    以上建议均未在本次 PR 中得到解决。

实现拆解

  1. 将重命名和版本剥离逻辑移入构建脚本:原本在 workflow 中独立的 "Rename wheel" 和 "Strip +cu130" 步骤不再执行,改为在 scripts/build_sgl_deep_gemm.sh 中作为容器内步骤执行。脚本先映射 CUDA 版本到 cuTAG(cu129/cu130),然后在构建容器内依次执行 wheel 构建、重命名(通过 rename_sgl_deep_gemm_whl.sh)和 cu130 专用版本剥离(生成 dist-pypi)。
  2. 更新 Dockerfile 默认 Python 版本:将 PYTHON_VERSIONPYTHON_TAG 从 3.10 改为 3.12,与 workflow 矩阵保持一致。
  3. 调整发布工作流矩阵和作业:在 .github/workflows/release-whl-deepgemm.yml 中,将 cu129 和 cu130 的 python-version["3.10"] 改为 ["3.12"],并新增 cu130 的发布作业(release-cu130),该作业下载 +cu130 的 wheel,附加到 sgl-project/whl 的 release 并更新索引文件。同时移除了 workflow 中独立的 rename 和 strip 步骤。
文件 模块 状态 重要度
.github/workflows/release-whl-deepgemm.yml 发布工作流 modified 5.2
scripts/build_sgl_deep_gemm.sh 构建脚本 modified 4.58
docker/sgl-deep-gemm.Dockerfile Docker 镜像 modified 2.96

分析完成后,这里会展示 LLM 生成的相对完整源码片段和详细注释。

评论区精华

CUDA_VERSION 到 CU_TAG 映射重复 设计

gemini-code-assist[bot] 指出 CUDA_VERSION 到 CU_TAG 的映射逻辑在 build_sgl_deep_gemm.sh 和 Dockerfile 中重复,建议将 CU_TAG 作为构建参数传递给 Docker 以避免重复。

结论:当前提交两处映射均保留,未统一。 · unresolved

内联 bash 逻辑复杂 设计

gemini-code-assist[bot] 建议将 PyPI 版本剥离的内联 bash -c 逻辑移到独立脚本或扩展 rename_sgl_deep_gemm_whl.sh 以提升可维护性。

结论:当前提交仍保留内联形式,未独立成脚本。 · unresolved

wheel 解包路径查找脆弱 正确性

gemini-code-assist[bot] 指出 find ... | head -1 模式可能因 wheel unpack 失败导致空目录,引发错误或意外行为。建议验证目录存在性。

结论:当前提交未增加验证逻辑。 · unresolved

版本剥离正则不够通用 正确性

gemini-code-assist[bot] 建议使用 cut -d'+' -f1 替换 sed 正则,以剥离所有 local version 而非仅 CUDA 版本,更符合 PyPI 要求。

结论:当前提交仍使用 sed "s/+cu[0-9]\+$//",未采纳 cut 建议。 · unresolved

风险与影响

  • 发布流程可用性风险:构建脚本或 Docker 镜像构建失败会导致 wheel 不可用,需确保 CI 触发前本地测试通过。
  • 可维护性风险:内联 bash 逻辑和未合并的映射逻辑增加了维护成本,后续修改需同时更新两处。
  • 兼容性风险:版本剥离只处理 +cu 格式,若未来版本标识变化需更新脚本。

仅影响 sgl-deep-gemm wheel 的发布流程,不影响运行时推理性能或其他模块。受众为发布维护者,降低因环境差异导致的发布失败概率。

发布流程可能失败 构建脚本可维护性风险 版本剥离正则兼容性

关联 Issue

未识别关联 Issue

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

完整报告

参与讨论