在 Amazon EKS 上借助 EFA 与 DeepEP 实现 MoE 强化学习规模化扩展与 40% 吞吐提升
- 作者

- 姓名
- Nino
- 职业
- Senior Tech Editor
基于人类反馈的强化学习(RLHF)以及组相对策略优化(GRPO)已成为对齐现代大语言模型(LLM)的核心技术路径。随着模型架构逐步从传统的 Dense(密集型)架构转向混合专家模型(MoE,如 DeepSeek-V3 和 Mixtral 8x22B),强化学习采样生成(Rollout)阶段的算力与通信特征发生了根本性变化。在 MoE 模型训练中,系统需要根据 Gate 路由决策将不同的 Token 实时分发给分布在不同节点上的专家 GPU,这引发了极高频次的节点间 All-to-All 通信。
尽管自行搭建高性能云原生集群能够最大化控制训练细节,但对于多数专注于上层应用研发的团队而言,直接通过 n1n.ai 这样的统一 API 平台调用已托管的开源与商业级大模型,是更为快捷高效的选择。然而,在企业自主构建和演进 MoE 强化学习基础设施的场景下,优化底层网络通信至关重要。本文将系统阐述如何在 Amazon Elastic Kubernetes Service (Amazon EKS) 上结合 AWS Elastic Fabric Adapter (EFA)、DeepEP 通信库与 Amazon S3,构建高吞吐的 MoE 强化学习训练架构,将 RL 采样吞吐量大幅提升 40%。
MoE 强化学习训练中的通信瓶颈分析
大语言模型的强化学习流程通常分为两大阶段:Rollout(轨迹采样生成)与 Policy Update(策略梯度更新与损失计算)。在 Rollout 阶段,模型以自回归方式并发生成成千上万的 Token。在 MoE 架构中,每个生成的 Token 都必须经过路由层计算,并跨节点转发至指定的专家 GPU 上进行前向计算。
+-----------------------------------------------------------------------+
| MoE All-to-All Token 路由传输 |
+-----------------------------------------------------------------------+
| 节点 A GPU 0 (Token 1 -> 专家 3) --\\ |
| 节点 A GPU 1 (Token 2 -> 专家 0) ----+--> 跨节点底层网络 (EFA Fabric)|
| 节点 B GPU 0 (Token 3 -> 专家 1) --/ | |
| v |
| 目标专家 GPU 接入处理 |
+-----------------------------------------------------------------------+
在跨节点多卡集群中,使用传统的通用网络通信组件(如未优化的标准 NCCL ncclAllToAll)会导致严重的传输延迟,原因包括内存多次拷贝、缓冲区分配开销大以及缺少通信与计算的重叠(Overlap)机制。在 GRPO 和 RLHF 训练中,Rollout 阶段往往占据整个训练时间的 70% 至 80%。如果节点间的 Token 路由陷入阻塞,GPU 计算单元将长时间处于等待状态,导致总体算力利用率剧烈下降。
为突破这一限制,必须在硬件网络层与软件通信库两个维度同步创新:
- 硬件网络加速:AWS Elastic Fabric Adapter (EFA) 提供了操作系统旁路(OS Bypass)功能的专用网络接口,基于 Libfabric 协议实现 EC2 实例(如
p4d.24xlarge和p5.48xlarge)之间高带宽、极低延迟的 GPU 间直接内存访问。 - 专用专家并行通信库:DeepEP 是专为 MoE 模型训练与推理打造的高性能开源通信库。它通过低精度(FP8/BF16)数据传输、细粒度 Buffer 管理以及算子融合技术,实现了 All-to-All 通信与 GPU GEMM 计算的高效重叠。
架构设计:Amazon EKS + EFA + DeepEP + Amazon S3
该方案构建于 Kubernetes 云原生生态之上,兼具弹性伸缩能力与高性能计算基础设施:
- Amazon EKS:作为容器编排引擎,配合 AWS Node Termination Handler 和 Topology Aware Hints,实现分布式 Pod 的精准拓扑调度与资源生命周期管理。
- AWS EFA 驱动与设备插件:将 EFA 硬件网卡映射至 Kubernetes 容器命名空间内,使 Pod 能够以低至 8 微秒的延迟进行跨节点 GPU-to-GPU 极速数据通信。
- DeepEP 内核集成:作为 PyTorch 与 vLLM 采样引擎的底层动态路由扩展,替代传统的通信算子。
- Amazon S3 与 S3 Express One Zone:提供超高吞吐量的存储支撑,用于保存 Policy Checkpoint、流式写入 Rollout Replay Buffer 以及分布式状态恢复。
网络通信拓扑与性能对比表
| 网络配置方案 | 节点间网络带宽 | 路由通信延迟 | 计算与通信重叠能力 | 相对 Rollout 吞吐量 |
|---|---|---|---|---|
| 标准 TCP/IP (Kubernetes CNI) | 10-25 Gbps | 较高 (> 150us) | 无重叠 | 1.0x |
| AWS EFA + 标准 NCCL | 400-3200 Gbps | 较低 (< 20us) | 部分重叠 | 1.18x |
| AWS EFA + DeepEP + EKS | 400-3200 Gbps | 极低 (< 8us) | 深度重叠 (Deep Overlap) | 1.40x (提升 40%) |
实操指南:Amazon EKS 环境部署与代码配置
在 Amazon EKS 上构建此方案,需要完成支持 EFA 的 Pod 部署清单配置、通信内核接入以及 GRPO Rollout 流水线编写。
步骤 1:配置支持 EFA 的 Kubernetes Pod 部署文件
在容器 Pod 声明中,需要向 Kubernetes 请求 vpc.amazonaws.com/efa 硬件资源,并注入相应的 Libfabric 与 NCCL 环境变量:
apiVersion: v1
kind: Pod
metadata:
name: moe-grpo-worker-0
namespace: ml-training
spec:
containers:
- name: training-container
image: 123456789012.dkr.ecr.us-east-1.amazonaws.com/moe-rlhf:latest
resources:
limits:
nvidia.com/gpu: "8"
vpc.amazonaws.com/efa: "4"
memory: "512Gi"
cpu: "64"
requests:
nvidia.com/gpu: "8"
vpc.amazonaws.com/efa: "4"
memory: "512Gi"
cpu: "64"
env:
- name: FI_PROVIDER
value: "efa"
- name: FI_EFA_USE_DEVICE_RDMA
value: "1"
- name: NCCL_BUFFSIZE
value: "8388608"
- name: DEEPEP_ENABLE_FP8
value: "1"
securityContext:
capabilities:
add: ["IPC_LOCK"]
volumeMounts:
- mountPath: /dev/infiniband
name: infiniband-hardware
volumes:
- name: infiniband-hardware
hostPath:
path: /dev/infiniband
步骤 2:利用 DeepEP 优化 Token 路由调度代码
在 PyTorch 强化学习采样模块中,使用 DeepEP 提供的分发 API 替换默认的 torch.distributed.all_to_all 函数。以下示例演示如何调用 DeepEP 进行跨节点 Token 调度:
import torch
import torch.distributed as dist
try:
import deepep
except ImportError:
deepep = None
class MoERolloutRouter(torch.nn.Module):
def __init__(self, num_experts, hidden_dim, group):
super().__init__()
self.num_experts = num_experts
self.hidden_dim = hidden_dim
self.group = group
def forward(self, hidden_states, expert_indices, top_k_weights):