DeepSeek开源周Day2:DeepEP - 专为 MoE 模型设计的超高效 GPU 通信库

项目地址:https://github.com/deepseek-ai/DeepEP
开源日历:2025-02-24起 每日9AM(北京时间)更新,持续五天 (2/5)!

引言

在大模型训练中,混合专家模型(Mixture-of-Experts, MoE)因其动态路由和高效计算特性备受关注。然而,随着模型规模的扩大,GPU 间的数据通信成为关键瓶颈——尤其是在专家并行(Expert Parallelism, EP)场景中,数据需要在多个 GPU 间高效分发与合并。传统通信库往往难以兼顾高吞吐与低延迟,而 DeepEP 的诞生正是为了解决这一难题。


核心功能与设计理念

1. 什么是 DeepEP?

DeepEP 是由 DeepSeek 开源的高性能通信库,专为 MoE/EP 场景设计。其核心目标是通过优化 GPU 间数据传输,实现:

  • 训练加速:提升多 GPU 协作效率
  • 推理降延迟:支持实时推理任务(如 ChatGPT)
  • 资源高效利用:减少 GPU 闲置时间

2. 技术亮点解析

(1)域间带宽优化

针对 MoE 的非对称通信场景(如 NVLink 域到 RDMA 域)深度优化:

  • NVLink(节点内 GPU 互联):带宽达 160 GB/s
  • RDMA(跨节点 GPU 互联):带宽达 50 GB/s
    通过定制内核实现数据转发路径优化,避免带宽浪费。
(2)低精度计算支持
  • FP8 分发 + BF16 合并:在保证精度的同时减少 50% 显存占用
  • 动态精度切换:适应不同阶段的计算需求
(3)通信-计算重叠


通过 Hook 机制实现:

  • 前向传播时后台预加载数据
  • 反向传播时异步传输梯度
    关键优势:零额外 SM 资源占用,最大化 GPU 利用率

性能实测

测试环境

  • 硬件:NVIDIA H800 GPU + CX7 InfiniBand 400Gb/s RDMA 网卡
  • 软件:CUDA 12.3 + PyTorch 2.1

性能数据

常规模式(训练/预填充推理)
场景通信类型吞吐量
节点内(8卡)NVLink153 GB/s
跨节点(64卡)RDMA46 GB/s
低延迟模式(推理生成)
专家数延迟RDMA 带宽
8163 μs46 GB/s
128192 μs39 GB/s

注:在 128 token 批处理下,延迟仅增加 18%,展现极强的扩展性


架构设计与关键技术

1. 分层通信模型

  • 分发阶段:通过原子操作动态分配 token 到专家
  • 组合阶段:基于元数据快速聚合结果

2. 推理优化黑科技

def low_latency_dispatch(hidden_states, topk_idx):# 后台启动 RDMA 传输recv_hidden, hook = _buffer.low_latency_dispatch(...)# 立即返回控制权,计算与传输并行return recv_hidden, hook

通过 纯 RDMA 传输 + 双缓冲机制,实现:

  • 163 μs 端到端延迟
  • 零 CUDA 核占用

快速入门指南

1. 环境要求

组件版本要求
GPUHopper 架构(H100/H800)
Python3.8+
CUDA12.3+
PyTorch2.1+
网络NVLink + RDMA
  • CUDA安装指南
  • GPU-pytorch 安装指南

2. 安装步骤

# 安装定制版 NVSHMEM
git clone https://github.com/NVIDIA/nvshmem
cd nvshmem && git apply DeepEP/third-party/nvshmem.patch
make -j 16 && make install# 安装 DeepEP
NVSHMEM_DIR=/path/to/nvshmem python setup.py install

3. 基础使用示例

import deep_ep# 初始化通信缓冲区
buffer = deep_ep.Buffer(group=dist.group.WORLD,num_nvl_bytes=1e9,  # NVLink 缓冲区 1GBnum_rdma_bytes=2e9   # RDMA 缓冲区 2GB
)# MoE 分发数据
recv_data, metadata = buffer.dispatch(input_tensor, expert_indices, num_experts=64
)# 执行专家计算
expert_output = experts[metadata.expert_id](recv_data)# 合并结果
combined_result = buffer.combine(expert_output)

高级调优建议

1. 网络配置优化

参数推荐值说明
​NVSHMEM_IB_SL​1-3隔离不同类型流量
自适应路由高负载时启用避免网络拥塞
拥塞控制关闭DeepSeek 实测无显著影响

2. SM 资源分配

# 设置 24 个 SM 专供通信
Buffer.set_num_sms(24)

通过动态调整 SM 数量,平衡计算与通信资源。


应用场景与案例

1. 千卡级训练加速

在 2048 卡集群中:

  • 线性扩展效率 >92%
  • 训练吞吐量提升 3.8 倍(对比 Megatron-LM)

2. 实时推理服务

  • 70B 参数 MoE 模型
  • 单请求延迟 <200 ms(端到端)
  • 吞吐量 1200 token/s

注意事项

  1. 硬件限制:目前仅支持 Hopper 架构 GPU
  2. PTX 指令:使用未公开指令 ld.global.nc.L1::no_allocate​ 实现极致性能,可通过 DISABLE_AGGRESSIVE_PTX_INSTRS=1​ 禁用
  3. 缓冲区管理:低延迟模式需预留更大 RDMA 缓冲区

开源生态

  • GitHub Star:开源 3 小时即破 2k
  • 生态整合:vLLM 等框架正在适配
  • 许可证:核心代码 MIT 许可,NVSHMEM 部分遵循 NVIDIA SLA

参考引用:

  1. Github - DeepEP
  2. 开源周第二天 - DeepEP
  3. DeepEP 详解,GPU压榨计划启动!
  4. DeepSeek开源周第二天-DeepEP
  5. DeepSeek最新开源DeepEP技术深入分析

专业术语解释

  • 混合专家模型(Mixture-of-Experts, MoE)
    一种将复杂任务分配给多个专家模块进行处理的模型架构。类似于一个大型项目被分解给多个专业团队分别完成。
  • 专家并行(Expert Parallelism, EP)
    一种在模型训练中多个专家模块同时进行计算的模式。类似于多个工作小组同时开展不同部分的工作。
  • 非对称通信场景
    指通信双方在数据传输量、传输方向或性能要求等方面存在差异的情况。类似于两人交流时一方说得多另一方说得少。
  • NVLink
    用于节点内 GPU 互联的高速通信技术,具有高带宽。类似于房间内不同家具之间的快速通道。
  • RDMA
    一种跨节点 GPU 互联的通信技术。类似于不同房间之间的快捷通道。
  • 数据转发路径优化
    对数据传输的路径进行改进以提高效率和减少浪费。类似于优化物流运输的路线。
  • FP8 分发 + BF16 合并
    数据分发和合并时采用的不同精度格式,以平衡精度和资源占用。类似于根据物品的重要性选择不同大小的盒子来装。
  • 通信-计算重叠
    让数据通信和计算过程同时进行,以提高效率。类似于一边做饭一边收拾厨房。
  • 分层通信模型
    将通信过程分为不同层次进行处理和优化的模型。类似于把一个大工程分为不同的施工阶段。
  • 双缓冲机制
    使用两个缓冲区交替工作来提高数据传输效率。类似于两个工人交替工作,一个工作时另一个准备。
  • SM 资源
    指 GPU 中的流多处理器(Streaming Multiprocessor)相关的资源。类似于工厂里的生产车间资源。

DeepEP 的推出标志着 MoE 训练进入新纪元。通过硬件级通信优化,它成功将 GPU 集群的潜力压榨到极致——正如网友所言:"这才是真正的 GPU 起飞!"。随着生态的完善,我们有理由期待更多千亿级模型将借此突破训练效率的边界。

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

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

相关文章

HTTP学习——————(四)TLS等加密算法

前文学习&#xff1a; 一、二、三 学习来源网站 &#xff1a; 极客时间 TLS 目的&#xff1a;身份验证、保密性、完整性 解决问题&#xff1a; Record记录协议——对称加密 Handshake握手协议———1.验证通讯双方身份 2.交换加解密安全套件 3.协商加密参数 有密钥交换算法…

FastExcel vs EasyExcel vs Apache POI:三者的全面对比分析

一、核心定位与历史沿革 Apache POI&#xff08;1990s-&#xff09; 作为Java生态中最古老的Excel处理库&#xff0c;提供对.xls/.xlsx文件的全功能支持。其核心价值在于对Excel规范的完整实现&#xff0c;包括单元格样式、公式计算、图表操作等深度功能。但存在内存消耗大&…

辛格迪客户案例 | 鼎康生物电子合约系统(eSign)项目

01 案例企业 鼎康(武汉)生物医药有限公司于2013年06月19日成立 &#xff0c;是一家总部位于湖北武汉的CDMO公司&#xff0c;坚持以客户为中心&#xff0c;以及时、经济和高质量为服务导向。鼎康生物拥有先进的150,000平方英尺的生产厂房&#xff0c;生产设施位于中国武汉的Bio…

multer 依赖详解

multer 是一个用于处理 multipart/form-data 类型表单数据的 Node.js 中间件&#xff0c;主要用于文件上传。它基于 busboy 构建&#xff0c;使用起来非常方便。 一、安装 npm install multer 二、基本使用 const express require("express");const multer req…

点云配准技术的演进与前沿探索:从传统算法到深度学习融合(4)

4、点云配准面临的挑战与应对策略 4.1 点云配准面临的主要挑战 在点云配准的实际应用中&#xff0c;尽管已经取得了显著的研究成果&#xff0c;但仍然面临着诸多复杂而严峻的挑战&#xff0c;这些挑战严重制约了点云配准技术在更多领域的广泛应用和深入发展。 在自动驾驶场景…

PostgreSQL10 物理流复制实战:构建高可用数据库架构!

背景 PostgreSQL 10 在高可用架构中提供了物理复制&#xff0c;也称为流复制&#xff08;Streaming Replication&#xff09;&#xff0c;用于实现实例级别的数据同步。PostgreSQL 复制机制主要包括物理复制和逻辑复制&#xff1a;物理复制依赖 WAL 日志进行物理块级别的同步&…

⭐算法OJ⭐位操作实战【计数】(C++ 实现)

191. Number of 1 Bits Given a positive integer n, write a function that returns the number of set bits in its binary representation (also known as the Hamming weight). int hammingWeight(uint32_t n) {int count 0;while (n) {count n & 1; // 检查最低位…

从二维随机变量到多维随机变量

二维随机变量 设 X X X和 Y Y Y是定义在同一样本空间 Ω \varOmega Ω上的两个随机变量&#xff0c;称由它们组成的向量 ( X , Y ) (X, Y) (X,Y)为二维随机变量&#xff0c;亦称为二维随机向量&#xff0c;其中称 X X X和 Y Y Y是二维随机变量的分量。 采用多个随机变量去描述…

RabbitMQ系列(一)架构解析

RabbitMQ 架构解析 RabbitMQ 是一个基于 AMQP 协议的开源消息中间件&#xff0c;其核心架构通过多组件协作实现高效、可靠的消息传递。以下是其核心组件与协作流程的详细说明&#xff1a; 一、核心组件与功能 Broker&#xff08;消息代理服务器&#xff09; RabbitMQ 服务端核…

Ubuntu 下 nginx-1.24.0 源码分析 - ngx_list_init

ngx_list_init 定义在 src\core\ngx_list.h static ngx_inline ngx_int_t ngx_list_init(ngx_list_t *list, ngx_pool_t *pool, ngx_uint_t n, size_t size) {list->part.elts ngx_palloc(pool, n * size);if (list->part.elts NULL) {return NGX_ERROR;}list->par…

Linux切换Python版本

1、更新apt sudo apt update2、查询python安装路径 which python 或者which python33、查询安装版本 # 查看所有以 "python" 开头的命令&#xff08;包括版本号&#xff09; ls -l 安装路径* 例如 ls -l /usr/bin/python*4、修改软连接 udo unlink /usr/bin/pyt…

Spring Cloud之注册中心之Nacos的使用

目录 Naacos 服务注册/服务发现 引⼊Spring Cloud Alibaba依赖 引入Nacos依赖 引入Load Balance依赖 配置Nacos地址 服务端调用 启动服务 Naacos Nacos是Spring Cloud Alibaba的组件, Spring Cloud Alibaba遵循Spring Cloud中定义的服务注册, 服务发现规范. 因此使⽤Na…

使用通义万相Wan2.1进行视频生成

使用通义万相Wan2.1进行视频生成 源代码准备运行环境准备创建Python虚拟环境并激活安装依赖包 模型下载生成视频官网的视频生成例子简单描述场景视频生成示例详细描述场景视频生成示例 最近通义万相开源了其视频生成模型。模型有两个版本&#xff0c;一个是1.3B的&#xff0c;一…

鸿蒙HarmonyOS 开发简介

鸿蒙开发入门教程 一、技术简介 鸿蒙操作系统&#xff08;HarmonyOS&#xff09;是面向万物互联时代的全场景分布式操作系统&#xff0c;具备分布式软总线、分布式数据管理、分布式任务调度等核心能力&#xff0c;能让设备间实现无缝连接与协同&#xff0c;为用户提供统一、流…

docker和containerd从TLS harbor拉取镜像

私有镜像仓库配置了自签名证书&#xff0c;https访问&#xff0c;好处是不需要处理免费证书和付费证书带来的证书文件变更&#xff0c;证书文件变更后需要重启服务&#xff0c;自签名证书需要将一套客户端证书存放在/etc/docker/cert.d目录下&#xff0c;或者/etc/containerd/c…

linux ununtu通过nginx-1.6.2.tar.gz安装nginx并安装在自定义目录XXX下 的步骤

Ubuntu 下通过源码安装 Nginx 1.6.2 到自定义目录 /home/aot/nginx 的步骤 以下是将 Nginx 1.6.2 源码包离线安装到自定义目录的详细流程&#xff0c;包含依赖管理、编译配置和服务管理&#xff1a; 一、准备工作 1. 下载源码包和依赖&#xff08;需联网环境准备&#xff09;…

C++ 变量的输入输出教程

一、变量的基本概念 在 C 中&#xff0c;变量是用于存储数据的命名内存位置。在使用变量之前&#xff0c;需要先声明它的类型和名称&#xff0c;这样编译器才能为其分配适当大小的内存空间。例如&#xff1a; int age; // 声明一个整型变量 age double salary; // 声明一个…

React底层常见的设计模式

在React中&#xff0c;常见的设计模式为开发者提供了结构化和可重用的解决方案&#xff0c;有助于提高代码的可维护性和可扩展性。以下是对React中几种常见设计模式的详细解析&#xff0c;并附上示例代码和注释&#xff1a; 1. 容器组件与展示组件模式&#xff08;Container/P…

【MATLAB例程】三维下的IMM(交互式多模型),模型使用CV(匀速)和CA(匀加速)

给出三维下的交互式多模型&#xff08;IMM&#xff09;matlab例程&#xff0c;模型使用匀速运动CV和匀加速运动CA&#xff0c;滤波使用EKF&#xff08;扩展卡尔曼滤波&#xff09; 文章目录 代码运行结果程序结构 代码讲解模型定义&#xff1a;轨迹生成&#xff1a;IMM核心流程…

物理内存组织与分配的核心概念

在 Linux 内核内存管理&#xff08;尤其是 Buddy System 伙伴系统&#xff09;中&#xff0c;node、zone、type 和 order 是描述物理内存组织与分配的核心概念。以下是它们的详细解释&#xff1a; 1. Node&#xff08;NUMA 节点&#xff09; 定义&#xff1a; 在 NUMA&#xf…