Deepseek开源周之四——DualPipe & EPLB

Background

公元2025年2月27号,DeepSeek公司开源周第四天,开源了DualPipe和EPLB两项技术。两者的分别是"流水双向并行算法"和"专家并行负载均衡器",两者的目标其实只有一个,就是提升大模型跨GPU训练的效率。

“不是是什么而是为什么”,为什么模型训练需要跨GPU,显而易见有以下两点原因:

  1. 大模型过大,一个GPU的显存放不下(Deepseek模型本地部署的显存就需要536GB, 而英伟达的A100的显存也只有80GB)
  2. 训练数据过多,单线计算效率太低

所以跨GPU训练就成为必然的趋势,为了充分利用硬件资源,自然会想到并行。从问题出发自然会想到可以将数据集/模型进行拆分之后给到不同的GPU训练,这就自然引入了两种常用的并行方式——数据并行,流水并行。除此之外,基于深度神经网络中基本计算都是可拆解的矩阵乘法的性质,还有模型并行

  1. 数据并行(Data Parallelism, DP): 在不同的GPU上运行同一批数据的不同子集
  2. 流水并行(Pipeline Parallelism, PP): 在不同的GPU上运行模型的不同层
  3. 模型/张量并行(Tensor Parallelism, TP): 包含张量并行,将单个数学运算(如矩阵乘法)拆分到不同的GPU上运行
  4. 专家并行(Expert Parallelism, EP): 基于Moe的特殊策略
  5. 混合并行: 结合上述两个及以上,实际运用中最多也最有效

而Deepseek采用的正是一种混合并行的策略,DualPipe与EPLB则分别是对其中的 数据+流水并行 和 专家并行 做了优化,从而提高了模型的训练效率。

DualPipe

流水并行优化

  1. 无并行 Naive

    • 如前所述,流水并行涉及到将模型的层次(这其实得益于Transformer结构层与层之间相对独立)拆解开,分到多个GPU上进行训练。最简单的版本,就像这样,三个GPU分别负责一个三层模型的每一层,前向传播算完了就交给下一层,然后得到Loss之后在逐层反向传播回来

    在这里插入图片描述

    但显而易见,同一时间中只有一个GPu在干活,大量的计算资源都浪费了(灰色部分),GPU等待的这部分也被称为气泡或死区

  2. Gpipe

    • 看到这个阶梯图,不难想到CPU的取址-译码-计算-访存-写回,自然就会将一次传入的数据进行划分,变成流水线执行

    在这里插入图片描述

    能明显地看到,气泡的占比小了很多

  3. 1F1B

    • 它的全称即One Forward One Backward,这也是相对于之前的F-then-B来的,即在前向传播没有完的时候便开始一些块的反向传播,具体是算好一个反向一个

在这里插入图片描述

相比于Gpipe,其实气泡并没有减少,但是核心在于GPU需要存储的中间量变少了,因为F-then-B的过程中,每个GPU都需要保留之前所有前向传播的中间量,但是1F1B则可以在反向传播之后就可以把之前的结果释放掉了
  1. PipeDream

    • 与Gpipe的F-then-B + 同步后向更新相比,PipeDream采用了异步后向更新 + 1F1B的策略,同时在反向的气泡中同样继续填充了正向过程
      在这里插入图片描述
  2. DualPipe

    • DualPipe的双向,来自于神经网络与CPU过程中的本质不同,因为Transformer各层结构相同,也就是说将模型倒过来也是一样的运行,所以两端可以同时正反向。简单来说,之前是一个W模型,而现在则在M的基础上叠加了W,从而进一步降低了气泡率

    在这里插入图片描述

    基于Deepseek的结果,相比于1F1B,DualPipe的气泡占比下降了50%

数据并行优化

数据并行,一种经典的方式,是有一个统一的数据派发/收集方,向各个GPU派发数据,然后收集反向传播结果实现更新;而这种方式通讯开销过大,所以更多的模型采用的是All-to-All的数据收发,也就是每个GPU前向反向一轮之后,将更新结果传递给同层的所有GPU。在此基础上,异步的接收和合并也是这里Deepseek采用的方式

所以,这里计算单元就要负责计算和通信两件事,而Deepseek采用了一种比较精妙的结构实现了两者的并行

在这里插入图片描述

注:对于MLP和ATTN两个块的反向计算更新,他拆分成输入更新(绿)和权重更新(蓝)两个部分;DISPATCH和COMBINE是层内通行,PP则是跨层通信(流水并行部分)

EPLB (Expert Parallelism Load Balancer)

专家并行优化

  1. 核心问题:Moe策略中每次会从256个专家中选出8个(许多个token通过矩阵运算同时进行),但是不同专家的热度不同,如果平均分配的话,会出现忙的忙死,闲的闲死的状态,使得计算资源没能得到充分应用
  2. 解决方法:
    • 最主要的一点,即是根据专家的热度(权重由向专家dispatch的量来决定),weight高的专家复制多份,相反的则之拷贝一份
    • 除此之外,EPLB还对专家进行了分组,然后分配到具体的GPU硬件设备上,使得每个GPU对应的专家权重基本相同,保证均很效率

TODO

  1. PP 中的异步后向更新
  2. DP 中的分发和合并机制
  3. EP 中的分层结构与weight计算

To be continue…

Thanks

  1. 一次性说清:数据并行、流水并行、模型并行
  2. DeepSeek开源周 Day04:从DualPipe聊聊大模型分布式训练的并行策略
  3. DeepSeek V3 精读(2)-DualPipe
### deepSeek 开源项目概述 deepSeek 是专注于自然语言处理(NLP)领域的一个重要开源项目集合,在GitHub上拥有活跃的社区支持和发展[^1]。通过探索这些资源,可以深入了解该项目的技术细节及其应用范围。 #### 排名前列的 deepSeek 相关开源项目 在 GitHub 上搜索关键词 "DeepSeek" 可发现多个关联仓库,其中排名最靠前的是由深度求索官方维护的核心库——`DeepSeek-R1`,其提供了先进的NLP模型和服务接口实现[^3]。此项目不仅限于理论研究,还致力于推动实际场景中的技术落地。 此外,还有其他个值得注意的相关项目: 1. **DeepSeek-NLP**: 提供了一系列针对中文优化的语言理解工具包; 2. **DeepSeek-Tools**: 收集并封装了一些实用的数据预处理脚本以及评估指标函数; 3. **DeepSeek-Docs**: 官方文档站点,包含了详细的安装指南、API说明等内容; 4. **DeepSeek-Benchmarks**: 对比测试不同框架下相同任务的表现情况,帮助开发者做出更优选择。 #### 获取更多信息 为了获取更多关于 `deepSeek` 的资料和技术支持,建议访问 Hugging Face Model Hub 或查阅 PyTorch 官方文档来补充学习[^2]。同时也可以关注官方 GitHub 仓库动态,参与讨论交流,共同促进 NLP 技术的发展进步。 ```python import requests def get_repo_info(repo_name): url = f"https://api.github.com/repos/{repo_name}" response = requests.get(url) data = response.json() print(f"Repository Name: {data['name']}") print(f"Description: {data['description']}") print(f"Stars: {data['stargazers_count']}") get_repo_info('deepseek-ai/DeepSeek-R1') ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值