大模型分布式训练进阶之路:数据并行、管道并行、张量并行、3D并行

【分布式】大模型分布式训练入门与实践 - 04 数据并行DDP\模型并行\Pipeline并行 可以看到,G-pipe将1个mini-batch切分成多个micro-batch(上图是8),前向时每个micro-batch从device1流向device4,DDP就是这么做的。 阅读详情
AI摘要

本文系统介绍了大模型分布式训练的关键技术和方法,涵盖数据并行、管道并行、张量并行及DeepSpeed等高级策略,旨在帮助读者全面理解大模型训练的技术挑战与解决方案。

系统化的学习大模型,除了知道大模型是什么,也得知道大模型是如何训练的,对大模型的实际应用有更加定量的认知,该文章也算是一篇分布式训练的学习过程总结,作为循序渐进学习分布式训练的总结。

类似之前写过的LLM文章,本文也建议读者先定性有个宏观认知,然后再细化到某个概念定量了解,遇到不太清楚的概念深度递归去学习。

图片

为什么需要分布式训练?

主要有两点:

  • 对小模型而言训练速度更快
  • 对大模型而言,其所需内存太大,单机装不下

分布式训练的加速

这个就很直观了,对于一些单卡可以装载的模型我们可以通过多个卡数据并行的方法训练,然后把一轮数据算出来的梯度求和更新参数进行下一轮的梯度下降

这个范式比较经典的例子就是Parameter Server,后续的章节会定量的介绍

大模型的内存开销

我们来定量的算一算大模型需要的内存空间

比如一个 1.5𝐵 参数的GPT-2模型,我们用 Ψ 代表这个参数量的数量,那么在FP16的精度(单个参数大小 16𝑏 ,或者 2𝐵 )下模型本身达到了 2Ψ𝐵

如果是推理,那么模型的加载确实只需要这些参数,推理过程中再算上输入embedding占用的额外参数便是需要的所有内存

但如果是训练,那么就麻烦了,我们用DeepSpeed论文中Adam Optimizer+混合精度训练(如果不知道Adam和混合精度是什么建议自行了解下)作为例子。模型在训练过程中需要储存自身的参数和梯度(注意这里还不是Adam最后算出来的参数更新量,只是根据loss反向传播得到的原始梯度),这便需要 2Ψ+2Ψ 的内存,同时混合精度fp32训练时,Adam需要一份fp32大小的模型拷贝,momentum和variance去储存模型的优化器状态,这需要 4Ψ+4Ψ+4Ψ ,最终我们需要 16Ψ𝐵 的内存用于训练,即对于一个3GB的GPT-2模型,我们训练时需要24GB的内存,对比一张V100的显存为32GB

不难看出,一个GPT-2模型的训练就能吃光V100的显存了,对于175B的GPT-3的训练,哪怕是目前的H100(显存188GB)也无法单卡装载。因此对于这类大模型只能通过张量并行等方式训练,比如后面会介绍的Megatron和DeepSpeed。

我会怎么展开接下来的内容

我会先介绍一下分布式的一些必要前置知识,然后我会根据分布式训练随着大模型需求的演进路线展开后续的内容:

  • Data Parallelism:模型一台设备装得下,所以同一个模型同时用多份数据分开来训练
  • Pipeline Parallelism:模型装不下了,模型的一层或多层一台设备装得下,所以同一个模型按层拆分开训练
  • Tensor Parallelism:模型的一层都装不下了,所以同一个模型层内拆分开训练
  • DeepSpeed:可以算作目前大参数大模型分布式训练的终极方法,因此单独提出来了

分布式的一些必要前置

Map Reduce

这个是分布式架构的鼻祖级神文,我推荐每个想要了解分布式的人都定性的读一遍这个文章,MapReduce架构可以说是分布式架构的鼻祖,别说分布式训练了,哪怕大数据和k8s等分布式架构上都有它的影子,强烈推荐阅读原文

论文和随便找了篇中文定性的介绍(如果英文阅读很吃力的话可以看这个)

本节需要了解:

  • 定性掌握Map Reduce原理

通信原语

通信原语就是分布式训练用到的数据交换方式的原子操作

定义和Pytorch代码实现可以直接看这个,还有其他一些NCCL的操作可以看这个,每个通信原语其实只是定义了一个数据的分发or合并方式,其CPU和GPU上的实现需要深入到MPI和NCCL,这个就不做展开了。定性了解每个通信原语是干什么,如何在Pytorch里使用这些原语即可

后面的很多内容也会用到这些通信原语的定义,所以这个也需要好好定性的去了解

本节需要了解:

  • 定性了解各个通信原语的定义
  • 最好能用Pytorch上手使用一下这几个通信原语

训练流程

先定量了解下模型训练时的大概流程

图片

fwd and bwd

还是以混合精度的的Adam为图例,假设数据为fp16和fp32:

  • 正向传播时(FWD),上一层fp16的激活值和fp16的参数参与了计算,得到这一层的fp16激活值
  • 反向传播时(BWD),本层的激活值和参数参与计算,得到fp16的梯度
  • 参数更新时,fp16的梯度以及fp32的参数副本,momentum和variance参与计算,最终算出更新后的fp32参数、momentum和variance,然后将fp32的参数转化为fp16进行本层的参数更新

本节需要了解:

  • 混合精度下Adam优化器的参数更新流程
  • 定量了解混合精度下Adam优化器在各个流程的数据消耗

Re-materialization

论文和解读,建议直接看代码

其实re-materialization这个叫法是在后文的GPipe论文内提到的,这里直接拿来用了。提到该技术的论文其实比较早了,文章提出了几种节省训练时内存的方法,但我们只需要了解gradient checkpoint是啥和这玩意是如何让梯度的内存实现平方根级别内存优化的即可

本节需要了解:

  • 定性了解gradient checkpoint是如何实现的
  • 最好能定量推导gradient checkoutpoint为什么能把训练内存节省到平方根级别

数据并行(Data Parallelism)

数据并行是比较早期的模型训练方法,在CPU训练或单张GPU能装载下模型的场景下,我们可以用数据并行的思路加速模型的收敛,这是一种很直观的分布式模型加速方案

其实数据并行主要就是Ring All Reduce(无master节点)和Parameter Server(有master节点),其他的方案(如Spark MLlib)原理上都大同小异,因此本章只介绍这俩

Ring All-reduce

原理建议直接看这个文章,代码可以参考这个,其实Ring All-reduce在Pytorch里的实现就是DistributedDataParallel,Ring All-reduce本身流程也是reduce-scatter+all-gather的组合

Ring All-reduce其实是数据并行训练中一轮迭代完成后的参数同步流程,比如下图的例子,模型有 Ψ 参数量,并且被四台机器分为了四块,每台机器的出入带宽都为 𝛽 :

图片

all reduce machines

如果要实现一次All Reduce,最直观的就是把0、1、2节点的参数同步到3,等待3计算完成后再把参数反向同步回0、1、2,该方法的时间约为 6Ψ𝛽 。

但如果是Ring All-reduce,时间可以为 2(𝑁−1)Ψ𝑁𝛽 ,时延有明显的削减

不过,不管哪种其实单台机器的出入数据量是差不多的(少了大概 Ψ𝑁 ),只是通过环状算法将出入带宽利用率拉到最大实现加速

本节需要了解:

  • Ring All-reduce的原理
  • 定量的计算Ring All-reduce的传输时延
  • 尝试用Pytorch写一个Ring All-reduce的代码

Parameter Server

论文,随便找了篇中文解读

图片

parameter server

简单来说PS设计了一套分布式训练框架,将训练拆分为一个master节点和多个worker节点,其中worker节点每轮迭代执行:从master pull参数 -> 加载训练数据 -> 计算梯度训练 -> push梯度到master -> 等待master完成一次全worker同步

但是这种简单的"同步阻断"训练会导致同步时间占比较大,反而降低了计算效率,因此基于上面的流程又有了"异步非阻断式"训练过程,即每个worker用本地模型参数完成了多次梯度的计算后再重新pull模型参数,虽然直观上感觉这样会造成梯度下降变慢,但是经过论文的测试发现梯度下降速度没想象的影响那么大,具体的测试数据在论文中都有提到

同时如果模型数据过多,master节点就会有单点依赖,所以PS架构支持用哈希环的方法拆分master节点,使每个master节点只负责一部分模型参数的储存,降低单点网络问题带来的影响

本节需要了解:

  • 定性知道PS架构的原理
  • PS的同步阻断和异步非阻断式训练的流程区别,他们在计算和同步等待上的耗时占比分别是多少?
  • master节点是如何解决网络单点问题的?

管线并行(Pipeline Parallelism)

随着模型越来越大,一张卡变得装不下模型。为了训练单卡无法装载的模型,我们可以将模型按层切分到多个机器上,管线并行就是干这么个事

图片

这是最初级的模型拆分多卡的方案,该方案将模型根据层拆分到不同机器上,但该方法的训练效率也是大打折扣的,,每一张卡在大部分时间下都是空闲的。因此我们可以认为,管线并行主要是为了解决下图的问题:

图片

pipeline

本章会选择PipeDream和GPipe两个最知名的Pipeline并行方式进行展开

PipeDream

论文和中文解读

PipeDream也是将模型根据层拆分到多个机器上,训练时,允许机器在反向传播第一个批次数据的梯度前执行第二个甚至更多后续批次的数据计算,从而实现了pipeline并行。这个方法虽然会造成梯度收敛不稳定,但我们可以通过限制反向传播前最多执行多少批次来控制梯度的不确定性

图片

同时,PipeDream还将Data Parallelism结合了起来,模型的每一层都可以用数据并行的方式训练

图片

同时,梯度下降的时候,机器需要用保存好的参数备份来计算梯度(即不会用当前最新的参数来计算梯度):假如我们始终用最新的参数来计算梯度,那么对于图中的机器1,3号任务计算梯度时其实使用的是2号任务梯度更新之后的参数,而实际上3号任务正向传播时用到的是原始参数,因此这会带来大量误差

通过保存参数备份,我们可以实现近似于Data Parallelism的效果,但当然这也会倍率放大模型的内存占用,具体倍率和备份的参数量有关

本节需要了解:

  • PipeDream是如何提升机器利用率从而加速训练的?
  • PipeDream为什么会放大模型的内存占用?

GPipe

论文和中文解读

GPipe其实和PipeDream类似,将模型拆分到不同的设备上,通过管线并行的方式,多批次数据为一组更新模型参数。

GPipe是通过将一个batch的数据拆分为micro-batch实现,并且每一个batch完成后会等待全局同步梯度;同时,GPipe用到了前文提到的Re-materialization技术,用时间换来了显存的降低。因此总体而言GPipe速度比PipeDream慢,但是显存方面占用更少,且收敛更稳定

图片

本节需要了解:

  • GPipe和PipeDream的区别是什么?

张量并行(Tensor Parallelism)

管线并行其实主要还集中在多层神经网络架构的训练上,但是对于Transformer架构的模型(如BERT,GPT等),MultiHead Attention Layer和MLP的计算量翻了几倍,如果继续按管线切分模型的话可能单层参数都无法被显存装载,因此我们也需要横着把同一层的模型切分开来,这便是张量并行

图片

其中最有名的也就是Megatron和Deepspeed了,本章也会详细介绍这两个方法的原理

Megatron

论文,中文解读可以看目前个人认为全网最详细的系列,官方代码在这里

其实Megatron的原理就下面的公式:

  • 横切map:

    • 𝑓𝑜𝑟𝑤𝑎𝑟𝑑:[𝑋1,𝑋2]=𝑋,split操作
    • 𝑏𝑎𝑐𝑘𝑤𝑎𝑟𝑑:∂𝐿∂𝑋=[∂𝐿∂𝑋1,∂𝐿∂𝑋2] ,all-gather操作
  • 横切reduce:

    • 𝑓𝑜𝑟𝑤𝑎𝑟𝑑:𝑌=𝑌1+𝑌2 ,all-reduce操作
    • 𝑏𝑎𝑐𝑘𝑤𝑎𝑟𝑑:∂𝐿∂𝑌𝑖=∂𝐿∂𝑌 ,identity操作
  • 纵切map:

    • 𝑓𝑜𝑟𝑤𝑎𝑟𝑑:𝑋 ,identity操作
    • 𝑏𝑎𝑐𝑘𝑤𝑎𝑟𝑑:∂𝐿∂𝑋=∂𝐿∂𝑋1+∂𝐿∂𝑋2,all-reduce操作
  • 纵切reduce:

    • 𝑓𝑜𝑟𝑤𝑎𝑟𝑑:𝑌=[𝑌1,𝑌2] ,all-gather操作
    • 𝑏𝑎𝑐𝑘𝑤𝑎𝑟𝑑:[∂𝐿∂𝑌1,∂𝐿∂𝑌2]=∂𝐿∂𝑌,split操作

不过要注意下,实际的横切和纵切是分为map和reduce两步操作的,所以前向和后向的传播对于横切和纵切也有两步。根据这些,我们可以将Transformer的MLP和Multi Head Attention通过上面两种矩阵切分形式组合为下面的计算流程:

图片

其中Multi Head Attention甚至不需要切分 𝑄,𝐾,𝑉 三个矩阵,因为Transformer本身设计就是多个,每个head都可以放到一个GPU上计算

Megatron多用于训练BERT、GPT和T5等几十B的大参数模型,算大模型分布式训练的一个早期张量并行方法,后来随着大模型进一步变大到了几百B,DeepSpeed的ZeRO逐渐变为了主流

本节需要了解:

  • Megatron是如何做到把矩阵相乘拆分到不同GPU上计算的?
  • 横切和纵切的正向传播和反向传播的公式?
  • MLP计算时是如何结合应用纵切和横切的?
  • Multi Head Attention计算时是如何结合应用纵切和横切的?

DeepSpeed

PS:这里我把DeepSpeed单独提了出来,因为融合了数据并行、管线并行和内存节省等方法,因此可以看做上面很多方法的整合

随着GPT-3把LLM的参数量推到了175B,训练所需参数大小更是到达了万亿规模,Megatron面对如此大规模的参数也变得无能为力,而DeepSpeed的ZeRO方法问世则很好的解决了这个问题

ZeRO-DP

论文和中文解读

ZeRO-DP简单来说就是想办法在数据并行的管线上把模型的参数分配到不同的显卡上,而不用所有显卡都装载所有参数

该论文把训练期间的内存消耗归结为三类:

  • OS:优化器状态(如Adam的momentum和variance)
  • G:梯度
  • P:模型参数

如前文”大模型内存开销“小节有提到,混合精度下的Adam三种消耗占比大约为 12Ψ , 2Ψ 和 2Ψ 。同样的,ZeRO-DP根据显存优化粒度也分为 𝑃𝑜𝑠 , 𝑃𝑔 , 𝑃𝑝 三种

接下来我们介绍三种优化方案,其中 𝑁 是机器数量, Ψ 是模型参数量, 𝜃𝑜𝑠 、 𝜃𝑔 、 𝜃𝑝 分别代表优化器状态、梯度和模型参数, 𝛽 为单台机器的出入带宽

𝑃𝑜𝑠

𝑃𝑜𝑠 会让每台设备上都有完整的 𝜃𝑔 和 𝜃𝑝 ,但是只保留 1𝑁 的 𝜃𝑜𝑠 ,训练时也只更新这部分状态对应的参数,每轮训练完成后进行reduce-scatter将所有机器上所有参数的梯度合并到负责的机器上去,然后再用all-gather将每台机器计算出的参数分发给全局,因此参数同步时间为 2(𝑁−1)Ψ𝑁𝛽

其具体流程和数据并行类似,因此这里就不画图了

𝑃𝑔

该方法的假设在于每台设备只能训练部分参数,所以单台设备上其他参数的梯度其实不需要保存。

每台设备有完整的 𝜃𝑝 ,但是只保留 1𝑁 的 𝜃𝑜𝑠 、 𝜃𝑔 。反向传播时每经过一层参数就开启一轮reduce-scatter将梯度整合到一个节点,计算出下一层梯度后删除前一层梯度。参数同步时间为 2(𝑁−1)Ψ𝑁𝛽 ,和数据并行一致

图片

𝑃𝑝

简单来说就是在 𝑃𝑔 的基础上每一轮加上一次broadcast,把模型参数分发到各个设备上,因此时延相较前两个有显著提升,具体就不画图了,参数同步时间为因为 3(𝑁−1)Ψ𝑁𝛽 ,约为正常数据并行的1.5倍

上述三个级别的内存优化效率如下图所示:

图片

该方法能有效地降低单卡的内存,可以看到120GB的单卡所需训练内存最大可以压缩到1.9GB

本节需要了解:

  • ZeRO-DP的三种方法分别是什么?是通过什么原理实现的内存节约?
  • ZeRO-DP的三种方法的通讯时间分别为多少?

ZeRO-R

ZeRO-R和ZeRO-DP在同一个论文里出现(中文解读也是同一篇),我理解是一些单节点显存节约方法

𝑃𝑎

该方法使用类似Re-materilization的方法,在正向传播时设置激活值的存档,反向传播时用存档重新计算激活值,不过该方法更进一步地把激活值拆分到了不同机器上,每次计算时先进行一轮all-gather操作合并激活值,甚至论文中还提到可以把激活值存档放到CPU上去,用额外的通信成本降低激活值的显存开销

𝐶𝐵

这个就偏向显存管理了,对于矩阵计算申请的临时显存而言,由于显存管理策略申请的显存可能远大于实际使用到的显存(例如伙伴算法会申请2幂次方显存大小),该方法便是解决这种显存浪费导致的模型无法装载问题,它设置了一个静态的缓冲区大小,使更多的显存可以拿来装载模型,当然这也会带来一定的显存分配延迟(比如静态的缓冲区满了要等待释放)

𝑀𝐷

该方法也偏向显存管理,其目的就是降低显存的碎片,简单来说就是预先分配好激活值和梯度的显存块,并及时化显存整理,降低显存碎片的问题来使大块的张量可以得到分配,当然,这也会带来时间成本(毕竟显存整理也需要时间)

本节需要了解:

  • 定性了解ZeRO-R三个方法的原理

ZeRO-Offload

论文和中文解读

图片

ZeRO-Offload的核心思路就是让CPU和内存也参与到训练中去,回顾一下前文用到的训练流程的图,ZeRO-Offload就是把这个流程用上图的方式把fp32参数的更新和float2half操作拆分到了CPU和内存上计算,而前向和后向传播依然由GPU负责

那么,在单卡场景下,流程大概如下图所示:

图片

GPU在计算时异步的把已经计算好的参数传递给CPU,同样的,CPU也会异步的传递计算好的参数给GPU。多卡场景其实也一样,每张卡把自己负责的参数传递给CPU计算即可,甚至由于每个CPU负责的数据变少了,CPU的时延也大大的降低了

同时,文章进一步提出了One-Step Delayed,在模型后期得到了充分的收敛后,CPU的参数计算和更新可以放到下一轮迭代期间完成。当然,这会带来振荡的收敛,但是同时也大幅度的稀释了CPU计算的时间,论文中有证明在模型训练的后期开启该方案是可行的,虽然会带来一定的振荡,但总体不会对训练的收敛效果产生影响

图片

本节需要了解:

  • 定性地知道单卡和多卡场景下ZeRO-Offload如何将训练流程拆分到CPU的
  • 定量的了解ZeRO-Offload降低显存消耗的比例
  • 定性地了解One-Step Delayed机制和它带来的影响

ZeRO-Infinity

论文和中文解读,代码就是DeepSpeed开源项目

ZeRO-Infinity结合了ZeRO系列的论文,直接把分布式训练的方案推到一个目前来说接近终点的位置,改论文探讨的模型大小甚至直接到达了Trillion参数量级别(1 Trillion=1000 Billion),因此有很多之前不用考虑的场景在这里都涉及到了。强烈推荐自行阅读论文或者解读,下面本文简单介绍下该论文的思路

显存评估

作者先对显存进行了评估。对于超大的模型,它们的参数量如下图所示(注意模型参数量的单位为Trillions):

图片

这种规模的模型很明显是没办法交给GPU去装载的,自然而然会用到CPU和NVME,其中(a)图内的Working Mem per GPU就是把所有的模型状态offload到CPU或者NVME后GPU所需要的工作显存,其中Model State就是计算FWD和BWD所需显存,Act.是激活层重新计算(就是激活层ckpt,或者本文提到的re-materilization)所需要的显存

带宽评估

然后作者又对带宽的需求进行了评估,作者推导了效率的表达式,并结合测试给出了不同带宽和超参数情况下的效率对比,这里直接给个论文结论,具体推导可以看论文或解读

图片

依赖这个结论,我们可以根据需要的效率推导所需的带宽约为多少

设计

图片

ZeRO-Infinity的设计分为几个关键点,这里定性展开下,定量建议看论文或解读

解决超大规模的设计(Design for Unprecedented Scale)

  1. Infinity offload engine for model states:用到了ZeRO-DP的 𝑃𝑝 模式,把模型状态都进行了分区,并且所有模型参数存储都放到了CPU或者NVME上
  2. CPU Offload for activations:激活值的ckpt也放到了CPU内存中
  3. Memory-centric tiling for working memory:可以简单理解为把大张量的计算拆分成多个较小的线性算子序列,用时间换空间的方式防止显存不够用

解决训练效率的设计(Design for Excellent Training Efficiency)

  1. Efficiency w.r.t Parameter and Gradients:提出一种基于带宽的划分策略来提高参数和梯度的传递效率,并允许通过PCIe的重叠通信
  2. Efficiency w.r.t Optimizer States:其实就是基于ZeRO-Offload的优化器状态参数传递策略,CPU一边计算参数一边并行传递给GPU,不过在这里用NVME offload时需要经过一次NVME
  3. Efficiency w.r.t Activations:也是基于ZeRO-Offload的激活值传递策略,每个GPU通过PCIe并行写数据到CPU,可以超过80%的效率,很显然如果减少激活值ckpt的频率的话也能提升该效率(代价就是增加激活值重算的时间)

解决易用性的设计(Design for Ease of Use)

其实就是基于PyTorch在代码层封装好了各种算子操作(如reduce-scatter和all-gather等),不需要用户自行再写相关的代码了

  1. automated data movement:自动在FWD和BWD后触发收集和分区的相关操作,把数据同步到CPU或者NVME
  2. automated model partitioning during initialization:初始化时自动分区模型和参数

然后论文后续对上述提到的所有设计进行了原理展开,最后给出了效果和结论,具体的原理本文就不讲了,希望读者能结合梳理出来的脉络通读一下论文,然后再结合论文的原理阅读DeepSpeed的源码

本节需要了解:

  • 定性的了解ZeRO-Infinity做了哪些事
  • 了解ZeRO-Infinity每个设计所需方法的原理(如Bandwidth-Centric Partitioning,Overlap Centric Design等论文第六章和第七章内容)
  • 最好能结合了解到的原理读一读DeepSpeed的开源代码

3D Parallelism

可以参考这个

图片

该方法可以说是把模型并行、管线并行和数据并行结合到了一起,几乎可以用于训练目前所有规模的模型。该方法首先把模型按照层拆分为不同的Pipeline Stage,每个Pipeline Stage内的张量可以用多个设备装载,然后一个完整的Pipeline作为一个Data Parrallel,和其他的完整Pipeline用Zero进行数据并行训练

本章需要了解:

- 3D Parallelism是如何结合模型并行、管线并行和数据并行的

​

如何学习AI大模型?

作为一名热心肠的互联网老兵,我决定把宝贵的AI知识分享给大家。 至于能学习到多少就看你的学习毅力和能力了 。我已将重要的AI大模型资料包括AI大模型入门学习思维导图、精品AI大模型学习书籍手册、视频教程、实战学习等录播视频免费分享出来。

这份完整版的大模型 AI 学习资料已经上传优快云,朋友们如果需要可以微信扫描下方优快云官方认证二维码免费领取【保证100%免费】

一、全套AGI大模型学习路线

AI大模型时代的学习之旅:从基础到前沿,掌握人工智能的核心技能!

img

二、640套AI大模型报告合集

这套包含640份报告的合集,涵盖了AI大模型的理论研究、技术实现、行业应用等多个方面。无论您是科研人员、工程师,还是对AI大模型感兴趣的爱好者,这套报告合集都将为您提供宝贵的信息和启示。

img

三、AI大模型经典PDF籍

随着人工智能技术的飞速发展,AI大模型已经成为了当今科技领域的一大热点。这些大型预训练模型,如GPT-3、BERT、XLNet等,以其强大的语言理解和生成能力,正在改变我们对人工智能的认识。 那以下这些PDF籍就是非常不错的学习资源。

img

四、AI大模型商业化落地方案

img

作为普通人,入局大模型时代需要持续学习和实践,不断提高自己的技能和认知水平,同时也需要有责任感和伦理意识,为人工智能的健康发展贡献力量。

大模型---数据并行,管道并行,模型并行,张量并行 大模型---数据并行,管道并行,模型并行,张量并行(持续更新~) 1.数据并行(DP) (1)ZeRO 2.简单模型并行(MP) 3.管道并行(PP) 4.张量并行(TP) 5.FlexFlow 6.Pytorch,DeepSpeed,Megatron-LM 7.策略选择 阅读详情

相关推荐

AI大模型实战——深入理解DeepSpeed,提高大模型训练效率

DeepSpeed是微软开发的分布式深度学习训练库,支持万亿参数模型训练。其核心特点是3D并行技术(数据并行、模型并行、管道并行),显著提升训练效率。在推理方面,采用Dynamic SplitFuse技术将长提示分解处理,速度提升2.3倍。模型压缩技术可实现32倍压缩率且精度损失极小。此外,DeepSpeed还推出DeepSpeed4Science计划,致力于用AI解决重大科学问题。该框架通过创新技术大幅提升了深度学习模型的训练和推理效率,适用于超大规模模型场景。

小志的博客 1652

大模型基础理论学习笔记——分布式训练

本文主要介绍了深度学习分布式训练,从大模型训练的角度出发,讨论了深度神经网络分布式训练的缘起,常见的分布式训练策略,具体包括数据分布式、模型分布式和混合分布式,以及各种分布式策略的适用范围和使用方式。同时,我们还对基于Pytorch的数据分布式训练模式进行了探索,一方面,介绍了其具体原理,另一方面,也通过对代码的研读展现了具体实现过程,为后续实际开展分布式训练奠定基础。

maximejia的博客 7826

DeepSpeed核心技术解析:ZeRO与3D并行如何突破大模型训练瓶颈

大模型训练面临显存爆炸、通信拥塞与计算低效三大核心挑战,其本质是分布式系统中冗余数据存储、同步通信开销与硬件算力利用率不足的综合体现。DeepSpeed通过ZeRO系列显存优化协议实现梯度/参数/优化器状态的分片与卸载,结合Pipeline Parallelism和Tensor Parallelism构成的3D并行范式,重构了数据流与通信时序;再依托Fused内核与混合精度深度协同,在不牺牲收敛性的前提下提升计算确定性与吞吐。该技术栈已广泛应用于百亿至千亿参数模型的工业级训练与推理部署,显著降低GPU资源需

weixin_34112181的博客 487

分布式学习

单体架构特点?简单方便,高度耦合,扩展性差,适合中小型项目。例如:学生管理系统布式架构特点?低耦合高内聚松耦合,扩展性好,但架构复杂,难度大。适合大型互联网项目,例如:京东、淘宝一种良好的分布式架构方案优点:拆分粒度更小、服务更独立、耦合度更低缺点:架构非常复杂,运维、监控、部署难度提高(不用担心) – 运维 docker。

qq_53205308的博客 1566

大模型知识点汇总——分布式训练

本篇在宏观上介绍AIGC、LLM 训练过程中的模型加速相关概念和技术,不做数学推导和过于细节介绍,旨在快速有一个宏观认知,不拘泥在细节上。涉及:混合精度训练、数据并行、张量并行、流水线并行、模型并行、3D并行、混合并行、ZeRO 1、ZeRO 2、ZeRO 3、ZeRO-offload、Megatron、DeepSpeed、PFlash Attention、nvlink、nvswitch、Infiniband。

TigerZ*的博客 1790

人工智能大模型技术基础系列之:分布式模型训练

作者:禅与计算机程序设计艺术 1.背景介绍 在深度学习、神经网络等机器学习领域,大型数据集已经成为新一代人工智能技术发展的基石。然而,随着训练数据的量级增长,传统的单机CPU+GPU的方式已经无法满足需求。如何解决这些问题并加快模型训练速度是当前研究热点。越来越多的人开始关注分布式机器学习的研究,特

AI天才研究院 457

大模型并行训练指南——通俗理解Megatron-DeepSpeed:从模型并行(张量并行、流水线并行)到数据并行ZeRO3优化

BLOOM 的模型架构与GPT3非常相似,只是增加了一些改进,本文稍后将对此进行讨论。该模型是在Jean Zay上训练的,Jean Zay 是由 GENCI 管理的法国政府资助的超级计算机,安装在法国国家科学研究中心 (CNRS) 的国家计算中心IDRIS。训练所需的算力由 GENCI 慷慨捐赠给本项目 (捐赠号 2021-A0101012475)。GPU: 384 张 NVIDIA A100 80GB GPU (48 个节点) + 32 张备用 GPU。

结构之法 算法之道 4万+

深信服PT1-AF实验考试

深信服PT1-AF实验考试实验练习可以去深信服的在线实验平台(链接如下):深信服在线实验平台 (sangfor.com.cn)实验考试其实就是把所有的每一部分实验综合了起来以下内容仅做参考,不确保一样。

m0_72019240的博客 7122

大模型训练框架(一)综述

本文综述了四大主流大模型训练框架:FSDP、DeepSpeed、Megatron-LM和Accelerate。首先介绍了大模型训练所需的三种并行技术:数据并行(DP)、张量并行(TP)和管道并行(PP)。随后详细对比了各框架对并行策略的支持情况:DeepSpeed和Megatron-LM全面支持所有并行技术,可实现3D并行;FSDP仅支持数据并行;而Accelerate也仅支持数据并行。这些框架通过优化分布式训练策略,解决了PyTorch在大模型训练中的局限性,为训练超大规模模型提供了专业解决方案。

2401_85592132的博客 1022

使用Jacob实现将Word文件转换为Pdf文件

如果是首次使用 jacob,建议先直接从 github上下载 zip包,因为在实现Word转Pdf的时候,不仅需要用到 jacob.jar,还需要 jacob.dll 库,而zip包中都有。官方使用文档可以参考:https://github.com/freemansoft/jacob-project/blob/main/docs/UsingJacob.md。// 如果安装的是微软的 Office,需要使用 Word.Application。

qq_41672950的博客 751

ARM与PC共享文件方式【samba】移植与配置

方式推荐指数适用平台优点缺点⭐⭐⭐⭐⭐全平台 (Win/Mac/Linux)兼容性最强,操作像本地文件配置稍繁琐,协议开销略大NFS⭐⭐⭐⭐Linux/Mac (Win支持一般)速度极快,CPU占用低Windows配置复杂,权限管理较难SFTP (SSH)⭐⭐⭐⭐全平台 (需客户端)安全加密,无需额外配置服务需使用FileZilla/Xftp等专用软件物理U盘⭐⭐⭐全平台无需网络,速度取决于接口需要人工插拔,不适合自动化Syncthing⭐⭐⭐⭐全平台自动同步,支持远程。

浩瀚之水的专栏 263

深入解析Nanotron异步张量并行:10个核心优势与实现原理

Nanotron是一个专注于大型语言模型3D并行训练的开源项目,其异步张量并行技术为模型训练提供了高效的解决方案。本文将详细介绍Nanotron异步张量并行的核心优势与实现原理,帮助读者更好地理解这一技术。 ## 一、异步张量并行的基本概念 ### 1.1 张量并行的两种模式 在Nanotron中,张量并行有两种线性模式:All-reduce和Reduce-scatter。这两种模式在处理并

gitblog_00023的博客 807

《C++面向对象程序设计》✍千处细节、万字总结(建议收藏)

《C++面向对象程序设计》✍千处细节、万字总结 文章目录《C++面向对象程序设计》✍千处细节、万字总结一、面向对象程序设计二、C++基础2.1 C++的产生和特点2.2 一个简单的C++示例程序2.3 C++在非面向对象方面对C语言的扩充输入和输出cinconst修饰符void型指针内联函数带有默认参数值的函数函数重载作用域标识符"::"强制类型转换new和delete运算符引用三、类和对象(一)3.1 类的构成3.2 成员函数的定义3.3 对象的定义和使用3.4 构造函数与析构函数构造函数成员初始化列表

像写诗一样优雅地写代码~ 78万+

DeepSeek开源周 Day04:从DualPipe聊聊大模型分布式训练的并行策略

今天是DeepSeek开源周的第四天,官方开源了一种新型并行计算优化策略——DualPipe。其实大家阅读过Deepseek-V3技术报告的同学,对这个技术并不陌生。开源地址:https://github.com/deepseek-ai/DualPipe。

yanqianglifei的专栏 1844

基于 Simulink 的固态变压器(SST)多级协同控制实战教程

《固态变压器多级协同控制仿真指南》摘要: 本教程详细讲解了基于Simulink的固态变压器(SST)三级架构建模与控制方法。核心内容包含:1)搭建级联H桥整流(CHB)、双有源桥(DAB)和逆变器(VSI)的三级主电路;2)提出创新的多级协同控制策略,通过功率前馈实现输入输出级动态匹配;3)给出系统级功率平衡、单元级均压控制的具体实现方案。教程特别强调解决实际工程中的关键问题:代数环处理、软启动设计和刚性系统求解器选择,并提供了硬件在环(HIL)仿真建议。附带的MATLAB代码示例可直接用于实现电容电压均衡

xiaoheshang_123的博客 121

用 SAP-ABAP-1 把 ABAP 代码理解这件事交给 AI:从遗留代码到 ABAP Cloud 的开发加速器

SAP-ABAP-1是SAP推出的首个专用ABAP基础模型,专注于理解和解释ABAP代码,帮助开发者更快迁移和维护遗留系统。它强调ABAP Cloud合规编码实践,通过SAP AI Foundation提供访问,主要能力包括代码解释、业务语义理解和框架约束分析。相比通用模型,它能更好处理ABAP特有的版本差异、权限控制和扩展边界等问题。该模型可集成到多种开发环境中,支持文件化开发体验,并能与SAP Joule等工具协同工作,为ABAP团队提供智能辅助。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 3827

拓展与并行:实现大模型分布式训练的核心策略

最后,建立一套完善的持续优化监控指标体系,涵盖训练速度、模型损失下降、GPU 利用率等关键指标,实时监测训练过程,及时发现并解决潜在问题,不断优化分布式训练系统,保障大模型分布式训练高效、稳定运行,助力企业在 AI 时代实现业务的智能化升级与创新突破,赢得市场竞争优势。通过数据并行,企业可以快速将大规模图片数据集分配到不同 GPU 上,各 GPU 并行处理,大幅加快训练速度,同时由于模型副本共享,能在较短时间内完成模型的初步训练与优化,进而加速产品从研发到投入市场的进程,抢占市场先机。

charles666666的博客 498

【3天快速入门WPF】8-数据绑定基础

以下是一个简单的 WPF 数据绑定示例,使用两个TextBox控件分别表示Name和Age来进行进行数据绑定试验。运行程序后,你会看到初始界面中TextBox 中显示初始名字 “张三”,TextBox 中显示初始年龄 “25”。在 XAML 中创建一个简单的界面,包含一个 TextBox 用于输入名字,一个 TextBox 用于显示年龄。当你在 TextBox 中修改名字时,Person 对象的 Name 属性会被自动更新,反之亦然。它的主要作用是为控件及其子控件提供一个默认的数据源,用于数据绑定。

Zy100Papa的博客 970

uv-line 线条组件全解析:从 0.5px 细线原理到跨端分隔线实战

uv-line 是 uv-ui 生态中专门用于绘制分割线条的轻量级组件,它以「一根 `view` + 一个计算样式」的极简实现,同时支持横向与竖向两种方向、实线与虚线两种样式,并能借助 `transform` 缩放实现跨端一致的高清 0.5px 细线。本文以 `uni_modules/uv-line` 的版本记录为主线,结合组件源码、属性定义与仓库内示例页面,完整讲解该组件的用法、每一项配置参数、

gitblog_00747的博客 694

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

告别GPU内存瓶颈:DeepSpeed三大模型并行策略让千亿参数训练成为可能

你是否遇到过训练大型模型时GPU内存不足的问题?当模型参数达到数十亿甚至千亿级别,传统的单机训练方式往往束手无策。DeepSpeed作为深度学习优化库,提供了强大的模型并行技术,帮助开发者轻松应对超大模型训练挑战。本文将详细介绍DeepSpeed的三种核心模型并行策略——张量并行、管道并行和混合专家并行(MoE),带你一步步突破GPU内存限制,实现高效的分布式训练。 ## 张量并行:细粒度计算拆...

gitblog_00087的博客 638

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

如何在10分钟内用Nanotron训练Tiny Llama模型:快速入门教程

Nanotron是一个专注于大语言模型3D并行训练的极简框架,通过它你可以轻松实现高效的分布式训练。本教程将带你在10分钟内完成Tiny Llama模型的训练,即使是新手也能快速上手。 ## 准备工作:环境搭建 ### 安装Nanotron框架 首先需要克隆Nanotron仓库到本地: ```bash git clone https://gitcode.com/gh_mirrors/na/na

gitblog_00698的博客 1013

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

终极指南:TorchTitan分布式训练策略深度解析——从理论到实践的性能突破

TorchTitan作为原生PyTorch大模型训练库,通过创新的分布式训练策略实现了性能突破。本文将深入解析其核心技术,帮助新手用户快速掌握从理论到实践的完整路径,轻松应对大规模模型训练挑战。 ## 为什么选择TorchTitan分布式训练? 在大模型训练领域,分布式技术是突破硬件限制的关键。TorchTitan基于PyTorch生态,提供了一系列优化的分布式策略,包括FSDP2、张量并行(

gitblog_00763的博客 389

大模型训练框架(四)Megatron-LM

Megatron-LM 是由 NVIDIA 推出的一个用于训练大型语言模型的分布式训练框架,它支持在多节点、多 GPU 环境下进行模型训练。Megatron-LM 通过模型并行(Model Parallelism)的方式,允许训练具有数千亿参数的模型

深数研究院 2412
上一篇: AI大语言模型之分布式训练概述
下一篇: 长文本 Embedding 模型中的“迟分”策略
爱喝白开水a
博客等级 码龄3年 6793粉丝 763原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值