成果|Seq1F1B:节省50%显存的长文本模型流水线并行训练技术

学术   2024-06-24 09:27   北京  
为提高大语言模型在长文本训练时的流水线并行效率,我组与北京邮电大学团队共同开源了 Seq1F1B训练技术。该技术通过将流水线调度的单元按序列切分,并提出了针对序列维度调度的 1F1B 流水线并行策略和计算高效的序列切分方法,在确保不同序列间处理顺序与原始模式一致的同时,显著降低了流水线对显存的需求,并减少了因空闲气泡导致的性能损失。


论文信息


 ➤  论文地址 

 🔗https://arxiv.org/abs/2406.03488


 ➤  开源地址 

 🔗https://github.com/thunlp/Seq1F1B




Seq1F1B 显存占用和训练吞吐

Seq1F1B 相比传统流水线方法减少 50% 显存占用,最高能支持30B GPT-2 模型的64k长文本训练(不启用重计算显存优化),并在大多数情况下拥有更高的训练吞吐。


实验设置


显存占用对比



▼ 2.7B模型训练吞吐对比


   7B模型训练吞吐对比


  ▼ 13B模型训练吞吐对比


▼ 30B模型训练吞吐对比

2.7B、7B、13B和30B显存占用对比(左右滑动)



研究背景


近年来,越来越多的研究开始专注于大型语言模型在长文本数据上的训练。一些研究成果显示,处理长序列数据可以显著提升模型的泛化能力。然而,长序列训练给模型并行技术带来了一些新的挑战:高昂的通信代价显存占用

为了克服这些障碍,业界普遍采用了如 Deepspeed-Ulysses、RingAttention 和 Megatron Tensor Parallelism V3 等序列并行技术,并将其与流水线并行以及 ZeRO 优化策略结合起来使用。尽管如此,序列并行仍会带来较高的通信开销,并因此影响到训练吞吐率。

另一方面,虽然纯流水线并行是对通信要求最低的并行方法之一,但它在处理长文本时会受限于显存容量不足和更加明显的空闲时间问题(即“气泡”),因此它不适合作为长文本训练的优选并行策略。

而以往的序列级别流水线如 TeraPipe,往往受限于计算时序问题,仅仅适用于简单的 GPipe 流水线,而没有高效的序列级别的 1F1B 流水线。



主要创新

以往的序列流水线如 TeraPipe 等,往往受限于计算顺序问题,仅仅适用于简单的 GPipe 流水线,而没有高效的序列级别的 1F1B 流水线。为了解决 1F1B 流水线对序列维度计算顺序的限制,Seq1F1B 创新地引入新的细粒度调度技术高效的序列切分策略,保证了序列之间的计算依赖关系,并使得每个序列对应的处理时间相近,尽可能减少序列切分引入的多余流水线气泡。最终实验结果证明,Seq1F1B不仅减少 1F1B 流水线 activation 的显存占用,还能够通过减少流水线气泡实现加速

  1. 我们提出了序列级别的 1F1B 流水线技术,解决了以往 1F1B 流水线在长文本训练中面临的显存瓶颈。
  2. 提出了根据计算量对序列切分的负载均衡技术,使得序列切分后的流水线调度更加高效。
  3. 通过实验证明我们方法的有效性,大大降低了 1F1B 的显存占用,并实现了更高的吞吐。
  4. 基于 Nvidia/Megatron-LM 进行开发,保证可复现性和兼容性。



具体方法

目前主流的大语言模型主要采用语言建模作为预训练任务,在语言建模中,模型的目标是预测下一个出现的词,为了做到这一点,模型需要具有自回归特性。简单来说,就是模型在预测下一个词的时候,只能看前面的词,而不能看后面的词。就像写文章时,我们只能根据已经写过的内容来决定接下来写什么,而不能预知未来的内容。自回归特性使得语言模型可以在词序列维度进行流水线并行

流水线并行,简单来说是为了更快地完成任务,让语言模型像工厂里的流水线一样工作。举一个简单的例子,假设我们有一个4层的语言模型,每层都分给一个计算设备,而该计算设备仅负责该层的计算任务,每一个计算设备完成了自己的计算之后,将结果交给下一个设备处理,自己则去处理下一个计算任务。

为什么自回归特性使得词序列维度可以进行流水线并行呢?

假设当我们向模型输入句子 “天气真好” 时,模型的第一层看到了第一个词 “天”,而此时它无须去考虑后面的三个词,便可直接输出到下一层,因此我们就可以一个词一个词的来对模型的计算进行流水。反之,如果模型不具有自回归特性,则需要计算完整的 “天气真好” 四个字,才可以进行下一层的计算。

然而,为了支持词序列维度的流水线并行,语言模型的前向计算和反向计算有一定的依赖顺序,比如当输入为“天气真好”时,“天”的前向计算需要在后面三个词前面,这是由于自回归特性,当我们计算后面三个词时,依赖 “天” 这个词的计算结果;反之,为了进行正确的反向计算,“天” 字对应的梯度依赖于后三个字的反向计算,因此其反向计算在其之后。

由此,我们得到序列级别流水的两个必要条件:模型的自回归特性前反向计算顺序。接下来我们将简要介绍1F1B流水的原理,并阐明 Seq1F1B 方法如何在 1F1B 基础上完成序列级别的流水。

 ➤  1F1B 流水的原理 

传统的 1F1B 流水线并行包含三个阶段:WarmupSteadyCooling down


1F1B时序图


上图为 1F1B 的时序图,在 Warmup 阶段,前面的流水线阶段要比后面的多一个前向计算,而最后面的阶段在完成一个前向计算后,要马上进行该前向计算对应的反向计算,并在 Steady 阶段进行前向和反向的交替计算,这一过程被称为 one-forward-one-backward,也是 1F1B 名字的由来。长文本训练中,1F1B 每个批次的前向计算和反向计算时间会变长,因此流水线气泡(图中的白色部分,即流水线并行中设备的空闲时间)也会随之变长,这也就会导致更长的流水线空占时间,最后的结果在时序图上表现为总时间变长。 

 

 ➤  Seq1F1B 训练技术解析 


Seq1F1B时序图


我们提出的 Seq1F1B训练技术,解决了 Attention 模块中序列之间的依赖问题的同时,通过序列切分进一步减少了气泡时间。由上图可以看到,Sequence 2的前向计算在Sequence 1后面,而其 Sequence 2 的反向计算在 Sequence 1 的前面。通过 Seq1F1B 设计,流水线的负载变得更加紧凑,不同流水线阶段间的空置时间变得更少了。除此之外,由于前向计算和反向计算的单位变得更小了,因此在前向阶段和反向阶段中间,模型需要存储的激活值也变小了,极大降低了激活值带来的显存占用。



尽管更细粒度的流水线调度使得流水线气泡减少,但是由于模型的自回归特性,如果根据序列长度直接均分序列,不同序列之间的前向 / 反向计算量不相等。例如,在上面的例子中,Sequence 2 的前向 / 反向计算时间大于 Sequence 1,从而导致多余的空闲气泡。为了解决这一问题,我们根据根据序列对应的计算量来切分序列,而不是简单的均分序列,这一改进在试验中大约有 1.2 倍加速比,充分证明了该切分方法的有效性。


序列切分策略加速比




其它创新点

除了论文提出的主要策略以外,为了和主流的流水线优化技术结合,Seq1F1B还有其它创新点。


 ➤  Seq1F1B-I (Interleaved version) 


Seq1F1B-I 时序图

上图展示了1F1B-I的时序图,1F1B-I(交错1F1B流水线)是 Megatron-LM 中对 1F1B 的一项创新技术,图上每个设备上有多个流水线的阶段,这样一来可以通过更细粒度的纵向流水减少流水线里的空闲气泡;下图则为 Seq1F1B-I 的时序图,Seq1F1B-I在1F1B-I的基础上进一步切分序列,并修改流水线时序以满足计算顺序依赖。由时序图可以看到,相比1F1B-I,Seq1F1B-I进一步减少了气泡,取得了更短的运行时间,并由实验结果可以看出,Seq1F1B-I大幅减少1F1B-I的显存占用 


 ➤  Seq1F1B integrated with ZeroBubble Pipeline 

Seq1F1B 和ZB-H1结合时序图

上图是 ZB-H1 的时序图,其作为 Zero-Bubble 流水线的简化形式,通过简单将反传的梯度计算分为权重梯度计算和激活梯度计算两部分,实现了接近零气泡的流水线调度,而在 ZB-H1 基础上,我们结合 Seq1F1B 技术,提出了 Seq1F1B integrated with ZeroBubble Pipeline,进一步减少了空占气泡,提升了流水线效率。




关于我们

清华大学自然语言处理与社会人文计算实验室(TsinghuaNLP)成立于 20 世纪七十年代末,是国内开展自然语言处理研究最早、深具影响力的科研单位,也是中国中文信息学会计算语言学专业委员会及中国人工智能学会因果与不确定性人工智能专业委员会的挂靠单位。实验室在学术总体带头人孙茂松教授及学术方向带头人刘洋教授刘知远副教授的带领下,围绕以中文为核心的自然语言处理,在语言大模型、跨模态大模型、中文信息处理、机器翻译、知识图谱、智慧教育、社会人文和艺术计算等方面开展系统深入的研究,在国内外具有较大的学术影响。近年来,实验室承担了国家 973 项目、国家重点研发项目、国家社会科学基金重大项目等多项重要研究任务,并与腾讯、华为、搜狗等企业建立密切的学术合作关系。


Website:http://nlp.csai.tsinghua.edu.cn/

Email:thunlp@163.com

GitHub:https://github.com/thunlp

               https://github.com/OpenBMB

Twitter:https://twitter.com/TsinghuaNLP


THUNLP 长期开放招聘

🎓     ➤  博后及研究员招聘

📚     ➤  科研实习生招聘

💻     ➤  工程师团队招聘

TsinghuaNLP
清华大学自然语言处理与社会人文计算实验室,是中国中文信息学会计算语言专业委员会和中国人工智能学会不确定性专业委员会的挂靠单位。负责人为清华大学计算机科学与技术系孙茂松教授,核心骨干为刘洋教授,刘知远副教授。
 最新文章