Prhub

#39721 [ROCm] ROCm DeepEP API updated to latest

原始 PR 作者 itej89 合并时间 2026-04-30 22:47 文件变更 3 提交数 11 评论 14 代码增减 +42 / -60

执行摘要

统一 ROCm DeepEP API 并更新 Docker 构建

PR描述指出目的是“Enablement of all the DeepEP API parameters”,使ROCm DeepEP API与vLLM匹配,支持低延迟等参数,并更新依赖版本。

该PR值得精读,尤其是关注如何通过移除平台分支实现API统一,以及Docker构建的最佳实践(如条件安装rdma-core)。对于ROCm平台开发者有重要参考价值。

讨论亮点

Review中主要讨论包括:

  • rdma-core安装阶段:gemini-code-assist建议将rdma-core安装移到base stage以避免ABI不兼容。作者回应DeepEP仅用于test stage,rdma-core是运行时依赖,在test stage安装已验证通过。
  • ROCSHMEM构建脚本:gemini-code-assist质疑all_backends脚本是否正确处理安装和INSTALL_PREFIX。作者回应该脚本是ROCSHMEM官方推荐方法,适用于所有NIC类型。

实现拆解

实现按以下步骤:

  1. 移除平台条件分支:在deepep_ll.py中删除了current_platform.is_rocm()分支,使ROCm和NVIDIA使用相同的low_latency_dispatch调用,统一传入了round_scaleuse_ue8m0use_nvfp4等参数。
  2. 统一通信管理器参数:在all2all.py中移除current_platform.is_rocm()条件,为DeepEPHTAll2AllManagerDeepEPLLAll2AllManager_make_all2all_kwargs方法直接添加explicitly_destroy=Trueallow_nvlink_for_low_latency_mode=True等参数,消除ROCm与NVIDIA差异。
  3. 更新Docker构建:升级ROCSHMEM和DeepEP仓库commit;改用all_backends脚本构建ROCSHMEM;为DeepEP构建添加--rocm-explicit-ctxflag;根据DEEPEP_NIC变量(cx7或io)条件安装rdma-core v62以支持最新ROCSHMEM。
文件 模块 状态 重要度
vllm/model_executor/layers/fused_moe/prepare_finalize/deepep_ll.py MoE 调度 modified 7.48
vllm/distributed/device_communicators/all2all.py 通信层 modified 6.5
docker/Dockerfile.rocm 部署脚本 modified 4.47

关键符号

prepare_async _make_all2all_kwargs get_handle

关键源码片段

vllm/model_executor/layers/fused_moe/prepare_finalize/deepep_ll.py data-contract

核心 MoE dispatch 逻辑,移除平台条件分支,统一参数传递。

# 变更后统一调用(ROCm 与 NVIDIA 相同路径)
expert_x, expert_num_tokens, handle, _, hook = self.buffer.low_latency_dispatch(
    a1, dispatch_topk_ids, self.max_tokens_per_rank, num_experts,
    use_fp8=self.use_fp8_dispatch,
    round_scale=self.use_ue8m0_dispatch,
    use_ue8m0=self.use_ue8m0_dispatch,
    **(dict(use_nvfp4=True) if use_nvfp4 else dict()),
    **(dict(x_global_scale=qc_a1_gscale_or_scale) if qc_a1_gscale_or_scale is not None and nvfp4_dispatch else dict()),
    async_finish=False,
    return_recv_hook=True,
)
docker/Dockerfile.rocm infrastructure

更新 ROCSHMEM 和 DeepEP 版本,调整构建方式,安装 rdma-core。

# 更新 commit ID
ARG ROCSHMEM_BRANCH=f0acb0c6
ARG DEEPEP_BRANCH=a9ea9774
# 使用推荐构建脚本(替换显式 cmake)
RUN INSTALL_PREFIX=${ROCSHMEM_DIR} ../scripts/build_configs/all_backends -DUSE_EXTERNAL_MPI=OFF
# 为 DeepEP 构建添加 --rocm-explicit-ctx
RUN python3 setup.py --variant rocm --rocm-explicit-ctx --nic ${DEEPEP_NIC} bdist_wheel
# 条件安装 rdma-core(仅 cx7/io)
RUN if [ '${DEEPEP_NIC}' = 'cx7' ] || [ '${DEEPEP_NIC}' = 'io' ]; then git clone --branch v62.0 --depth 1 https://github.com/linux-rdma/rdma-core.git /tmp/rdma-core && cd /tmp/rdma-core && mkdir -p build && cd build && cmake -GNinja -DCMAKE_INSTALL_PREFIX=/usr -DNO_MAN_PAGES=1 .. && ninja && ninja install && ldconfig && rm -rf /tmp/rdma-core; fi

评论区精华

rdma-core 安装阶段 设计

gemini-code-assist 指出 rdma-core 安装在 test stage 可能导致 base 和 final stage 缺少 rdma-core,引起 ABI 不兼容。

结论:作者回应 DeepEP 仅在 test stage 中使用(不出现在 final stage),rdma-core 是运行时依赖,在 test stage 安装已验证通过。 · 已解决

ROCSHMEM 构建脚本变更 设计

gemini-code-assist 质疑 all_backends 脚本是否正确处理安装,以及 INSTALL_PREFIX 环境变量是否生效,建议使用 bash 执行。

结论:作者说明 all_backends 是 ROCSHMEM 官方推荐的构建方法,适用于所有 NIC 类型。 · 已解决

风险与影响

主要风险包括:

  • Docker构建一致性:rdma-core仅在test stage安装,若后续将DeepEP用于其他stage可能缺少依赖。目前作者确认仅在test stage使用。
  • 统一调用路径:移除平台分支后,ROCm使用完整的参数集(如use_nvfp4),需要底层DeepEP库支持。若ROCm DeepEP版本不匹配,可能引发运行时错误。已验证GSM8K精度一致。
  • 构建脚本替换:从显式cmake/make切换到all_backends脚本,若脚本行为有差异可能影响ROCSHMEM安装。作者表示是官方推荐方法。

影响范围:

  • 用户:使用ROCm和DeepEP的用户现在可以无缝使用低延迟和高速率模式,无需手动设置环境变量。也支持了新NIC类型(Thor2)。
  • 系统:统一平台分支减少了未来维护成本,但需要确保ROCm后端持续同步更新。
  • 团队:简化了ROCm和NVIDIA之间的代码分歧,有利于后续DeepEP相关开发。
Docker 构建阶段依赖 统一平台分支潜在回归

关联 Issue

未识别关联 Issue

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

完整报告

参与讨论