部署DeepSeek模型,进群交流最in玩法!
立即加群
发布
社区首页 >专栏 >DeepEP:第一个用于 MoE 模型训练和推理的开源 EP 通信库

DeepEP:第一个用于 MoE 模型训练和推理的开源 EP 通信库

作者头像
AIGC新知
发布2025-02-26 12:54:31
发布2025-02-26 12:54:31
1700
举报
文章被收录于专栏:AIGC新知AIGC新知

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 资源。

适用于:

  • Hopper GPU(以后可能支持更多架构或设备)
  • Python 3.8 及更高版本
  • CUDA 12.3 及更高版本
  • PyTorch 2.1 及更高版本
  • 用于节点内通信的 NVLink
  • 用于节点间通信的 RDMA 网络

以下数据展示了 DeepEP 通信库在两种不同测试环境下的性能表现:一种是使用 NVLink 和 RDMA 转发的正常内核(Normal kernels),另一种是使用纯 RDMA 的低延迟内核(Low-latency kernels)。这些测试是在 H800 GPU 上进行的,每个 GPU 都连接到了一个 CX7 InfiniBand 400 Gb/s RDMA 网络卡。

正常内核(Normal Kernels)性能数据:

  • 测试环境:H800 GPU,最大 NVLink 带宽约 160 GB/s,连接到最大带宽约 50 GB/s 的 RDMA 网络卡。
  • 测试配置:遵循 DeepSeek-V3/R1 预训练设置(每批次 4096 个 tokens,隐藏层大小 7168,前 4 组,前 8 个专家,FP8 分发和 BF16 组合)。

类型

分发 #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)性能数据:

  • 测试环境:同样是 H800 GPU 和 CX7 InfiniBand 400 Gb/s RDMA 网络卡。
  • 测试配置:遵循典型的 DeepSeek-V3/R1 生产设置(每批次 128 个 tokens,隐藏层大小 7168,前 8 个专家,FP8 分发和 BF16 组合)。

分发 #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 默认没有开启拥塞控制,因为在实际使用中,网络并没有出现明显的拥堵情况。所以,目前这个功能是关闭的。

如果觉得不错,欢迎点赞、在看、转发,您的转发和支持是我不懈创作的动力~

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2025-02-25,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 AIGC新知 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档