
【DeepSeek开源周】Day 2:DeepEP 学习笔记
DeepEP 是由DeepSeek专为Mixture-of-Experts (MoE) 和专家并行 (Expert Parallelism, EP)设计的高效通信库。它提供了高吞吐量和低延迟的全对全(all-to-all)GPU内核,这些内核也被称为MoE分发(dispatch)和合并(combine)。该库还支持低精度操作,包括FP8。官方开源代码链接:[https://github.com/d
目录
一、DeepEP概述
DeepEP 是由DeepSeek专为Mixture-of-Experts (MoE) 和专家并行 (Expert Parallelism, EP) 设计的高效通信库。它提供了高吞吐量和低延迟的全对全(all-to-all)GPU内核,这些内核也被称为MoE分发(dispatch)和合并(combine)。该库还支持低精度操作,包括FP8。
官方开源代码链接:https://github.com/deepseek-ai/DeepEP
1. DeepEP的核心亮点
- 全场景覆盖的通信内核:提供高吞吐量内核(支持NVLink/RDMA混合转发)和超低延迟内核(纯RDMA通信),分别适配训练/预填充阶段和实时解码需求。同时支持FP8低精度计算,进一步提升通信效率。
- 异构带宽转发优化:针对不同网络域之间的通信进行了优化,支持异构带宽转发,实现NVLink与RDMA的高效协同,实测节点间通信带宽达46 GB/s(接近硬件极限)。
- 计算与通信重叠技术:引入基于hook的通信-计算重叠方法,不占用SM资源,实现网络传输与模型计算的并行化。
2. 性能表现
- 正常内核性能(NVLink 和 RDMA,H800,CX7 InfiniBand 400 Gb/s,DeepSeek-V3/R1 预训练:4096 tokens/batch,7168 hidden,top-4 groups,top-8 experts,FP8 dispatch,BF16 combine)
类型 | Dispatch #EP | 瓶颈带宽 (GB/s) | Combine #EP | 瓶颈带宽 (GB/s) |
---|---|---|---|---|
节点内 | 8 | 153 GB/s (NVLink) | 8 | 158 GB/s (NVLink) |
节点间 | 16 | 43 GB/s (RDMA) | 16 | 43 GB/s (RDMA) |
节点间 | 32 | 44 GB/s (RDMA) | 32 | 47 GB/s (RDMA) |
节点间 | 64 | 46 GB/s (RDMA) | 64 | 45 GB/s (RDMA) |
- 低延迟内核性能(纯 RDMA,H800,CX7 InfiniBand 400 Gb/s,DeepSeek-V3/R1 产品 tokens/batch,7168 hidden,top-8 experts,FP8 dispatch,BF16 combine):
Dispatch #EP | 延迟 (us) | RDMA带宽 (GB/s) | Combine #EP | 延迟 (us) | RDMA带宽 (GB/s) |
---|---|---|---|---|---|
8 | 163 us | 46 GB/s | 8 | 318 us | 46 GB/s |
16 | 173 us | 43 GB/s | 16 | 329 us | 44 GB/s |
32 | 182 us | 41 GB/s | 32 | 350 us | 41 GB/s |
64 | 186 us | 40 GB/s | 64 | 353 us | 41 GB/s |
128 | 192 us | 39 GB/s | 128 | 369 us | 39 GB/s |
256 | 194 us | 39 GB/s | 256 | 360 us | 40 GB/s |
二、全场景覆盖的通信内核详解
1. Mixture-of-Experts (MoE)
Mixture-of-Experts (MoE) 是一种用于大规模深度学习模型的架构,通过将模型分解为多个“专家”模块(Experts),并动态选择其中一部分进行计算,从而实现高效的计算资源利用。MoE的核心思想是将复杂的任务分配给多个专家模块,每个模块专注于处理特定的子任务,最终通过门控机制将这些模块的输出组合起来。
DeepSeek-V3 MoE的基本架构
在 DeepSeek‐V3 的 MoE 模块中,主要包含两类专家:
- 路由专家(Routed Experts):每个 MoE 层包含 256 个路由专家,这些专家主要负责处理输入中某些特定、专业化的特征。
- 共享专家(Shared Expert):每个 MoE 层中还有 1 个共享专家,用于捕捉通用的、全局性的知识,为所有输入提供基本的特征提取支持。
token传入MoE时的处理流程:
- 计算得分:首先,经过一个专门的 Gate 网络,该网络负责计算 token 与各个路由专家之间的匹配得分。
- 选择专家:基于得分,Gate 网络为每个 token 选择 Top-K 个最合适的路由专家(DeepSeek‐V3 中通常选择 8 个)
- 各自处理:被选中的专家各自对 token 进行独立处理,产生各自的输出。
- 合并输出:最终,根据 Gate 网络给出的权重加权聚合这些专家的输出,再与共享专家的输出进行融合,形成当前 MoE 层的最终输出表示。
设 u t u_t ut表示第t个token的FFN输入,计算FFN输出 h t ′ h'_t ht′如下:
h t ′ = u t + ∑ i = 1 N s FFN i ( s ) ( u t ) + ∑ i = 1 N r g i , t FFN i ( r ) ( u t ) , h'_t = u_t + \sum_{i=1}^{N_s} \text{FFN}_i^{(s)}(u_t) + \sum_{i=1}^{N_r} g_{i,t} \text{FFN}_i^{(r)}(u_t), ht′=ut+i=1∑NsFFNi(s)(ut)+i=1∑Nrgi,tFFNi(r)(ut),
g i , t = g i , t ′ ∑ j = 1 N r g j , t ′ , g_{i,t} = \frac{g'_{i,t}}{\sum_{j=1}^{N_r} g'_{j,t}}, gi,t=∑j=1Nrgj,t′gi,t′,
g i , t ′ = { s i , t , s i , t ∈ Top k ( { s j , t ∣ 1 ≤ j ≤ N r } , K r ) , 0 , otherwise , g'_{i,t} = \begin{cases} s_{i,t}, & s_{i,t} \in \text{Top}_k(\{s_{j,t} | 1 \leq j \leq N_r\}, K_r), \\ 0, & \text{otherwise}, \end{cases} gi,t′={si,t,0,si,t∈Topk({sj,t∣1≤j≤Nr},Kr),otherwise,
s i , t = Sigmoid ( u t T e i ) s_{i,t} = \text{Sigmoid}(u_t^T e_i) si,t=Sigmoid(utTei)
其中, N s N_s Ns和 N r N_r Nr分别表示共享专家和路由专家的数量; FFN i ( s ) ( ⋅ ) \text{FFN}_i^{(s)}(\cdot) FFNi(s)(⋅)和 FFN i ( r ) ( ⋅ ) \text{FFN}_i^{(r)}(\cdot) FFNi(r)(⋅)分别表示第i个共享专家和第i个路由专家; K r K_r Kr表示激活的路由专家的数量; g i , t g_{i,t} gi,t是第i个专家的门控值; s i , t s_{i,t} si,t是token到专家的亲和度; e i e_i ei是第i个路由专家的质心向量; Top k ( ⋅ , K ) \text{Top}_k(\cdot, K) Topk(⋅,K)表示包含第t个token和所有路由专家计算的亲和度分数中最高的K个分数的集合。
2. 传统MoE通信问题
- 高通信开销:MoE模型中的all-to-all通信操作(如分发和聚合)需要在不同设备之间传输大量数据。在大规模分布式训练中,这种高通信开销严重影响了模型的训练效率。
- 低GPU利用率:MoE模型的通信操作通常是同步的,这意味着在通信过程中,GPU需要等待数据传输完成才能继续执行计算任务,这种同步通信约束导致GPU利用率低下。此外,由于MoE模型的稀疏性,不同专家模块的负载可能不均衡,进一步加剧了GPU资源的浪费。
- 异构网络环境的复杂性:在实际部署中,MoE模型通常运行在异构网络环境中,传统的通信方案难以高效地利用这种异构带宽。
3. DeepEP的解决方案
DeepEP 提供了两类内核模式,使其能同时服务训练和推理两种截然不同的需求。
- 高吞吐量的全对全(all-to-all)GPU内核,能很好的支持MoE的分发(dispatch)和合并(combine)操作,适用于大规模分布式训练和推理预填充阶段。
- 低延迟内核专门优化了推理解码阶段的通信延迟,能够将延迟降低到163微秒。通过纯RDMA通信,避免了NVLink和RDMA之间的切换延迟,从而实现了高效的实时推理。
场景类型 | 技术方案 | 性能提升 |
---|---|---|
训练预填充 | 批量聚合+流水线调度 | 吞吐量↑320% |
推理解码 | RDMA零拷贝+轻量化协议栈 | 延迟↓67% |
动态专家调度 | 拓扑感知路由+专家负载均衡 | 资源消耗↓45% |
通过这种全场景覆盖的设计,DeepEP能够满足不同阶段的通信需求,显著提升系统的整体性能。
三、异构带宽转发优化详解
异构网络环境通常包括两种主要的通信技术:NVLink 和 RDMA。这两种技术在性能和应用场景上各有特点,但它们的协同优化是提升通信效率的关键。
1. MoE 的 All-to-All 通信
All-to-All 通信是一种多对多的通信模式,其中每个参与进程都向所有其他进程发送不同的数据,同时接收来自所有其他进程的数据。这种通信模式允许每个进程与其他所有进程进行数据交换,从而实现全局数据的共享和分发。
All-to-All通信是MoE模型中不可或缺的机制,其作用是确保输入数据正确分发到各个专家,同时将专家的输出结果正确整合。通常分为两个阶段:
- Dispatch(分发):在这一阶段,输入数据(如tokens)根据门控函数的决策被发送到目标GPU上的专家模块。
- Combine(组合):在专家模块完成计算后,结果需要被发送回原始的GPU,以便进行后续的处理。
2. NVLink介绍
NVLink 是一种专门设计用于连接 NVIDIA GPU 的高速互联技术。它允许 GPU 之间以点对点方式进行通信,绕过传统的PCIe总线,实现了更高的带宽和更低的延迟。NVLink 可用于连接两个或多个 GPU,以实现高速的数据传输和共享,为多 GPU 系统提供更高的性能和效率。
3. RDMA介绍
DMA(Direct Memory Access) 的核心目标是加速设备(如硬盘、显卡、网卡)与本地内存之间的数据流动,允许外部设备能够绕过CPU直接访问主机的系统主存;
RDMA(Remote Direct Memory Access)在概念上是相对于DMA而言的。指外部设备能够绕过CPU,不仅可以访问本地主机的主存,它还可以访问另一台远端主机上用户态的系统主存。它不仅继承了 DMA 的核心能力,还扩展到了网络通信范畴,提供了远程节点间的高效、零拷贝通信。
4. NVLink 和 RDMA 的协同优化
在MoE模型中,通信任务通常涉及节点内(如GPU之间的通信)和节点间(如跨服务器的通信)两种场景。NVLink和RDMA分别在这些场景中表现出色,但传统的通信方案难以充分利用它们的异构带宽。
DeepEP主要通过以下策略优化异构带宽转发优化:
(1)混合带宽转发机制
DeepEP支持将数据从NVLink域高效转发到RDMA域,通过优化数据传输路径,确保数据在NVLink和RDMA之间的切换过程中不会引入额外的延迟。从而在节点内和节点间通信中实现无缝切换。同时,根据通信任务的大小和目标设备的带宽特性,DeepEP可以动态选择最优的转发路径。
(2)非对称带宽优化
针对NVLink和RDMA的带宽差异,DeepEP引入了非对称带宽优化策略。在从NVLink域到RDMA域的数据转发中,对数据进行压缩,以减少在低带宽网络中的传输延迟。同时,通过动态调整通信任务的分配,确保在异构带宽环境中充分利用每种通信技术的优势。
(3)低延迟内核设计
在实时推理任务中,通信延迟是关键性能指标之一。DeepEP提供了纯RDMA的低延迟内核,专门优化了跨节点通信的延迟。引入了基于Hook的通信-计算重叠机制,确保在通信过程中不占用GPU的SM资源,从而实现计算与通信的并行化。
四、计算与通信重叠技术详解
1. Hook机制介绍
Hook机制是一种在程序运行时动态拦截和修改程序行为的技术。它通过在程序的关键位置插入自定义代码,实现对程序执行流程的监听和修改。Hook机制的核心在于拦截和重定义函数调用。
Hook机制的工作原理分为以下几个关键步骤:
- 定义拦截点:确定需要拦截的函数或方法。例如,在MoE模型中,拦截点可能是All-to-All通信的入口函数。
- 创建代理函数:通过动态代理或函数指针,创建一个代理函数来替代原始函数。代理函数中可以插入自定义逻辑。
- 执行自定义逻辑:在代理函数中,执行自定义逻辑(如日志记录、数据压缩等),然后调用原始函数。
- 恢复原始行为:在某些情况下,需要在自定义逻辑执行完成后恢复原始函数的行为。
2. 计算与通信重叠优化
如图中上半部分所示,在传统的通信重叠方法中,通信操作(如Dispatch和Combine)和计算操作(如Attention和MoE)在不同的CUDA流(Stream)中串行执行。这种方法存在以下问题:
- 通信与计算的串行执行:通信操作和计算操作在不同的流中依次执行,导致通信操作完成后才能开始计算操作,增加了等待时间。
- 占用通信SM:通信操作需要占用专门的通信SM(Streaming Multiprocessors),这些SM在通信过程中无法执行计算任务,降低了GPU的利用率。
图中下半部分,DeepEP通过引入基于Hook的通信-计算重叠方法,使用异步通信机制(如RDMA),在后台执行通信操作,而不阻塞计算操作的执行,实现了计算与通信的并行化。通过Hook机制,DeepEP避免了通信操作占用专门的通信SM,从而可以利用更多的SM进行计算,提高了GPU的利用率。
- Stream 0:
- Attention 0:计算操作,执行Attention机制。
- Attention 1 with background RDMA:在执行Attention 1的同时,后台执行RDMA通信(Dispatch 0)。
- MoE 0 with background RDMA:在执行MoE 0的同时,后台继续执行RDMA通信(Dispatch 1)。
- Attention 0 with background RDMA:在执行Attention 0的同时,后台执行RDMA通信(Combine 0)。
- …
通过这种优化方法,DeepEP实现了计算与通信的高效重叠,减少了等待时间,提高了GPU的利用率,从而显著提升了MoE模型在大规模分布式环境中的性能。
五、小结
DeepEP通过高效的通信内核和优化策略,显著提升了MoE架构在分布式训练和推理任务中的性能。其异构带宽优化、低延迟内核和通信-计算重叠机制,使其在大规模分布式环境中表现出色。未来,随着硬件和网络技术的不断发展,DeepEP有望在更多领域发挥重要作用。
更多推荐
所有评论(0)