Prhub

#27730 [AMD]: docker(rocm) bump Mooncake to latest main + enable multi-protocol

原始 PR 作者 Lzy17 合并时间 2026-07-02 08:41 文件变更 3 提交数 6 评论 10 代码增减 +14 / -4

执行摘要

升级 AMD ROCm Docker 中 Mooncake 并启用多协议

旧版Mooncake缺少多协议传输支持,在USE_HIP=ON构建下仅支持XGMI,导致跨节点RDMA返回NotSupportedTransport错误。升级版本并启用多协议后,同一进程可自动根据对端选择传输协议,无需重建或手动切换。

该PR值得关注,特别是对AMD平台部署PD Disaggregation的团队,其多协议运行时选择的设计思路清晰,可参考。

讨论亮点

讨论主要集中在两部分:一是Mooncake自身测试编译失败(undefined reference to typeinfo for mooncake::CxlTransport),通过添加-DBUILD_UNIT_TESTS=OFF解决;二是单节点1P1D disagg测试中RDMA多设备导致P2P握手失败(received packet mismatch),最终固定为单个rdma0解决。

实现拆解

  1. 升级Mooncake版本与构建参数:在docker/rocm.Dockerfile中将MOONCAKE_COMMIT更新至01d1eb2a7ec37fd5e20a88573e9b4956e7846e9a,并在cmake命令中添加-DENABLE_MULTI_PROTOCOL=ON -DWITH_STORE=ON -DBUILD_UNIT_TESTS=OFF。其中BUILD_UNIT_TESTS=OFF用于规避Mooncake测试目标mp_transport_test因未启用CXL导致的链接错误。
  2. 优化CI调试与设备配置:在两个CI工作流文件(pr-test-amd-rocm720.ymlpr-test-amd.yml)的disaggregation测试步骤中添加rocm-smi --showtopotype输出、Mooncake引擎的协议广告字符串检查、MC_LOG_LEVEL=TRACEGLOG_logtostderr=1环境变量。同时将RDMA设备从自动检测所有HCA(rdma0..rdma7)硬编码为单个rdma0,以解决单节点1P1D测试中多设备导致P2P握手失败的问题。
文件 模块 状态 重要度
docker/rocm.Dockerfile 部署脚本 modified 3.79
.github/workflows/pr-test-amd-rocm720.yml CI 配置 modified 3.29
.github/workflows/pr-test-amd.yml CI 配置 modified 3.29

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

评论区精华

Mooncake 多协议构建链接错误 正确性

Mooncake 的 mp_transport_test 无条件引用 mooncake::CxlTransport,但 CXL 未启用时链接失败。

结论:通过添加 -DBUILD_UNIT_TESTS=OFF 禁用测试编译。 · 已解决

单节点 RDMA 多设备 P2P 失败 正确性

单节点 1P1D 测试中自动检测 8 个 RDMA 设备导致 peer nic_path 为空,QP 无法到 RTR。

结论:将 RDMA 设备固定为单个 rdma0。 · 已解决

风险与影响

主要风险来自Mooncake版本升级可能引入新的bug或不兼容行为,但由于仅改动Docker构建参数和CI脚本,不涉及模型前向或内核代码,影响范围可控。CI中添加的硬编码rdma0可能在未来多NIC环境下需要重新评估,但当前仅用于单节点调试场景。

对AMD ROCm用户影响较大:PD Disaggregation现在可以在多节点间通过RDMA传输KV,同一镜像同时支持XGMI和RDMA,简化部署。CI中添加的调试日志有助于未来排查相关问题,但设备固定可能掩盖部分环境问题。

依赖外部仓库版本迭代 CI 调试变化可能影响测试稳定性

关联 Issue

未识别关联 Issue

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

完整报告

参与讨论