大模型训练 Pipeline Parallel 流水并行性能有没有什么评价指标?或者分析方法?

您所在的位置:网站首页 micro是啥 大模型训练 Pipeline Parallel 流水并行性能有没有什么评价指标?或者分析方法?

大模型训练 Pipeline Parallel 流水并行性能有没有什么评价指标?或者分析方法?

#大模型训练 Pipeline Parallel 流水并行性能有没有什么评价指标?或者分析方法?| 来源: 网络整理| 查看: 265

在华仔负责大模型训练,目前对大模型进行性能分析和调试调优,直接看底层每个计算、通信、么个线程的空隙和执行时间,就太细了,完全分析不出来。

于是就提出了一个很重要的疑问,pytorch是否有手段,能够快速分析出,大模型的训练&推理在各个阶段:

每个迭代端到端耗时、正反向耗时、特别是分布式并行策略DP/TP/PP的通信、PP bubble ration的大粒度算法层面相关的耗时数据,而不是细粒度分析Profiling再人工提取分析?

那这个问题就跟题主的问题相同啦!在大模型训练过程中,我们应该如何分析PP的性能占比和耗时。首先需要有一个理论的评价指标,根据理论的评价指标对比,具体使用哪种流水并行策略,看看实际大模型训练的Profiling结果,流水并行PP策略下,理论Bubble Size跟实测Bubble Size之间的差异。

流水并行 PP 评价指标

流水并行(Pipeline Parallelism,PP)中,针对流水并行(PP)假设并行的stage 切分为p 份,micro-batches 为m,每个micro-batches 的前向和后向执行时间为tf 和tb。在理想的环境下,前向和后向的合起来理想的执行时间应该是:

t_{ideal}=m(tf+tb)

不过在实际 Pipeline 把网络模型切分成不同 stage 放在不同的机器,会导致在正向的 p - 1 和反向的 p – 1 时间内会出现计算等待时间。那这个中间空白的地方,我们叫做 Bubble 空泡。

而空泡 Bubble 的产生,是因为算子内并行和算子间并行解决单设备内存不足的问题,模型经过拆分后的上一个 rank 的 stage 需要长期持续处于空闲状态,等待 其他 rank 的 stage 计算完成,才可以开始计算,这极大降低了设备的平均使用率。这种现象被称为并行空泡(Parallelism Bubble)。

总的 bubble 占用的时间跟流水并行 PP 切分策略相关:

t_{bubble}=(p-1)(tf+tb)

Bubble 占有率比例,英文有几个不同的叫法,分别是 Bubble time fraction/ pipeline Bubble size/Bubble ration,其计算公式为:

bubble ration=\frac{t_{bubble}}{t_{bubble}+t_{ideal}}=\frac{\left(p-1\right)\left(tf+tb\right)}{\left(p-1\right)\left(tf+tb\right)+m\left(tf+tb\right)}=\frac{p-1}{m+p-1}

根据上面的公式,bubble ration 跟 micro-batches 有关系,micro-batches(m) 越大,Bubble 的比例会降低到一个比较可以接收的水平,因此在衡量大模型性能优化的过程中,bubble ration 也是作为一个衡量指标去看待其利用率。

不过呢!我们实际实验证明,当 m≥4p 时,在整体计算的过程当中会加上重计算技术来降低内存的消耗,因此 pipeline 中的 bubble ration 的百分比会降低到一个可以忽略的比例,所以最终的 bubble ration 应该是很低。

反倒是重计算过程主要是针对网络模型的正向计算,反向计算的时候会跟计算通信重叠,因此流水线并行(PP)引入的气泡不会严重消耗训练效率。

为了充分提升算力利用率,也即是充分发挥硬件的算力,最好的做法是把大模型按照模型并行(实际上优先采用张量并行 TP),如果可以的话加上流水并行PP,把模型并行的机器节点的内存全占满。在这个前提下的话,就可以自由地调整流水线并行(PP)和张量并行(TP)的比例。

由于数据并行(DP)几乎不影响计算时间,假设数据并行(DP)参数设置为 d=1,节点数为n,张量并行(TP)设置为 t,流水并行(PP)设置为 p,并且满足 n=t×p。

在上面的条件下,Bubble Ration 为:

bubble ration=\frac{n/t-1}{m+n/t-1}

针对NVIDIA Megatron的论文里面的实验数据表明:

在相同的设备NPU数量下面,micro batch 越大,bubble size越小。所以实践过程,尽可能优化内存提升micro batch size大小。流水并行算法

回过头来看看流水并行,实际上流水并行的策略和算法很多,目前主要是Google、微软、NVIDIA三家厂商提出来的5种不同的算法。下面我们来盘点下流水并行的几个算法,还有流水并行的特点,然后看看实际测试过程中遇到的问题和实际的评价指标。

Native

朴素的流水线并行,同一时刻只有一个设备进行计算,其余设备处于空闲状态,计算设备利用率通常较低。

GPipe

将朴素流水线并行的 batch 再进行切分,减小设备间空闲状态的时间,可以显著提升流水线并行设备利用率。其实也是 F-then-B 调度方式所示,将原本的 mini-batch(数据并行切分后的batch)划分成多个 micro-batch(mini-batch再切分后的batch),每个 pipeline stage (流水线并行的计算单元)先整体进行前向计算,再进行反向计算。通过在同一时刻分别计算模型的不同部分,F-then-B 可以显著提升设备资源利用率。但也不难看出这种 F-then-B 模式由于缓存了多个 micro-batch 的中间变量和梯度,显存的实际利用率并不高。

1F1B

1F1B (在流水线并行中,pipeline stage 前向计算和反向计算交叉进行的方式)流水线并行方式解决了这个问题。在 1F1B 模式下,前向计算和反向计算交叉进行,可以及时释放不必要的中间变量。

PipeDream

PipeDream 在单个 GPU 上进行短暂的运行时性能分析后,可以自动决定怎样分割这些 DNN 算子,如何平衡不同 stage 之间的计算负载,而同时尽可能减少目标平台上的通信量。PipeDream将DNN的这些层划分为多个阶段——每个阶段(stage)由模型中的一组连续层组成。PipeDream把模型的不同的阶段部署在不同的机器上,每个阶段可能有不同的replication。该阶段对本阶段中所有层执行向前和向后传递。PipeDream将包含输入层的阶段称为输入阶段,将包含输出层的阶段称为输出阶段。

Virtual Pipe

virtual pipeline 是 Megatron-2 这篇论文中最主要的一个创新点。传统的 pipeline 并行通常会在一个 Device 上放置几个 block,我理解这是为了扩展效率考虑,在计算强度和通信强度中间取一个平衡。但 virtual pipeline 的却反其道而行之,在 device 数量不变的情况下,分出更多的 pipeline stage,以更多的通信量,换取空泡比率降低,减小了 step e2e 用时。

性能评价结论

实际验证分析可以发现,增加张量并行(TP)的大小,将会减少泡沫比率(Bubble Ration),也就是提高了整体的利用率减少卡间不同步等待的时间。不过,张量并行(TP)的大小不能无限增加,因为张量并行(TP)会拆分模型降低整体的计算粒度,一般默认张量并行(TP)最大不夸节点,节点内可以增大。

因此可以得出一个简单的结论,张量并行(TP)的大小应该增加随着模型尺寸的增加而缓慢增加,但并行数不超过单个节点。在经过一系列猛烈的操作和实验之后,得到张量并行(TP)最好的配置是:

4\le t\le8

其中参数 t 为张量并行的维度。在 GLM-130B 模型验证过程中,可以知道当 micro-batches(m)=176,p(PP) =8,Bubble size 为 3.8%,足以证明流水线模型并行的效率。如果在 910B 上是 1*16 的机器,模型是千亿 t 尽可能得在 4~16 之间,PP 减少跨服务器节点。

实际实验证明,当 m≥4p 时,在整体计算的过程当中会加上重计算技术来降低内存的消耗,因此 pipeline 中的 bubble ration 的百分比会降低到一个可以忽略的比例,所以最终的 bubble ration 应该是很低。

重计算过程主要是针对网络模型的正向计算,反向计算的时候会跟计算通信重叠,因此流水线并行(PP)引入的气泡不会严重消耗训练效率。

因此,在大模型训练过程中,我们应该如何分析PP的性能占比和耗时?首先需要有一个理论的评价指标,根据理论的评价指标对比,具体使用哪种流水并行策略,看看实际大模型训练的Profiling结果,流水并行PP策略下,理论Bubble Size跟实测Bubble Size之间的差异。

参考:

https://www.catalyzex.com/paper/arxiv:2102.07988



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3