执行摘要
- 一句话:为 AMD ROCm 10 发布 Docker 镜像和内核 wheel,同步 CI 与发布产物。
- 推荐动作:本 PR 是一次重要的基础设施补全,虽然代码逻辑相对直接(主要是 YAML 和 shell 脚本的条件扩展),但其背景清晰、验证充分、兼容性考虑周全。对于关注 AMD ROCm 支持或 CI/CD 流水线的工程师,值得精读,尤其是
build_rocm.sh 中为 ROCm 10 pip 安装 SDK 构建环境的补丁部分,它展示了解决跨版本环境差异的实用技巧。PR 的提交历史清晰地展示了从“发布 Docker 镜像”到“发布内核 wheel”再到“优化构建范围”的演进思路,是一个良好的基础设施 PR 范例。
功能与动机
动机来自 PR body 的明确表述:#38659 将 ROCm 10 设为 AMD PR 和 nightly 测试的默认 flavor,但发布侧的工作流仍然只构建 7.x 的产物。这导致 lmsysorg/sglang 没有 v<version>-rocm10-mi30x/-mi35x 标签,且 AMD CI 所需的 sglang-kernel wheel 没有发布版本。本 PR 填补了这一缺口。
实现拆解
- 更新 Docker 发布工作流 (
release-docker-amd.yml):在 workflow_dispatch 的 rocm_version 选项中增加 rocm10,并将默认矩阵从 ['rocm700', 'rocm720', 'rocm724'] 扩展为包含 ['rocm1000']。在构建步骤的条件分支中增加 elif [ "${{ matrix.rocm_version }}" = "rocm10" ] 分支,映射 gfx942 -> rocm10-mi30x 标签,gfx950 -> rocm10-mi35x 标签,对应 Dockerfile 阶段 gfx942-rocm1000 / gfx950-rocm1000。这确保了版本标签发布时生成完整的 ROCm 10 镜像。
- 更新内核 wheel 发布工作流 (
release-whl-kernel.yml):在 target 输入参数的 allowed_values 中增加 rocm1000。在 build-rocm-matrix 任务中,将 rocm-version 矩阵的静态列表替换为条件表达式,根据 inputs.target 动态选择构建哪些 flavor(700、720、1000 或全部)。为 release-rocm700 和 release-rocm720 任务添加 if 条件,使其仅在对应 flavor 被构建时运行。新增 release-rocm1000 任务,其流程与现有任务相同:下载 artifact、创建 GitHub release、克隆 wheel index 仓库、运行 update_kernel_whl_index.py --rocm 1000 更新索引、推送。这确保了 ROCm 10 wheel 能被正确发布和索引。
- 适配 ROCm 10 构建环境 (
3rdparty/amd/wheel/sgl-kernel/build_rocm.sh):在脚本开头,为 ROCM_VERSION 为 1000 的情况新增镜像选择:rocm/pytorch:rocm10.0_ubuntu24.04_py3.12_pytorch_release_2.11.0。由于 ROCm 10 SDK 通过 pip 安装到 site-packages,构建容器缺少 CMake 所需的 /opt/rocm 目录和编译工具链。因此,脚本在 docker run 命令前注入一段 ROCM_SETUP shell 脚本,用于在容器内安装 rocm-sdk-devel、设置 ROCM_HOME、创建 /opt/rocm 符号链接并修复 libc.so 路径问题。此修复与生产镜像构建(docker/rocm.Dockerfile)中的 rocm1000-base 阶段保持一致。
- 适配 wheel 重命名脚本 (
3rdparty/amd/wheel/sgl-kernel/rename_wheels_rocm.sh):脚本接受一个新的可选参数 ROC_WHEEL_VERSION。对于 ROCm 10,由于没有 /opt/rocm-<version> 目录,该参数由 build_rocm.sh 传入(值为 1000)。脚本优先使用该参数,若未提供则回退到原有的 /opt/rocm-* 探测逻辑,确保了 ROCm 7.x flavor 的兼容性。
- 变更的影响与配套:所有变更仅限于发布工作流和构建脚本,不影响运行时代码或模型输出。变更已通过手动触发的 CI 验证(PR body 中引用了成功的 workflow run),并确认了生成的 wheel 和镜像符合预期。兼容性方面,ROCm 7.x 的构建流程未受影响,仅新增了 ROCm 10 的支持。
关键文件:
.github/workflows/release-whl-kernel.yml(模块 发布工作流;类别 infra;类型 infrastructure): 核心变更文件,将 ROCm 10 内核 wheel 的构建和发布逻辑集成到现有工作流中,并优化了按 flavor 构建的调度逻辑。
3rdparty/amd/wheel/sgl-kernel/build_rocm.sh(模块 内核构建脚本;类别 other;类型 core-logic): 实现 ROCm 10 构建环境适配的关键脚本,处理了 SDK 安装、环境设置和路径修复等核心逻辑。
.github/workflows/release-docker-amd.yml(模块 发布工作流;类别 infra;类型 infrastructure): 将 ROCm 10 Docker 镜像的发布集成到版本标签发布流程中,补全了镜像发布链。
3rdparty/amd/wheel/sgl-kernel/rename_wheels_rocm.sh(模块 内核构建脚本;类别 other;类型 core-logic): 适配 ROCm 10 环境下 wheel 重命名逻辑,接受外部传入的版本参数以替代不可用的目录探测。
关键符号:未识别
评论区精华
Review 评论仅有一条,来自维护者 HaiShaw 的批准(LGTM),并附带一个未来建议:“Please purge rocm700 next.”。这表明对本 PR 的实现没有争议,并暗示了后续清理旧 ROCm 版本的维护计划。PR body 中包含了详尽的验证信息,展示了对构建结果的仔细检查,这本身也是一种有效的“讨论”,但在此 PR 中未引发公开的交锋。
风险与影响
关联脉络
- PR #38659 [AMD] Make ROCm 10 the default flavor for PR and nightly tests: 本 PR 是 #38659 的直接后续,后者将 ROCm 10 设为默认测试 flavor,但未更新发布工作流,导致发布产物不匹配。
- PR #38694 [AMD][CI] Drop the dead miles ROCm 7.0 nightly image build: 同属 AMD CI 维护线,清理过时的 ROCm 7.0 构建,与本 PR 补全 ROCm 10 发布形成演进关系。
参与讨论