Prhub

#6388 [doc] refactor: update rocm doc

原始 PR 作者 mingjielu 合并时间 2026-05-18 18:10 文件变更 4 提交数 10 评论 13 代码增减 +626 / -317

执行摘要

重构 ROCm Dockerfile 并新增快速入门文档

PR Body 指出需要 'Update the ROCM support documentation to provide reproducible Docker and Dockerfile examples'。同时,为了跟上 AMD ROCm 最新软件栈(ROCm 7.0.2、Python 3.12)并采用多阶段构建最佳实践,以提供更高效、可复现的开发环境。

本 PR 适合所有使用 AMD ROCm 的团队精读,特别是 Docker 多阶段构建的实践值得学习。重点关注以下决策:

  • 拆分存档 vs 统一重构:保留旧版本文件作为参考,但未对其应用相同改进,这是一种务实的做法,但需确保用户文档明确示意。
  • Review 处理策略:作者接受部分建议并修复,对设计决策(如 hardcode 版本号)坚持了自身理由,体现了权衡。
    建议在合并后补充一个说明,指明 Dockerfile.rocm6 为存档,新用户应以 Dockerfile.rocm 为准。
讨论亮点

Review 中 gemini-code-assist 提出了几点关键问题:

  • Shell 变量语法:在 Dockerfile.rocm6 第 46 行,$(MAX_JOBS) 会被当做命令执行,应改为 ${MAX_JOBS}。作者回应这是存档版本,建议参考最新的 Dockerfile.rocm,未直接修复。
  • sed 行号硬编码:在 Dockerfile.rocm 第 139 行,使用 121s 行号定位替换 TransformerEngine 版本号,gemini 建议改用模式匹配。作者表示这是刻意为之,未来会手动同步版本。
  • Git 仓库引用:克隆 volcengine/verl 分支且未固定 commit,gemini 建议切换到官方 verl-project/verl 并固定 commit。作者回复 fixed/resolved。
  • Dockerfile.rocm6 未优化:gemini 指出新存档仍为单阶段大镜像,建议像 Dockerfile.rocm 一样应用多阶段构建。作者以存档为由未采纳。
    整体上,作者接受并修复了关于仓库引用和环境变量的建议,对于硬编码版本文档和存档文件的改进持谨慎态度。

实现拆解

  1. 重构 Dockerfile.rocm:将原来单阶段、硬编码的构建方式替换为多阶段构建。基础镜像升级到 rocm/pytorch:rocm7.0.2_ubuntu22.04_py3.12_pytorch_release_2.7,并明确分为 develruntime 阶段,分离编译与运行时依赖,缩小最终镜像体积。
  2. 归档旧版本为 Dockerfile.rocm6:将原 Dockerfile.rocm(针对 ROCm 6.3.4)内容保存为新文件,作为向后兼容参考,但不纳入多阶段构建重构,以降低维护负担。
  3. 新增 amd_quick_start.rst:编写完整的 AMD ROCm 快速入门指南,涵盖硬件支持(MI300X/MI325X/MI355X)、容器启动、环境验证、特性支持矩阵以及训练示例(Colocate + FSDP GRPO 等)。
  4. 更新文档索引:在 docs/index.rst 中添加对 amd_quick_start.rst 的引用,使新指南可以被文档构建系统收录。
  5. 根据 Review 修复问题:包括修正 shell 变量引用语法($(MAX_JOBS)${MAX_JOBS})、替换 Git 仓库引用从 fork 改为官方 verl-project/verl 并添加 commit 锁定,以及调整 sed 操作由行号改为模式匹配。部分修复针对 Dockerfile.rocm 主文件,Dockerfile.rocm6 作为存档未被全面修复。
文件 模块 状态 重要度
docker/rocm/Dockerfile.rocm Docker 构建 modified 6.14
docker/rocm/Dockerfile.rocm6 Docker 构建 added 5.13
docs/amd_tutorial/amd_quick_start.rst AMD 教程 added 4.99
docs/index.rst 文档主页 modified 1.18

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

评论区精华

Shell 变量语法错误 $(MAX_JOBS) 未修复 正确性

gemini-code-assist 指出 `$(MAX_JOBS)` 会被 Shell 当作命令替代执行,建议改为 `${MAX_JOBS}`。

结论:作者回应这是存档版本,建议用户参考最新的 Dockerfile.rocm,未直接修改 Dockerfile.rocm6。 · 未修复

sed 行号硬编码的维护性讨论 设计

gemini-code-assist 建议用模式匹配替换行号 sed 操作,避免未来源文件变更时破坏 patch。

结论:作者表示这是 hardcode 版本号,未来会手动更新,但未改方案。 · 拒绝修复

Git 仓库引用和可复现性 正确性

gemini-code-assist 指出克隆 fork 仓库且未固定 commit 会导致不可复现,建议使用官方仓库并固定 commit。

结论:作者回复 'fixed' 和 'resolved',表明已修正(将仓库切换为官方 verl-project/verl 并添加 commit pinning)。 · 已解决

风险与影响

  1. Dockerfile.rocm6 构建风险:该文件保留旧结构,其中的 $(MAX_JOBS) 语法错误可能导致构建失败,且未应用多阶段构建,镜像体积较大。用户若直接使用该文件(如未注意其存档性质)可能遇到问题。
  2. sed 行号硬编码:若未来TransformerEngine版本更新,行号偏移将导致 patch 失败,目前依赖作者手动维护,存在可维护性风险。
  3. 依赖版本锁定:部分 pip 包(如 cupy-rocm-7-0)及 git 库(如 mbridge)未指定精确版本,可能引入非确定性行为。虽作者声明 cupy 可正常安装,但仍需环境配合。
  4. 兼容性:新 Dockerfile 明确基于 ROCm 7.0.2,可能与旧 ROCm 版本环境不兼容,需要用户更新驱动。

影响范围:中等。主要影响使用 AMD ROCm 进行训练的用户和开发者。

  • 用户:现在有更清晰的快速入门指南(amd_quick_start.rst)和可直接使用的 Docker 镜像构建脚本,降低了上手成本。
  • 系统:Docker 构建从单阶段改为多阶段,构建效率提升,镜像体积减小,利于 CI 和部署。
  • 团队:代码仓库层面,旧 Dockerfile 归档为 Dockerfile.rocm6 避免了直接删除导致的历史丢失,但两个文件需分别维护可能带来额外负担。
旧 Dockerfile 语法未修复 sed 行号依赖 部分依赖版本未锁定 多版本维护负担

关联 Issue

未识别关联 Issue

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

完整报告

参与讨论