Deepseek开源周第二弹:DeepEP,一个为混合专家(MoE)和专家并行(EP)设计的通信库。
DeepEP 是为混合专家 (MoE) 和专家并行 (EP) 量身定制的通信库。它提供高吞吐量和低延迟的 all-to-all GPU 内核,也称为 MoE dispatch 和 combine。该库还支持低精度运算,包括 FP8。
为了与 DeepSeek-V3 论文中提出的组限制门控算法保持一致,DeepEP 提供了一组针对非对称域带宽转发进行了优化的内核,例如将数据从 NVLink 域转发到 RDMA 域。这些内核提供高吞吐量,使其适用于训练和推理预填充任务。此外,它们还支持 SM (Streaming Multiprocessors) 号码控制。
对于延迟敏感型推理解码,DeepEP 包括一组具有纯 RDMA 的低延迟内核,以最大限度地减少延迟。该库还引入了一种基于 hook 的通信计算重叠方法,该方法不占用任何 SM 资源。
适用于:
以下数据展示了 DeepEP 通信库在两种不同测试环境下的性能表现:一种是使用 NVLink 和 RDMA 转发的正常内核(Normal kernels),另一种是使用纯 RDMA 的低延迟内核(Low-latency kernels)。这些测试是在 H800 GPU 上进行的,每个 GPU 都连接到了一个 CX7 InfiniBand 400 Gb/s RDMA 网络卡。
正常内核(Normal Kernels)性能数据:
类型 | 分发 #EP | 瓶颈带宽 | 组合 #EP | 瓶颈带宽 |
---|---|---|---|---|
节点内(Intranode) | 8 | 153 GB/s (NVLink) | 8 | 158 GB/s (NVLink) |
节点间(Internode) | 16 | 43 GB/s (RDMA) | 16 | 43 GB/s (RDMA) |
节点间(Internode) | 32 | 44 GB/s (RDMA) | 32 | 47 GB/s (RDMA) |
节点间(Internode) | 64 | 46 GB/s (RDMA) | 64 | 45 GB/s (RDMA) |
这些数据显示了在不同专家并行(EP)数量下,分发(Dispatch)和组合(Combine)操作的瓶颈带宽。节点内通信主要受限于 NVLink 带宽,而节点间通信受限于 RDMA 带宽。
低延迟内核(Low-latency Kernels)性能数据:
分发 #EP | 延迟 | RDMA 带宽 | 组合 #EP | 延迟 | RDMA 带宽 |
---|---|---|---|---|---|
8 | 163 微秒 | 46 GB/s | 8 | 318 微秒 | 46 GB/s |
16 | 173 微秒 | 43 GB/s | 16 | 329 微秒 | 44 GB/s |
32 | 182 微秒 | 41 GB/s | 32 | 350 微秒 | 41 GB/s |
64 | 186 微秒 | 40 GB/s | 64 | 353 微秒 | 41 GB/s |
128 | 192 微秒 | 39 GB/s | 128 | 369 微秒 | 39 GB/s |
256 | 194 微秒 | 39 GB/s | 256 | 360 微秒 | 40 GB/s |
这些数据显示了在不同 EP 数量下,分发和组合操作的延迟和 RDMA 带宽。低延迟内核专注于减少通信延迟,这对于实时或近实时的推理任务非常重要。
总结下来,DeepEP 库的前瞻性体现在以下几个方面:
1. 针对 MoE 架构的优化:DeepEP 专为 Mixture-of-Experts (MoE) 和专家并行 (EP) 设计,提供高效的 all-to-all GPU 内核,适用于训练和推理任务。它支持低精度运算,包括 FP8 和 BF16,提升计算效率,节省显存。
2. 高性能通信:DeepEP 提供高吞吐量和低延迟的通信内核,支持 NVLink 和 RDMA 网络。在 H800 GPU 上测试,最大带宽可达 153 GB/s (NVLink) 和 46 GB/s (RDMA)。针对 NVLink 到 RDMA 的非对称带宽转发场景进行了优化,确保高吞吐量表现。
3. 低延迟通信:提供纯 RDMA 的低延迟内核,特别适合推理解码阶段,延迟低至 163 微秒。
4. 硬件优化:利用未公开的 PTX 指令提升 Hopper 架构的性能。支持 InfiniBand 网络,并理论上兼容 RoCE,提供灵活的网络配置选项。
5. 应用场景广泛:适用于大规模模型训练,提供高效的并行通信支持,显著提升训练效率。特别适合延迟敏感的推理解码场景,显著提升效率,降低延迟,提高推理吞吐量。
6. 高性能计算需求:完美适配现代高性能计算需求,支持多种硬件平台,包括 Hopper GPU 架构,未来可能扩展更多设备。
那么,如何在实际训练过程中进行网络配置?
DeepEP 是一个用于高效通信的库,它主要在 InfiniBand 网络上进行了测试,效果很好。不过,理论上它也可以用在另一种叫 RoCE(基于以太网的 RDMA)的网络上。
1、流量隔离
想象一下,网络就像一条高速公路,不同类型的车(比如大货车、小轿车)可能会互相干扰。为了避免这种干扰,InfiniBand 网络有一种功能,叫“虚拟通道”(VL),可以把不同类型的车(也就是数据流量)分开走不同的“车道”。
DeepEP 建议把工作分成三类,分别放在不同的虚拟通道里:
你可以通过设置一个叫 NVSHMEM_IB_SL 的环境变量,来决定每种工作用哪个虚拟通道。
2、自适应路由
自适应路由是一种智能的导航系统,它可以让网络流量自动选择不同的路线,避免拥堵。不过,DeepEP 的普通通信方式目前还不支持这个功能(未来可能会支持),只有低延迟通信方式支持。
如果普通通信方式用了自适应路由,可能会出问题,比如数据丢失或者程序卡住。
对于低延迟通信:
3、拥塞控制
DeepEP 默认没有开启拥塞控制,因为在实际使用中,网络并没有出现明显的拥堵情况。所以,目前这个功能是关闭的。
如果觉得不错,欢迎点赞、在看、转发,您的转发和支持是我不懈创作的动力~