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

在大模型时代,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 的开源震撼,让我们共同期待更多激动人心的创新成果!

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

(IDE接入DeepSeek)简单了解DeepSeek接入辅助开发与本地部署建议

重点:IDE接入DeepSeek是否收费 收费! 本文章主要是为了给小白避雷,目前很多文章告诉大家怎么接入DeepSeek,但是并未告知大家是否收费。如果是想白嫖的,就可以不用去接入了。 一、引言 最近爆火的AI人工智能工具DeepSe…

FPGA开发时序图绘制

开始的时候画时序图都是拿 visio 硬连,但是那个线宽太难统一了,丑不拉几的,遂学习 waveform 语法使用代码来画时序图。 开始 Vscode 中安装 waveform render 或者在 GitHub 搜索 wavedrom 安装即可。由于 vscode 是我常用的编辑器&#xff…

windows下安装pyenv+virtualenv+virtualenvwrapper

1、下载pyenv 进入git官网,打包下载zip到本地 2、解压到安装目录 解压下载好的pyenv-win-master.zip到自己的安装目录,如D:\Program Files 3、配置环境变量 右击桌面 此电脑 --> 属性 --> 高端系统设置 --> 环境变量 --> 新建系统变量…

自动化设备对接MES系统找DeepSeek问方案

项目需要现场的PLC设备HTTP协议JSON格式的方式对接MES系统平台,于是试了一下: 找到的相关资源链接在这里。

李代数(Lie Algebras)与Attention:深度学习中的数学之美

李代数与Attention:深度学习中的数学之美 引言 作为一名深度学习研究者,您一定对Transformer模型和其中的注意力机制(Attention)不陌生。Attention通过查询(Query)、键(Key)和值&a…

OpenCV给图像添加噪声

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

vscode下载安装教程(附安装包)vscode图文安装教程最新版

文章目录 一、vscode下载二、vscod安装教程1.启动vscode安装程序:2.应对提示:3.接受协议:4.更改vscode安装路径:5.推进安装vscode:6.创建vscode快捷方式:7.开始安装vscode:8.完成vscode安装&…

深度解读 Chinese CLIP 论文:开启中文视觉对比语言预训练

目录 论文概述1.论文摘要2.论文脑图3.论文创新3.1模型构建3.2训练方法3.3数据构建3.4部署优化 4.模型架构 论文解析1. 引言2. 方法2.1数据说明2.2预训练方法2.2.1模型初始化方法2.2.2两阶段预训练方法 2.3预训练细节2.3.1模型初始化2.3.2第一阶段预训练2.3.3第二阶段预训练2.3.…

【开源】低代码 C++程序框架,Linux多线程程序

大家好,欢迎来到停止重构的频道。 本期介绍我们新的C低代码框架:Bees,用于编写Linux/Unix的多线程程序。 低代码框架一般是不会对C程序下手的,因为C程序一般是比较复杂的程序,光是多线程同步就够头疼的了。 但是我们…

重新审视 ChatGPT 和 Elasticsearch:第 2 部分 - UI 保持不变

作者:来自 Elastic Jeff Vestal 本博客在第 1 部分的基础上进行了扩展,介绍了基于 RAG 的搜索系统的功能齐全的 Web UI。最后,你将拥有一个将检索、搜索和生成过程结合在一起的工作界面,同时使事情易于调整和探索。 不想读完整个内…

点云 PCL 滤波在自动驾驶的用途。

1.直通滤波 2.体素滤波、 2.1 分类:VoxelGrid(求体素的重心又称质心点)和ApproximateVoxelGrid(求体素的中心点)两种体素滤波器, 2.2 衍生:此外衍生了改进体素滤波(求距离重心最近…

人工智能 pytorch篇

pytorch是一个深度学习框架,他封装了张量(Tensor),Pytorch中的张量就是元素为同一种数据类型的多维矩阵。在Pytorch中,张量以类的形式封装起来,对张量的一些运算、处理的方法被封装在类中。 pytorch的安装…

Cherno 游戏引擎笔记(91~111)

好久不见! 个人库的地址:(GitHub - JJJJJJJustin/Nut: The game_engine which learned from Cherno),可以看到我及时更新的结果。 -------------------------------Saving & Loading scene-----------------------…

DeepSeek行业应用实践报告-智灵动力【112页PPT全】

DeepSeek(深度搜索)近期引发广泛关注并成为众多企业/开发者争相接入的现象,主要源于其在技术突破、市场需求适配性及生态建设等方面的综合优势。以下是关键原因分析: 一、技术核心优势 开源与低成本 DeepSeek基于开源架构&#xf…

项目8:信用违约预测-集成学习

目录 背景说明 项目介绍 导入模块 数据加载 分析与处理数据 划分数据集 使用随机森林创建并训练模型 通过参数搜索和过采样,缓解标签不平衡问题 小结 背景说明 风险已经成为了今年金融市场的重要主题之一,银行作为贷方,随时都面临着借贷者违约…

一文了解:部署 Deepseek 各版本的硬件要求

很多朋友在咨询关于 DeepSeek 模型部署所需硬件资源的需求,最近自己实践了一部分,部分信息是通过各渠道收集整理,so 仅供参考。 言归正转,大家都知道,DeepSeek 模型的性能在很大程度上取决于它运行的硬件。我们先看一下…

Redis分布式锁故障处理:当Redis不可用时的应对策略

Redis分布式锁故障处理:当Redis不可用时的应对策略 在分布式系统中,Redis因其高性能和丰富的特性常被用于实现分布式锁。但当加锁过程中Redis服务不可用时,系统将面临严重挑战。本文将深入探讨这一问题,并提供多维度解决方案。 目…

GO 进行编译时插桩,实现零码注入

Go 编译时插桩 Go 语言的编译时插桩是一种在编译阶段自动注入监控代码的技术,目的是在不修改业务代码的情况下,实现对应用程序的监控和追踪。 基本原理 Go 编译时插桩的核心思想是通过在编译过程中对源代码进行分析和修改,将监控代码注入到…

vue3中ref和reactive响应式数据、ref模板引用(组合式和选项式区别)、组件ref的使用

目录 Ⅰ.ref 1.基本用法:ref响应式数据 2.ref模板引用 3.ref在v-for中的模板引用 ​4.ref在组件上使用 ​5.TS中ref数据标注类型 Ⅱ.reactive 1.基本用法:reactive响应式数据 2.TS中reactive标注类型 Ⅲ.ref和reactive的使用场景和区别 Ⅳ.小结…

计算机毕业设计SpringBoot+Vue.js视频网站系统(源码+文档+PPT+讲解)

温馨提示:文末有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:文末有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:文末有 CSDN 平台官方提供的学长联系方式的名片! 作者简介:Java领…