Prhub

#2854 [AMD] docker: retire the rocm700 variants, add a rocm10-mi35x variant

原始 PR 作者 XinyuJiangCMU 合并时间 2026-09-09 13:37 文件变更 5 提交数 8 评论 0 代码增减 +74 / -53

执行摘要

淘汰旧 ROCm 7.0 镜像变体,新增 ROCm 10 MI35x 构建以支持新硬件和 SDK。

上游 SGLang ROCm 7.0 基础镜像已停止构建,而 ROCm 10 MI35X 基础镜像已每日构建并基于 Python 3.12 和 wheel SDK。同时,ROCm 10 修复了 ROCm 7.2 中存在的 VMM-pause 和 IPC-export 内存问题,因此旧的 ROCr 和 legacy-IPC 变通方案不再需要。PR body 明确指出此变更是为了‘retire the rocm700 variants’并‘add a rocm10-mi35x variant’。

此 PR 是一个重要的基础设施更新,旨在保持构建环境的现代化和可维护性。虽然没有涉及核心应用逻辑,但对于支持 AMD 硬件平台至关重要。建议相关硬件或 CI 维护人员精读,特别是 docker/Dockerfile.rocm 中的变更,以理解新的构建流程和依赖管理策略。对于其他开发者,了解新的构建变体即可。

讨论亮点

此 PR 没有实质性的公开讨论。审核者 guapisolo 直接批准了变更,表明变更内容(基础设施更新)已预先达成共识或清晰明了。唯一的评论来自自动化机器人 claude[bot],提示因是 Fork PR 而禁用了自动审核。

实现拆解

  1. Docker 构建配置更新:在 docker/build.py 和 docker/Dockerfile.rocm 中,移除了 rocm700-mi35x 和 rocm700-mi30x 变体配置,并新增 rocm10-mi35x 变体。新变体使用 rocm/sgl-dev:v0.5.18-rocm10-mi35x-20260831 基础镜像,并设置了新的构建参数,如 WHEELS_TAG_ROCM=rocm10-gfx950-v0.5.18、APEX_USE_PREBUILT=1 和 NVRX_INSTALL=1。
  2. ROCm 10 特定依赖与修复:在 docker/Dockerfile.rocm 中,为 rocm10-mi35x 变体添加了多个关键步骤:
    • 安装来自 wheels shelf 的预编译 ROCm Apex 轮子,以支持 Megatron 的融合操作(APEX_USE_PREBUILT 控制)。
    • 安装 nvidia-resiliency-ext,该扩展需要 glibc>=2.39,仅在 ROCm 10 变体上启用(NVRX_INSTALL 控制)。
    • 将 torch_memory_saver 固定到上游已合并的修复 VMM 分配粒度问题的提交 (06caa534),并启用 --no-build-isolation。
    • 动态解析 tile_kernels 补丁路径,以支持 Python 3.10/3.12。
    • 添加一个构建步骤,通过创建符号链接来合并 ROCm wheel SDK 中重复的共享库,以避免加载重复库导致的崩溃(响应 ROCm/TheRock#7818)。
  3. CI 与文档同步:更新 .github/workflows/docker-build.yml 的构建矩阵,移除旧的 ROCm 7.0 变体并添加新的 rocm10-mi35x。同步更新 docs/developer/ci/02-docker-build.md 和 docs/developer/versions.md 中的文档,描述新的变体列表和构建流程。
  4. 移除过时配置:从 docker/Dockerfile.rocm 中移除了不再需要的 SGLANG_USE_ROCM700A 构建参数和环境变量,并移除了强制使用 numpy<2 的全局 pin。
文件 模块 状态 重要度
docker/Dockerfile.rocm 构建定义 modified 5.87
docker/build.py 构建脚本 modified 5.21
.github/workflows/docker-build.yml CI 工作流 modified 3.28
docs/developer/ci/02-docker-build.md 构建文档 modified 3.06
docs/developer/versions.md 版本文档 modified 2.12

关键源码片段

docker/Dockerfile.rocm infrastructure

核心构建定义文件,包含移除旧变体、新增 ROCm 10 变体、集成 Apex/NVRx/torch_memory_saver 以及解决共享库重复问题的所有关键逻辑。

# 新增 ROCm Apex 预编译轮子安装,由 APEX_USE_PREBUILT 参数控制。
# Megatron 的 fused_weight_gradient_mlp_cuda 依赖此轮子。
RUN if [ "${APEX_USE_PREBUILT}" = "1" ]; then \
    pip install cxxfilt==0.3.0 py-cpuinfo==9.0.0 && \
    pip install --no-deps /tmp/wheels/apex-*.whl && \
    python3 -c "import fused_weight_gradient_mlp_cuda"; \
else \
    echo "[apex] prebuilt wheel skipped (APEX_USE_PREBUILT=${APEX_USE_PREBUILT})"; \
fi
​
# 动态解析 tile_kernels 补丁路径,以兼容 Python 3.10 和 3.12。
RUN pip install --no-deps tile_kernels==1.0.0 && \
    patch -p1 -d "$(python3 -c 'import site; print(site.getsitepackages()[0])')" < /tmp/amd_patch/tile_kernels.patch && \
    patch -p1 -d /opt/tilelang/src/tl_templates/hip < /tmp/amd_patch/tilelang_hip_fp8.patch
​
# 安装已合并上游修复的 torch_memory_saver,解决 ROCm 10 上的 VMM 分配崩溃。
# 使用 --no-build-isolation 以兼容 wheel SDK。
RUN pip install git+https://github.com/fzyzcjy/torch_memory_saver.git@06caa534822c5b980b61733a5d79ac731f9a5f9c --no-cache-dir --force-reinstall --no-build-isolation
​
# 合并 ROCm wheel SDK 中重复的共享库,避免加载重复库导致 LLVM 选项重复注册崩溃。
# 响应 issue ROCm/TheRock#7818。
RUN set -eux; \
    SP="$(python3 -c 'import site; print(site.getsitepackages()[0])')"; \
    if [ -d "$SP/_rocm_sdk_devel/lib" ]; then \
        for f in "$SP"/_rocm_sdk_devel/lib/*.so*; do \
            { [ -f "$f" ] && [ ! -L "$f" ]; } || continue; \
            for t in _rocm_sdk_core _rocm_sdk_libraries; do \
                c="$SP/$t/lib/$(basename "$f")"; \
                if [ -f "$c" ] && cmp -s "$f" "$c"; then \
                    ln -srf "$c" "$f"; \
                    echo "[dedup] $(basename "$f") -> $t"; \
                    break; \
                fi; \
            done; \
        done; \
    else \
        echo "[dedup] no wheel-SDK trees, skipping"; \
    fi

评论区精华

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

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

风险与影响

  1. 兼容性风险:移除 rocm700-* 变体可能影响仍依赖这些旧镜像的外部用户或 CI 流程。文档更新部分缓解了此风险。
  2. 新依赖风险:引入 nvidia-resiliency-ext 和预编译的 ROCm Apex 轮子增加了新的外部依赖,需要确保其版本兼容性和长期维护。
  3. 构建复杂性风险:为 rocm10-mi35x 变体添加了多个条件步骤(APEX_USE_PREBUILT、NVRX_INSTALL、库去重脚本),增加了 Dockerfile 的复杂性和潜在的维护负担。
  4. 上游依赖风险:PR 依赖于已合并的上游修复 (torch_memory_saver PR#109)。虽然当前已合入,但未来上游变更可能需要同步调整。

影响主要限于 AMD ROCm 构建基础设施和文档。直接用户影响是:

1) 使用 rocm700-mi35x 或 rocm700-mi30x 镜像的下游项目需要迁移到 rocm720-mi35x 或新的 rocm10-mi35x。
2) 新的 rocm10-mi35x 镜像为 MI35x 硬件提供了基于最新 ROCm 10 SDK 的构建环境,可能提升性能和稳定性。对团队而言,此变更减少了维护过时构建变体的负担,并使 CI 矩阵与上游可用资源保持一致。

旧硬件支持移除 新外部依赖引入 构建流程复杂化

关联 Issue

#109 [AMD] Align HIP VMM allocation sizes to allocation granularity (#82 counterpart)
#7818 [Issue]: [ROCm SDK] `rocm-sdk init` hardlinks can become duplicate shared libraries across Docker layers

完整报告

参与讨论