当前位置: 首页 > article >正文

DeepSeek开源Day4:DualPipeEPLB技术详解

img

2 月 24 日,DeepSeek 启动 “开源周”,第四个开源的代码库为 DualPipe 与 EPLB(一下发布了两个)。DualPipe 与 EPLB 依然使用了大量与 Hopper 架构绑定的技术。
DualPipe 是由 DeepSeek-AI 团队开发的一种双向流水线并行通信算法,主要用于优化大模型(如 DeepSeek-V3/R1)的数据交互和训练效率。
EPLB (Expert Parallelism Load Balancer,专家并行负载均衡器)则主要用于优化混合专家模型(MoE)的分布式部署,特别是在 DeepSeek-V3 和 DeepSeek-R1 等大规模语言模型的训练中。
DualPipe 负责提升通信效率,确保信道均衡;EPLB 则负责优化专家副本分配,确保不同 GPU 节点的负载均衡。
相对前两天的 FlashMLA 和 DeepGEMM,DualPipe 与 EPLB 更多偏向于工程优化。当然这两者的工程优化也不是大部分团队可以做的。需要对信道优化和推断集群部署有很强的软硬件综合优化能力。
1 DualPipe 与 EPLB 简介
1.1 DualPipe 核心特点
DualPipe 具有以下核心特点:
1)计算与通信重叠DualPipe 的设计目标是最大化集群设备的计算性能,通过在前向传播(Forward)和后向传播(Backward)阶段实现计算与通信的完全重叠,显著减少传统流水线并行中的 “气泡”(Pipeline Bubble,即空闲等待时间)。这对于需要跨节点协作的专家并行(Expert Parallelism)场景尤为重要。
2)双向调度与传统的单向流水线并行不同,DualPipe 采用双向调度策略,从流水线的两端同时输入微批次(Micro-batches),充分利用硬件资源。这种方法在保持计算通信比例恒定的情况下,即使模型规模进一步扩大,也能维持接近零的通信开销。
3)高效扩展性DualPipe 针对跨节点的混合专家模型(MoE)进行了优化,通过减少通信瓶颈,使得大规模分布式训练能够在相对有限的硬件资源(如 H800 GPU)上高效运行。
4)显存优化DualPipe 将模型的最浅层(包括嵌入层)和最深层(包括输出层)部署在同一流水线级别(PP Rank),实现参数和梯度的物理共享,进一步提升内存效率。这种设计减少了高代价的张量并行(Tensor Parallelism)需求。

img

DualPipe 优化(来源:DeepSeek)
1.2 EPLB 核心特点
为保证 MoE 部分不同专家之间的负载均衡,会将共享专家和高负载的细粒度专家在集群的不同 GPU 做多个复制,让 GPU 把更多的热数据(发给共享专家的)跑起来。这个方案就是 EPLB。
EPLB 具有如下核心特点:
1)负载均衡优化EPLB 通过复制高负载专家(Redundant Experts Strategy)并对专家分配进行启发式调整,确保不同 GPU 之间的负载均衡。这种方法解决了专家并行中因专家负载不均导致的计算资源浪费问题。分层负载平衡策略也可用于预填充阶段,具有较小的专家并行规模。
2)跨节点通信优化在 DeepSeek-V3 的技术报告中提到,EPLB 尝试将同一组的专家尽量分配到同一节点,减少跨节点的数据传输开销。这种分组限制路由(Group-Limited Expert Routing)策略显著提升了分布式训练的效率。
3)高效可扩展性EPLB 支持灵活的专家复制和分配,能够适配不同规模的模型和硬件配置。例如,在一个包含 2 个节点、每个节点 4 个 GPU 的集群上,EPLB 可以动态规划 16 个个专家副本的分配。

img

12 个专家在 2 节点的分布示例(来源:DeepSeek)
4)开源与可重现性EPLB 作为 DeepSeek 开源周的一部分发布,提供了一个易于复现的负载均衡方案,方便研究者和开发者在自己的 MoE 训练中应用。
2 DualPipe 与 EPLB 架构分析
2.1 DualPipe 架构
DualPipe 的架构基于 Transformer 框架,并针对流水线并行进行了深度优化。其核心思想是将每个计算块(Chunk)细分为多个组件,并在调度中实现高效重叠。具体架构特点包括:
1)细粒度分块每个计算块被划分为四个部分:注意力机制(Attention)、All-to-All 派发(All-to-All Dispatch)、多层感知机(MLP)和 All-to-All 合并(All-to-All Combine)。对于后向传播块,注意力机制和 MLP 进一步细分为输入梯度计算(Backward for Input)和权重梯度计算(Backward for Weights)。
2)双向流水线调度DualPipe 通过双向调度实现微批次的同时处理。例如,在一个包含 8 个流水线级别(PP Ranks)和 20 个微批次的场景中,正向和反向的微批次对称运行,通信阶段被计算阶段完全掩盖。
3)通信优化DualPipe 针对跨节点的 All-to-All 通信(All-to-All Communication)开发了高效内核,充分利用 InfiniBand 和 NVLink 的带宽,结合 PTX 编程减少流式多处理器(SMs)在通信上的占用。
4)FP8 混合精度支持DualPipe 的训练框架支持 FP8 混合精度计算,通过降低精度减少 GPU 显存使用并加速训练,同时保持模型性能。这种低精度训练策略与算法设计紧密结合。

img

DualPipe 技术说明(来源:中存算半导体)
与现有的流水线并行(PP)方法相比,DualPipe 具备以下优势:
1)DualPipe 的流水线气泡更少,信道使用效率更高。
2)DualPipe 将前向和后向传播中的计算和通信重叠,解决了跨节点专家并行(EP)带来的繁重通信开销问题.
3)在确保计算与通信比例恒定的情况下,具有很好的 Scale-out 能力。
2.2 EPLB 架构
EPLB 的架构基于 MoE 模型的专家并行需求,主要包括以下组件:
1)负载均衡算法EPLB 使用基于偏置的动态调整策略(bias-based dynamic adjustment),替代传统的基于辅助损失的负载均衡方法。这种方法通过实时监控每个专家的负载情况,动态分配输入 token,确保均衡性。
2)与 DualPipe 的协同根据 X 上的信息,EPLB 可与 DualPipe(双向流水线重叠技术)结合使用。DualPipe 负责计算与通信的并行优化,而 EPLB 则专注于专家层的负载分布,二者共同提升 MoE 模型的整体性能。
3)模块化设计EPLB 的代码结构具有模块化特点,便于集成到其他 MoE 系统中。它可能包括负载监控模块、动态路由调整模块以及与底层硬件通信的接口。
4)支持大规模并行EPLB 针对多节点、跨 GPU 的训练环境进行了优化,支持 DeepSeek-V3/R1 这样的大模型的分布式部署。

img

EPLB 架构思路说明(来源:中存算半导体)
3 DualPipe 与 EPLB 代码结构分析
3.1 DualPipe 代码结构分析
从 GitHub 仓库 https://github.com/deepseek-ai/DualPipe 的描述来看,该代码库主要是一个 Python 实现的调度算法示例。以下是对其代码结构的初步分析(基于公开信息和常见调度算法实现推测):
调度核心(Scheduler):实现双向流水线调度的逻辑,定义微批次的分配和计算通信重叠的策略。
通信管理(Communication Manager):处理跨节点的 All-to-All 通信,可能包含针对 InfiniBand 或 NVLink 的优化接口。
模型分层(Layer Assignment):实现浅层和深层的物理共享逻辑,优化内存布局。
性能分析(Profiling):提供用于验证计算通信重叠的性能数据生成工具。主要代码包括:
●核心调度算法文件(如 dualpipe.py)。
●通信模块(communication/)、测试用例(tests/)和文档(docs/)。
●配置脚本用于设置流水线级别和微批次数量。

img

3.2 EPLB 代码结构分析
https://github.com/deepseek-ai/EPLB

img

4 DualPipe 与 EPLB 的现状与未来
两者已在 DeepSeek-V3 和 DeepSeek-R1 的训练和部署中得到实际验证,证明其在超大规模 MoE 模型训练 / 部署中的有效性。特别是训练成本低至约 557 万美元,远低于传统大模型(如 Llama-3.1 的数亿美元),显示出其经济性和实用性。
当前两者针对 H800 GPU 优化,未来可能适配更多硬件(如 AMD MI300X 或其他消费级 GPU),提升普适性。
另外 DualPipe 可结合 EPLB(专家并行负载平衡器)进一步优化跨节点专家的动态分配。
优化,未来可能适配更多硬件(如 AMD MI300X 或其他消费级 GPU),提升普适性。
另外 DualPipe 可结合 EPLB(专家并行负载平衡器)进一步优化跨节点专家的动态分配。
DualPipe 与 EPLB 的低成本高效特性可能推动开源 AI 模型的进一步发展,缩小与闭源模型的差距。它为资源有限的团队提供了

相关文章:

DeepSeek开源Day4:DualPipeEPLB技术详解

2 月 24 日,DeepSeek 启动 “开源周”,第四个开源的代码库为 DualPipe 与 EPLB(一下发布了两个)。DualPipe 与 EPLB 依然使用了大量与 Hopper 架构绑定的技术。 DualPipe 是由 DeepSeek-AI 团队开发的一种双向流水线并行通信算法&…...

阿里推出全新推理模型(因果语言模型),仅1/20参数媲美DeepSeek R1

阿里Qwen 团队正式发布了他们最新的研究成果——QwQ-32B大语言模型!这款模型不仅名字萌萌哒(QwQ),实力更是不容小觑!😎 QwQ-32B 已在 Hugging Face 和 ModelScope 开源,采用了 Apache 2.0 开源协议。大家可通过 Qwen C…...

vue实现一个pdf在线预览,pdf选择文本并提取复制文字触发弹窗效果

[TOC] 一、文件预览 1、安装依赖包 这里安装了disjs-dist2.16版本&#xff0c;安装过程中报错缺少worker-loader npm i pdfjs-dist2.16.105 worker-loader3.0.8 2、模板部分 <template><div id"pdf-view"><canvas v-for"page in pdfPages&qu…...

Unity自定义渲染管线(Scriptable Render Pipeline)架构设计与实现指南

一、SRP技术体系概述 1. 核心设计理念 全托管渲染控制&#xff1a;通过C#脚本完全掌控渲染流程 模块化架构&#xff1a;将渲染流程拆分为可组合的RenderPass GPU友好设计&#xff1a;支持CommandBuffer与Compute Shader混合编程 对惹&#xff0c;这里有一个游戏开发交流小组…...

时间复杂度分析与递归,以新南UNSW的COMP2521作业题为例

作者&#xff1a;Smooth&#xff08;连接教育高级讲师&#xff09; 首发于&#xff1a;⁠⁠⁠⁠⁠⁠⁠UNSW学习知识库&#xff08;UNSW Study Wiki&#xff09; 创作时间&#xff1a;2025年3月5日 如何测度算法的时间性能&#xff1f;理论分析Theoretical Analysis 测度算法时…...

RxJS与Redux革命性协同:打造高效、解耦的前端状态管理方案

摘要 本文探讨RxJS与Redux的融合应用&#xff0c;通过真实用户场景揭示其必要性&#xff0c;系统讲解整合策略&#xff0c;从基础到高级涵盖响应式编程优化、异步操作处理、状态流控制等核心主题。提供可落地的架构方案与性能优化技巧&#xff0c;包含10可复用代码示例和20实战…...

蓝桥杯P1259-奇怪的馈赠 (贪心题解)

题目&#xff1a;奇怪的捐赠 题目来源&#xff1a;1.奇怪的捐赠 - 蓝桥云课 题目描述 需要将 100 万&#xff08;1,000,000&#xff09;正好分成若干个 7 的次方形式的数&#xff08;如 7^01, 7^17, 7^249 等&#xff09;&#xff0c;且每种金额&#xff08;即每个 7 的次方…...

todo: 使用融云imserve做登录(android)

使用融云做登录注册思路 注册界面需要name, email, password考虑到融云注册用户的post格式 POST http://api.rong-api.com/user/getToken.json?userId1690544550qqcom&nameIronman这里的userId可以使用用户的email&#xff0c;但是要截断和 . 符号&#xff0c;即1690544…...

如何设置爬虫的User-Agent?

在爬虫开发中&#xff0c;设置合适的 User-Agent 是非常重要的一步。User-Agent 是 HTTP 请求头中的一个字段&#xff0c;用于标识客户端&#xff08;通常是浏览器&#xff09;的类型、版本、操作系统等信息。通过设置 User-Agent&#xff0c;可以模拟正常的浏览器访问行为&…...

C++ 二叉搜索树代码

C 二叉搜索树代码 #include <iostream> using namespace std;template<typename T> struct TreeNode{T val;TreeNode *left;TreeNode *right;TreeNode():val(0), left(NULL), right(NULL){}TreeNode(T x):val(x), left(NULL), right(NULL){} };template<typena…...

OpenAI Whisper:开启语音转文本的智能时代

在人工智能技术飞速发展的今天,OpenAI推出的Whisper语音识别系统正悄然改变着人类与机器的交互方式。作为一款开源的AI驱动语音转文本工具,Whisper凭借其跨语言能力、高精度识别和灵活的生态系统,成为开发者和普通用户共同追捧的技术标杆。 核心技术与突破 Whisper基于深度…...

基于CSDN资源,搭建AI赋能农业典型场景落地方案

农业场景&#xff0c;不但是信息化、自动化等薄弱的产业&#xff0c;更是AI落地困难的场景。基于此&#xff0c;想通过这篇文章查找一个CSDN相关资源&#xff0c;论证一下AI赋能农业三个典型场景的实现思路。 场景1&#xff1a;水质-土壤智能调控 **痛点&#xff1a;**水质恶…...

python量化交易——金融数据管理最佳实践——使用qteasy大批量自动拉取金融数据

文章目录 使用数据获取渠道自动填充数据QTEASY数据拉取功能数据拉取接口refill_data_source()数据拉取API的功能特性多渠道拉取数据实现下载流量控制实现错误重试日志记录其他功能 qteasy是一个功能全面且易用的量化交易策略框架&#xff0c; Github地址在这里。使用它&#x…...

RoboBrain:从抽象到具体的机器人操作统一大脑模型

25年2月来自北大、北京智源、中科院自动化所等的论文“RoboBrain: A Unified Brain Model for Robotic Manipulation from Abstract to Concrete”。 目前的多模态大语言模型&#xff08;MLLM&#xff09; 缺少三项必备的机器人大脑能力&#xff1a;规划能力&#xff0c;将复杂…...

DeepSeek本地接口调用(Ollama)

前言 上篇博文&#xff0c;我们通过Ollama搭建了本地的DeepSeek模型&#xff0c;本文主要是方便开发人员&#xff0c;如何通过代码或工具&#xff0c;通过API接口调用本地deepSeek模型 前文&#xff1a;DeepSeek-R1本地搭建_deepseek 本地部署-CSDN博客 注&#xff1a;本文不仅…...

数据库索引的作用:提升数据检索效率的关键

在数据库管理系统中&#xff0c;数据如同浩瀚海洋中的宝藏&#xff0c;如何快速准确地找到所需信息&#xff0c;成为了一个关键问题。这时候&#xff0c;数据库索引就如同一张精确的航海图&#xff0c;指引着我们高效地定位数据。那么&#xff0c;数据库索引究竟是什么&#xf…...

高效便捷的 Spring Boot 通用控制器框架

✨高效便捷的 Spring Boot 通用控制器框架✨ 一、简介 在 Java 开发中&#xff0c;重复性的基础接口编写工作常令人头疼。本框架基于 Spring Boot 与 MyBatis-Plus&#xff0c;精心构建通用控制器类BaseController&#xff0c;旨在为开发者排忧解难&#xff0c;极大减少繁琐的…...

SQL_语法

1 数据库 1.1 新增 create database [if not exists] 数据库名; 1.2 删除 drop database [if exists] 数据库名; 1.3 查询 (1) 查看所有数据库 show databases; (2) 查看当前数据库下的所有表 show tables; 2 数据表 2.1 新增 (1) 创建表 create table [if not exists…...

在 CentOS 上,常用几种方法来确保 Python 脚本在断开终端后继续运行

在 CentOS 上&#xff0c;你可以使用以下几种方法来确保 Python 脚本在断开终端后继续运行&#xff1a; 1. 使用 nohup 命令 nohup 命令可以让进程在终端关闭后继续运行。 nohup python main.py > output.log 2>&1 &nohup&#xff1a;忽略挂断信号&#xff0c…...

全面回顾复习——C++语法篇1(基于牛客网C++题库)

注&#xff1a;牛客网允许使用万能头文件#include<bits/stdc.h> 1、求类型长度——sizeof&#xff08;&#xff09;函数 2、将浮点数四舍五入——round&#xff08;&#xff09;函数——前面如果加上static_cast会更安全一些 在C语言中可以使用printf&#xff08;“.0l…...

一、数据库 MySQL 基础学习 (上)

一、数据库的概念 DB 数据库&#xff08;database&#xff09;&#xff1a;存储数据的“仓库”&#xff0c;保存一系列有组织的数据 DBMS&#xff1a;数据库管理系统(Database Management System)。数据库是通过 DBMS 创建和操作的容器 创建的 DBMS&#xff1a; MySQL、Oracl…...

基于Django创建一个WEB后端框架(DjangoRestFramework+MySQL)流程

一、Django项目初始化 1.创建Django项目 Django-admin startproject 项目名 2.安装 djangorestframework pip install djangorestframework 解释: Django REST Framework (DRF) 是基于 Django 框架的一个强大的 Web API 框架&#xff0c;提供了多种工具和库来构建 RESTf…...

AutoGen学习笔记系列(七)Tutorial - Managing State

这篇文章瞄准的是AutoGen框架官方教程中的 Tutorial 章节中的 Managing State 小节&#xff0c;主要介绍了如何对Team内的状态管理&#xff0c;特别是如何 保存 与 加载 状态&#xff0c;这对于Agent系统而言非常重要。 官网链接&#xff1a;https://microsoft.github.io/auto…...

Redis渐进式遍历数据库

目录 渐进式遍历 数据库 渐进式遍历 keys*可以一次性的把整个redis中所有key都获取到&#xff0c;这个操作是非常危险的&#xff0c;因为可能一下获取到太多的key&#xff0c;阻塞redis服务器。要想很好的获取到所有的key&#xff0c;又不想出现卡死的情况&#xff0c;就可以…...

机器学习中的线性代数:奇异值分解 SVD

线性代数 奇异值分解&#xff08;SVD&#xff09; 参考资料&#xff1a; 超详细&#xff01;彻底搞懂矩阵奇异值分解&#xff08;SVD&#xff09;本质计算应用&#xff01;_哔哩哔哩_bilibili 非常好的视频&#xff0c;本文内容主要来自于该视频&#xff0c;在此表示感谢&#…...

【每日八股】计算机网络篇(三):IP

目录 DNS 查询服务器的基本流程DNS 采用 TCP 还是 UDP&#xff0c;为什么&#xff1f;默认使用 UDP 的原因需要使用 TCP 的场景&#xff1f;总结 DNS 劫持是什么&#xff1f;解决办法&#xff1f;浏览器输入一个 URL 到显示器显示的过程&#xff1f;URL 解析TCP 连接HTTP 请求页…...

6. PromQL的metric name(在node exporter复制下来交给AI解释的)

目录 前言&#xff1a; Go 运行时指标&#xff1a; Go 内存统计指标&#xff1a; CPU 指标&#xff1a; 内存指标&#xff1a; 磁盘指标&#xff1a; 网络指标&#xff1a; 系统指标&#xff1a; 前言&#xff1a; 写这个得目的是为了后续方便查询&#xff0c;因为在pro…...

基于单片机的速度里程表设计(论文+源码)

1 系统方案 本次智能速度里程表的总体架构如图2-1所示&#xff0c;在硬件上包括了STC89C52单片机&#xff0c;电机&#xff0c;显示模块&#xff0c;报警模块&#xff0c;DS1302时钟模块&#xff0c;超速检测模块&#xff0c;按键等等。在软件设计功能的功能上&#xff0c;按下…...

计算机毕业设计Python+Django+Vue3微博数据舆情分析平台 微博用户画像系统 微博舆情可视化(源码+ 文档+PPT+讲解)

温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 作者简介&#xff1a;Java领…...

nvidia驱动升级-ubuntu 1804

升级 1.从官网下载*.run驱动文件 2.卸载原始驱动 sudo /usr/bin/nvidia-uninstall sudo apt-get --purge remove nvidia-\* # 可能不需要加-\ sudo apt-get purge nvidia-\* # 可能不需要加-\ sudo apt-get purge libnvidia-\* # 可能不需要…...