DeepSeek 开源狂欢周(二)DeepEP深度技术解析 | 解锁 MoE 模型并行加速

news2025/4/9 21:22:09

在大模型时代,Mixture-of-Experts (MoE) 模型凭借其强大的容量和高效的计算能力,成为研究和应用的热点。然而,MoE 模型的训练和推理面临着巨大的专家并行通信挑战。近日,DeepSeek 开源了 DeepEP 项目,为解决这一难题提供了强大的武器。OpenCSG社区将深入剖析 DeepEP 的技术原理、架构设计和性能表现,帮助开发者更好地理解和使用 DeepEP,加速 MoE 模型的落地应用。

image.png

DeepSeek DeepEP

DeepEP 是一个专为专家混合(MoE)和专家并行(EP)量身定制的通信库。它提供高吞吐量和低延迟的全到全 GPU 内核,也称为 MoE 调度和组合。该库还支持低精度操作,包括 FP8。

为了与 DeepSeek-V3 论文中提出的组限制门控算法对齐,DeepEP 提供了一组针对非对称域带宽转发优化的内核,例如将数据从 NVLink 域转发到 RDMA 域。这些内核提供高吞吐量,使其适用于训练和推理预填充任务。此外,它们支持 SM(流式多处理器)数量控制。

  • 提速! 🚀 提供高吞吐量、低延迟的 All-to-All GPU 内核,让 MoE 调度和组合更快更强!

  • 优化! ⚙️ 针对非对称域带宽转发进行优化(NVLink 到 RDMA),充分利用硬件性能!

  • 精简! 🔢 原生支持 FP8 等低精度操作,降低计算和通信开销!

  • 灵活! 🧰 支持 SM 数量控制,让资源分配更智能!

技术亮点抢先看:

  • 与 DeepSeek-V3 论文对齐: 采用组限制门控算法,优化非对称域带宽转发。

  • 训练推理全覆盖: 高吞吐内核适用于训练和推理预填充任务。

  • 极低延迟: 针对延迟敏感的推理解码,采用纯 RDMA 技术。

  • 资源友好: 基于钩子的通信-计算重叠方法,不占用任何 SM 资源。

重要提示:

DeepEP 库中的实现可能与 DeepSeek-V3 论文存在一些细微差异,使用前请仔细阅读官方文档哦!

MoE 与 EP:分布式训练的挑战 🤯

MoE 模型,通过引入专家模型和路由机制,能够扩展模型规模,提升性能。 然而,MoE 模型的训练和推理对通信提出了更高的要求。 在分布式训练环境中,尤其是 EP 并行模式下,数据需要在不同 GPU 之间进行频繁交换。

  • 核心问题:

    • All-to-All 通信: 不同“专家”之间的数据交换,需要高效的 All-to-All 通信。

    • 负载不均衡: MoE 模型容易出现负载不均衡,导致部分“专家”的算力无法充分发挥。

DeepEP 的目标,正是解决这些问题,提高 EP 通信的效率和可靠性。

DeepEP 的核心特性:高性能 EP 通信 🚀

  • DeepEP 提供了以下关键特性,助力 MoE 模型实现高性能 EP 通信:

  • 高效优化的 All-to-All 通信: DeepEP 提供了优化的 All-to-All 通信内核,针对 MoE 模型的特点进行了专门设计。

  • 节点内 / 跨节点通信支持: 灵活支持 NVLink 和 RDMA 的节点内和跨节点通信,充分利用硬件互连优势。

  • 训练 / 推理预填充阶段高吞吐量计算核心: 针对训练和推理的预填充阶段,DeepEP 提供了高吞吐量计算核心,加速数据处理。

  • 推理解码阶段低延迟计算核心: 对于延迟敏感的推理解码任务,DeepEP 提供了低延迟计算核心,降低推理时间。

  • 原生 FP8 数据分发: 支持 FP8 数据类型,降低计算和通信开销,提高效率。

  • 灵活的 GPU 资源控制: 可以灵活控制 GPU 资源,实现计算与通信的高效重叠,避免资源浪费。

技术内幕:DeepEP 的关键技术点 🧐

  • 组限制门控算法与非对称域带宽优化:

    • 为了与 DeepSeek-V3 论文中提出的组限制门控算法对齐,DeepEP 针对非对称域带宽进行了优化。

    • DeepEP 针对 NVLink 域到 RDMA 域的数据转发进行了优化,最大化利用 NVLink 和 RDMA 的优势。

      2. 性能优化的内核:

    • 提供了高吞吐量内核,适用于训练和推理预填充任务,并支持 SM 数量控制。

    • 提供了低延迟内核,采用纯 RDMA,降低了延迟。

      3. 通信-计算重叠:

    • DeepEP 引入基于钩子的通信-计算重叠方法,不占用 SM 资源。

DeepEP 的性能表现:数据说话 📊

DeepSeek 在 H800 上进行了性能测试:

常规内核 (NVLink): DeepEP 在 H800 上使用常规内核,NVLink 最大带宽约 160 GB/s,每个 H800 连接一个 CX7 InfiniBand 400 Gb/s RDMA 网卡(最大带宽约 50 GB/s)。

测试结果如下:

Type

Dispatch #EP

Bottleneck bandwidth

Combine #EP

Bottleneck bandwidth

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)

纯 RDMA 的低延迟内核

在 H800 上测试低延迟内核,每个内核连接到一个 CX7 InfiniBand 400 Gb/s RDMA 网络卡(最大带宽约为 50 GB/s)。遵循典型的 DeepSeek-V3/R1 生产设置(每批 128 个标记,7168 个隐藏层,前 8 个专家,FP8 调度和 BF16 组合)。

测试结果如下:

Dispatch #EP

Latency

RDMA bandwidth

Combine #EP

Latency

RDMA bandwidth

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

注意事项与最佳实践 ⚠️

  • PTX 指令: DeepEP 中使用了未记录在文档中的 PTX 指令: ld.global.nc.L1::no_allocate.L2::256B。 请仔细阅读官方文档,并在 setup.py 中添加 DISABLE_AGGRESSIVE_PTX_INSTRS=1 来禁用此功能, 如果遇到问题,请积极提交 issue。

    自动调优: 为了在您的集群上获得最佳性能,DeepSeek 建议运行所有测试并使用最佳的自动调优配置。 默认配置是针对 DeepSeek 内部集群优化的。

  • 快速上手 DeepEP

    使用 DeepEP 需要 Hopper GPU、Python 3.8 以上、CUDA 12.3 以上、PyTorch 2.1 以上,以及用于内节点通信的 NVLink 和跨节点通信的 RDMA 网络。库依赖于一个修改版的 NVSHMEM,安装前需先配置此依赖。DeepEP 提供了清晰的 Python API,使开发者能轻松地将其集成到现有 MoE 模型中。对于推理场景,DeepEP 的低延迟模式特别有价值,提供不占用 SM 资源的通信-计算重叠功能。

    Development

  • # Build and make symbolic links for SO filesNVSHMEM_DIR=/path/to/installed/nvshmem python setup.py build# You may modify the specific SO names according to your own platformln -s build/lib.linux-x86_64-cpython-38/deep_ep_cpp.cpython-38-x86_64-linux-gnu.so# Run test cases# NOTES: you may modify the `init_dist` function in `tests/utils.py`# according to your own cluster settings, and launch into multiple nodes python tests/test_intranode.pypython tests/test_internode.pypython tests/test_low_latency.py

    Install

  • NVSHMEM_DIR=/path/to/installed/nvshmem python setup.py install

OpenCSG 社区开源加速计划

作为OpenCSG社区的一部分,我们一直致力于为开发者提供优质的开源资源。此次DeepSeek的DeepEP项目已同步到OpenCSG社区,欢迎大家访问并使用该项目。

DeepEP项目原始GitHub地址:

https://github.com/deepseek-ai/DeepEP

OpenCSG社区同步的DeepEP项目地址:

https://opencsg.com/codes/deepseek-ai/DeepEP

如果您遇到网络问题无法快速访问GitHub,可以通过我们的服务轻松同步该项目,确保不受网络限制影响。

OpenCSG为您提供了DeepSeek R1和V3系列模型的万兆网络高速下载服务,帮助您快速获取所需模型,避免因文件过大造成下载困难。

DeepSeek R1下载:

https://opencsg.com/models/DeepseekAI/DeepSeek-R1 

DeepSeek V3下载:

https://opencsg.com/models/deepseek-ai/DeepSeek-V3

同时,我们还提供了各种蒸馏版、量化版,您可以访问我们的awesome DeepSeek合集来找到最适合的模型版本。

awesome-deepseek-r1-collection:

https://opencsg.com/collections/85/ 

awesome-deepseek-v3-collection:

https://opencsg.com/collections/86/ 

awesome-deepseek-Janus-collection:

https://opencsg.com/collections/87/

开源狂欢 继续期待

DeepEP 不仅仅是一个技术工具,更是 DeepSeek 对开源社区的诚意回馈。作为全球首个开源的 EP 通信库,DeepEP 已经在 DeepSeek 内部经历了生产级超大规模并发的严苛考验,其性能和质量毋庸置疑!

长期以来,广大企业和社区用户都苦于缺乏 EP 通信库的开源实现,而传统 DP/TP 在大规模推理 MoE 场景下又存在性能瓶颈。DeepEP 的横空出世,有望造福无力自行研发 EP 技术的厂商,加速 MoE 模型在各行各业的落地。

更重要的是,随着 DeepEP 的普及,可以预见未来将涌现出更多低价甚至免费的 DeepSeek R1 系列模型,最终惠及广大用户,推动 AI 技术的 democratization!

OpenCSG 社区与您同行 🤝

OpenCSG 社区将继续与您一起,第一时间为您带来 DeepSeek 的开源震撼,让我们共同期待更多激动人心的创新成果!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2307647.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Linux网络之传输层协议(UDP,TCP协议)

目录 重新认识端口号 端口号划分 netstat pidof UDP协议 UDP的特点 面向数据报 UDP的缓冲区 全双工和半双工 TCP协议 TCP的特点 TCP报头分析 源端口,目标端口,数据偏移(报文首部长度) 序号 确认号 窗口 6个标志位 ACK SYN …

HTML第二节

一.列表 1.列表的简介 2.无序列表 注:1.ul里面只能放li,不能放标题和段落标签 2.li里面可以放标题和段落等内容 3.有序列表 4.定义列表 注:要实现上图的效果需要CSS 二.表格 1.表格介绍 注:1.th有额外的效果,可以…

坐标变换及视图变换和透视变换(相机透视模型)

文章目录 2D transformationScaleReflectionShear(切变)Rotation around originTranslationReverse变换顺序复杂变换的分解 齐次坐标(Homogenous Coordinates)3D transformationScale&TranslationRotation Viewing / Camera t…

Vue 表单优化:下拉框值改变前的确认提示与还原逻辑实现

在开发表单类功能时,我们经常需要对用户的重要操作进行确认提示,以避免误操作导致的数据丢失或错误。本文将通过一个实际案例,介绍如何在 Vue 中实现下拉框值改变前的确认提示,并在用户取消操作时还原原始值。 场景描述 在项目中…

使用mermaid查看cursor程序生成的流程图

一、得到cursor生成的流程图文本 cursor写的程序正常运行后,在对话框输入框中输入诸如“请生成扫雷的代码流程图”,然后cursor就把流程图给生成了,但是看到的还是文本的样子,保留这部分内容待用 二、注册一个Mermaid绘图账号 …

(八)趣学设计模式 之 装饰器模式!

目录 一、 啥是装饰器模式?二、 为什么要用装饰器模式?三、 装饰器模式的实现方式四、 装饰器模式的优缺点五、 装饰器模式的应用场景六、 装饰器模式 vs 代理模式七、 总结 🌟我的其他文章也讲解的比较有趣😁,如果喜欢…

JVM线程分析详解

java线程状态: 初始(NEW):新创建了一个线程对象,但还没有调用start()方法。运行(RUNNABLE):Java线程中将就绪(ready)和运行中(running)两种状态笼统的称为“运行”。 线程对象创建…

毕业项目推荐:基于yolov8/yolo11的野生菌菇检测识别系统(python+卷积神经网络)

文章目录 概要一、整体资源介绍技术要点功能展示:功能1 支持单张图片识别功能2 支持遍历文件夹识别功能3 支持识别视频文件功能4 支持摄像头识别功能5 支持结果文件导出(xls格式)功能6 支持切换检测到的目标查看 二、数据集三、算法介绍1. YO…

DeepSeek 助力 Vue3 开发:打造丝滑的页眉(Header)

前言:哈喽,大家好,今天给大家分享一篇文章!并提供具体代码帮助大家深入理解,彻底掌握!创作不易,如果能帮助到大家或者给大家一些灵感和启发,欢迎收藏关注哦 💕 目录 Deep…

PHP应用程序设计:一个实际的例子(3)

使应用程序适用于网络 如果你正好计划用P H P开发你自己的服务程序(或者其他一些相似的东西),请重新思考一下。你可能已经对这些思想有些迷惑了:实现一个聊天服务程序意味着实现一个网络服务程序。这是我们实际上介绍给大家的东西…

RabbitMQ 的介绍与使用

一. 简介 1> 什么是MQ 消息队列(Message Queue,简称MQ),从字面意思上看,本质是个队列,FIFO先入先出,只不过队列中存放的内容是message而已。 其主要用途:不同进程Process/线程T…

OpenCV给图像添加噪声

操作系统:ubuntu22.04 OpenCV版本:OpenCV4.9 IDE:Visual Studio Code 编程语言:C11 算法描述 如果你已经有了一张干净的图像,并希望通过编程方式向其添加噪声,可以使用 OpenCV 来实现这一点。以下是一个简单的例子&a…

Elasticsearch:使用阿里云 AI 服务进行嵌入和重新排名

作者:来自 Elastic Toms Mura 将阿里云 AI 服务功能与 Elastic 结合使用。 更多阅读,请参阅 “Elasticsearch:使用阿里 infererence API 及 semantic text 进行向量搜索”。 在本文中,我们将介绍如何将阿里云 AI 功能与 Elastics…

管理后台环境配置

后端配置及启动 a. 软件安装 1. Java sdk 1.8 2. maven 3.6 3. intellij IDEA 2024 4. Visual C Redistributable 5. mongodb 7.0 6. mysql 8.0 双击安装:mysql-installer-community-8.0.41.0.msi 版本选择:Full,包括服务器和客户端 …

数字IC低功耗后端设计实现之power gating和isolation技术

考虑低功耗设计需求,下图中间那个功能模块是需要做power domain的,即这个模块需要插MTCMOS。需要开启时,外面的VDD会和这个模块的LOCAL VDD形成通路,否则就是断开即power off状态。 这些低功耗设计实现经验,你真的懂了…

【网络编程】几个常用命令:ping / netstat / xargs / pidof / watch

ping:检测网络联通 1. ping 的基本功能2. ping 的工作原理3. ping 的常见用法4. ping 的输出解释5. ping 的应用场景6. 注意事项 netstat:查看网络状态 1. netstat 的基本功能2. 常见用法3. 示例4. 输出字段解释5. netstat 的替代工具6. 注意事项 xargs&…

sqlilab 46 关(布尔、时间盲注)

sqlilabs 46关(布尔、时间盲注) 46关有变化了,需要我们输入sort,那我们就从sort1开始 递增测试: 发现测试到sort4就出现报错: 我们查看源码: 从图中可看出:用户输入的sort值被用于查…

《Effective Objective-C》阅读笔记(下)

目录 内存管理 理解引用计数 引用计数工作原理 自动释放池 保留环 以ARC简化引用计数 使用ARC时必须遵循的方法命名规则 变量的内存管理语义 ARC如何清理实例变量 在dealloc方法中只释放引用并解除监听 编写“异常安全代码”时留意内存管理问题 以弱引用避免保留环 …

穷举vs暴搜vs深搜vs回溯vs剪枝(典型算法思想)—— OJ例题算法解析思路

回溯算法的模版 void backtrack(vector<int>& path, vector<int>& choice, ...) {// 满⾜结束条件if (/* 满⾜结束条件 */) {// 将路径添加到结果集中res.push_back(path);return;}// 遍历所有选择for (int i 0; i < choices.size(); i) {// 做出选择…

【Java项目】基于Spring Boot的校园博客系统

【Java项目】基于Spring Boot的校园博客系统 技术简介&#xff1a;采用Java技术、Spring Boot框架、MySQL数据库等实现。 系统简介&#xff1a;校园博客系统是一个典型的管理系统&#xff0c;主要功能包括管理员&#xff1a;首页、个人中心、博主管理、文章分类管理、文章信息…