Prhub

#7377 [ci, hardware] fix: stabilize ROCm PPO trainer CI

原始 PR 作者 PeterYang12 合并时间 2026-08-19 09:45 文件变更 1 提交数 1 评论 0 代码增减 +15 / -15

执行摘要

ROCm PPO CI 升级镜像并禁用 vLLM custom all-reduce

PR 指出 ROCm 上的 PPO trainer CI 不稳定,根因是 custom all-reduce 在 ROCm 上存在 bug,且旧镜像需要运行时替换 Megatron 依赖才能满足版本要求,这种替换既脆弱又可能引入镜像内依赖冲突。PR 明确说明“currently custom all reduce has some bugs on ROCM, disable it for verl CI on rocm”,希望通过升级到包含所需依赖的 ROCm 7.14 镜像 + 禁用 custom all-reduce 来稳定 CI。PR body 还声明已经检索过相关 open PR,避免重复。

可以快速阅读本 PR 以了解 ROCm CI 的坑位:核心要点是 vLLM custom all-reduce 在 ROCm 上不可用,以及镜像内依赖应作为唯一事实来源。若后续在 ROCm 上继续开展 CI 优化,建议关注 disable_custom_all_reduce 配置在 vLLM 侧的实现,并考虑在更多 ROCm 工作流中复用 VLLM_ROCM_OVERRIDE 模式。

讨论亮点

该 PR 没有 review 评论,也没有 issue 评论。PR body 中值得注意的说明是:本变更由人类提交者完成并验证,AI 辅助用于分析失败原因和准备提交元数据,提交者对所有改动行负责。reviewer wuxibin89 直接 APPROVED,未留多余意见。

实现拆解

本 PR 只改动一个 CI 工作流文件,实现分三步:

  1. 升级容器镜像:将 .github/workflows/e2e_ppo_trainer_megatron_vllm_rocm.yml 中三个 job(Megatron vLLM PPO、Megatron-Bridge 3D 并行、cleanup)的 container.imageverlai/verl:rocm702-vllm020-te210-20260518 统一改为 verlai/verl:rocm7.14_torch2.12_release_0724。新镜像基于 ROCm 7.14,且已内置所需版本的 Megatron 依赖,因此不再需要 runtime 安装。

  2. 移除运行时依赖替换:删除 Megatron-Bridge 相关 job 中手工执行 pip uninstall -y mbridgepip install git+...Megatron-Bridge...pip install git+...Megatron-LM...pip install nvidia-modelopt 的四行步骤,让镜像内依赖成为唯一来源,避免与镜像预装包冲突。

  3. 注入禁用 custom all-reduce 的 Hydra override:在两个训练 job 的 env 中新增 VLLM_ROCM_OVERRIDE: "+actor_rollout_ref.rollout.engine_kwargs.vllm.disable_custom_all_reduce=True",并在每个调用 tests/special_e2e/ppo_trainer/run_function_reward.shtests/special_e2e/run_ppo_trainer_megatron.sh 的命令末尾追加 "${VLLM_ROCM_OVERRIDE}"(共 6 处)。这样所有 vLLM 推理调用都会统一关闭 custom all-reduce。

  4. 配套动作:无源码、测试或文档改动;PR body 说明 pre-commit 全部通过,工作流由提交者在本机 ROCm 环境验证。

文件 模块 状态 重要度
.github/workflows/e2e_ppo_trainer_megatron_vllm_rocm.yml CI 工作流 modified 4.16

关键源码片段

.github/workflows/e2e_ppo_trainer_megatron_vllm_rocm.yml infrastructure

唯一变更文件,集中体现了 ROCm CI 稳定化的三项改动:镜像升级、移除 runtime 依赖替换、禁用 vLLM custom all-reduce。

# 每个 vLLM 训练 job 的 env 中注入 Hydra override。
# VLLM_ROCM_OVERRIDE 用于关闭 vLLM custom all-reduce,
# 因为当前 custom all-reduce 在 ROCm 上有 bug
# (注释内提到的 ROCm 为硬件平台名)。
env:
  HOME: "/root"
  VLLM_ROCM_OVERRIDE: "+actor_rollout_ref.rollout.engine_kwargs.vllm.disable_custom_all_reduce=True"# 在 run 脚本末尾追加 override 参数,让所有训练调用统一生效。
run: |
  ray stop --force
  VAL_BEFORE_TRAIN=True TEST_FREQ=1 SAVE_FREQ=1 SAVE_HF_MODEL=True \
    VERL_EXP_NAME="qwen2.5-0.5b-function-reward-minimal-fsdp-size8" \
    bash tests/special_e2e/ppo_trainer/run_function_reward.sh "${VLLM_ROCM_OVERRIDE}"# 原先 runtime 手工覆盖 Megatron 依赖的步骤被删除,
# 新镜像已内置所需版本,避免与镜像内依赖冲突。

评论区精华

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

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

风险与影响

风险集中在 CI 基础设施层,不影响训练/推理业务代码:

  1. 禁用 custom all-reduce 的性能影响:在 ROCm 上关闭 vLLM custom all-reduce 后,all-reduce 会回退到默认实现,理论上可能降低吞吐,但 CI 只跑小规模 E2E 验证,影响有限,且换取的是稳定性。
  2. 镜像升级带来的依赖漂移:新镜像 rocm7.14_torch2.12_release_0724 的依赖与旧镜像不同,移除 runtime 覆盖后如果镜像内 Megatron 有未知问题,可能导致新的失败;不过这正是 PR 要消除的脆弱点。
  3. 环境变量注入形式依赖脚本支持VLLM_ROCM_OVERRIDE 作为额外参数传给 shell 脚本,要求 run_function_reward.shrun_ppo_trainer_megatron.sh 能正确透传该参数;如果脚本未来重构参数解析方式,这个 override 可能静默失效。
  4. 覆盖面有限:只修了 Megatron 与 vLLM 的 ROCm E2E 流程,其他 ROCm 相关流水线(如 sglang)未覆盖,后续若 custom all-reduce 在其余路径再出现类似 bug,仍需要类似处理。

影响范围:仅限于 .github/workflows/e2e_ppo_trainer_megatron_vllm_rocm.yml 中涉及的 ROCm MI300 CI 作业。对用户无直接 API 或行为影响;对团队而言,ROCm 上的 Megatron + vLLM PPO E2E 回归测试会更稳定,减少因 custom all-reduce 崩溃导致的误报。改动小、风险局部,但能提升 CI 可靠性。

仅 CI 配置变更 禁用 custom all-reduce 影响推理性能 镜像升级带来依赖漂移 override 依赖脚本透传参数

关联 Issue

未识别关联 Issue

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

完整报告

参与讨论