Efficient Sequence Packing without Cross-Contamination: Accelerating Large Language Models without Impacting Performance

发表时间: 2021-07 · arXiv:2107.02027 (Graphcore)

作者/机构: Mario Michael Krell (Graphcore Inc.), Matej Kosec (Graphcore Inc.), Sergio P. Perez (Graphcore Inc.), Andrew Fitzgibbon (Graphcore Inc.)

A1 主要贡献

本文旨在解决大型语言模型(LLM)训练中因处理可变长度序列而普遍采用填充(padding)策略所导致的计算资源浪费问题。研究表明,在常见的自然语言处理(NLP)数据集中,填充令牌的比例可高达50%,在某些情况下(如GLUE-cola数据集,序列长度128)甚至达到89%。现有的解决方案存在诸多弊端:例如,在自注意力机制中需要避免序列间的“交叉污染”(cross-contamination);丢失序列排序信息可能导致模型精度下降;或者依赖于仅适用于特定加速器的定制化内核实现,通用性差。

针对以上问题,本文的核心研究目标是开发一种高效且硬件无关的序列打包(sequence packing)方法,以加速LLM训练,同时确保与原始模型在数学上等效,不影响模型性能。

主要贡献如下:
1. 揭示填充问题的普遍性:通过对多种数据集(包括Wikipedia、GLUE、SQuAD等)的序列长度分布进行可视化分析,量化了填充令牌在训练数据中占据的大量比例,明确了通过序列打包可获得的巨大加速潜力(例如,在BERT第二阶段预训练中可实现2倍加速)。
2. 提出新颖高效的打包算法:将序列打包问题形式化为经典的箱子打包问题(bin packing problem),并基于此提出了两种全新的确定性高效打包算法:最短包优先直方图打包(SPFHP)非负最小二乘直方图打包(NNLSHP)。这两种算法能在数秒内为包含数百万序列的数据集生成近乎最优的打包方案。
3. 解决交叉污染并保持模型等效性:详细阐述了“交叉污染”问题,即打包后不同序列的令牌在自注意力计算中相互影响,并提出了一系列模型调整方案来避免此问题,包括调整位置编码和引入块对角注意力掩码。这些调整确保了打包后模型的训练行为与原模型在数学上等效,从而可以直接沿用现有的预训练和微调流程。
4. 提供全面的实验验证:通过在BERT large模型上的实验,证明了所提出的打包算法能为Wikipedia预训练数据集带来近2倍的吞吐量提升,且收敛行为与未打包的基线模型相当。此外,实验还验证了模型调整的必要性,并证明打包训练不影响在下游任务(如SQuAD)上的最终性能。

A3 背景知识与关键观察

序列长度分布

本文的一个关键观察是,许多用于语言模型训练的数据集具有高度倾斜的序列长度分布,导致大量计算资源被浪费在处理填充令牌上。


图 1: 不同数据集的序列长度分布。左上三个图表显示了基于2020年10月1日维基百科文章转储的BERT预训练数据集在不同最大序列长度下的序列长度直方图(不包括填充的令牌计数)。理论加速比指的是不使用任何填充令牌且没有处理不同长度的开销。右上:GLUE数据集。底部从左到右:SQuAD 1.1、LibriSpeech文本标签、LibriSpeech音频令牌序列,以及QM9分子(图中序列化的图)。

相关工作

关于打包的技术背景

A2 方法细节

本文的方法包含三个部分:首先,在预处理阶段高效地打包数据样本以充分利用最大序列长度$s_m$(第3.1节);其次,对BERT模型进行一系列修改以保持其与原始实现的等效性,包括使用自注意力掩码防止序列间交叉attend(第3.2.2节)和调整位置编码(第3.2.1节);最后,提供超参数调整建议,以使打包和未打包的BERT实现具有相似的收敛行为(第3.3节)。

3.1 打包算法

背景介绍。著名的箱子打包问题旨在将物品装入固定容量的箱子,以最小化使用的箱子数量。由于精确解是强NP完全的【【14,Combinatorial Optimization,2012】】,因此已提出了众多近似解【【12,Near-optimal bin packing algorithms,1973】;【15,A Simple On-Line Bin-Packing Algorithm,1985,Journal of the ACM (JACM)】;【13,A 7160 theorem for bin packing,1985,Journal of Complexity】;【36,A simple proof of the inequality MF F D(L) ≤ 71/60OP T (L) + 1, L for the MFFD bin-packing algorithm,1995】】。鉴于现有近似算法的复杂度至少为$O(n \log n)$,本文提出了两种新的启发式离线算法,它们针对NLP场景进行了优化,并应用于整个数据集。

3.1.1 最短包优先直方图打包 (SPFHP)

3.1.2 非负最小二乘直方图打包 (NNLSHP)

3.2 packedBERT: 模型变更

本节描述了如何修改任何标准的BERT实现以处理打包序列,从而使模型的行为与处理未打包序列时相同。保持数学等效性对于确保现有BERT预训练和微调实践的有效性至关重要,也是MLPerf™【【17,MLPerf: An Industry Standard Benchmark Suite for Machine Learning Performance,2020】】等基准测试的要求。

3.2.1 调整位置嵌入

3.2.2 调整注意力掩码


图 2: 注意力掩码代码[左],对应的0-1掩码[中],以及序列损失的向量化解包[右]。白色矩形对应填充。

3.2.3 调整逐序列损失和准确率

3.3 调整超参数

A4 实验

实验环境

实验结果

4.1 箱子打包算法比较

本实验评估了不同打包算法在IPU上的性能,关键指标包括打包效率、开销(Overhead)和实际加速比。

Table 1: 提出的打包算法(SPFHP和NNLSHP)在IPU上的关键性能结果。

4.2 MLPerf™ 第二阶段预训练:学习曲线与超参数调整

本实验在MLPerf™ v0.7基准上比较了打包(NNLSHP深度3)与未打包(经典BERT)的收敛行为和实际加速效果。
- 实验设置:
1. 相同有效批次大小: 通过将打包训练的梯度累积数减半,使平均批次中的序列数与未打包训练相同。
2. 不同启发式调整: 保持计算批次大小不变,评估第3.3节提出的超参数调整启发式方法。
3. 优化设置对比: 比较两种方法达到目标准确率所需的总时间。


图 3: 打包和未打包处理的学习曲线比较。[左] 相同的有效批次大小(ebs是批次大小乘以打包因子),[中] 不同的超参数启发式调整,[右] 打包实现的实际加速比(超过期望的2倍)。

4.2.1 消融研究

本研究分析了模型修改的必要性。
- 结果 (见图4):
- 无注意力掩码调整: 如果不进行注意力掩码调整以防止交叉污染,训练损失和准确率会急剧恶化。
- 无位置编码调整: 如果不调整位置编码,准确率会停滞在71.8%,无法达到72.1%的目标。
- NSP损失的影响: 在完整的训练设置中,移除NSP损失会导致下游SQuAD任务的F1分数下降1.31%,EM分数下降1.15%。


图 4: 在我们的打包BERT方法中,使用和不使用掩码或位置嵌入调整的学习曲线比较。要达到的灰色准确率基线是72.1%。

4.3 全程预训练和SQuAD微调

本实验旨在验证从头开始的打包预训练是否会影响下游任务的性能。
- 设置: 对BERT-base和BERT-large模型进行完整的两阶段预训练(阶段二序列长度384),然后在美国SQuAD 1.1数据集上进行微调。为了公平比较,打包训练通过减少梯度累积数来匹配未打包训练的有效批次大小。
- 结果:
- 加速比 (见表2): 打包训练在预训练阶段实现了显著的加速,例如BERT-large在阶段二的加速比为1.63倍。
- 下游任务性能 (见表3): 经过打包预训练的模型,在SQuAD 1.1上的F1和EM分数与使用标准预训练的模型相当,差异在0.3%以内,属于正常波动范围。

Table 2: BERT预训练中使用打包的实测加速比。

Table 3: 使用打包进行BERT预训练后在SQuAD 1.1上的得分。

4.4 扩展性分析:加速器数量的影响

本节分析了本文的打包方法与“去填充”(un-padding)方法在多加速器环境下的扩展性。
- 核心论点: “去填充”方法依赖动态内核,每个批次的处理时间不固定,导致多设备间存在负载不平衡。设备必须等待最慢的那个,从而降低了整体加速效果。而本文的打包方法,每个批次的处理时间是固定的,天然具有负载均衡特性。
- 结果 (见图5):
- 打包方法: 加速比(1.913倍)不随加速器数量的增加而改变,表现出完美的扩展性。
- 去填充方法: 随着加速器数量从1增加到2048,其理论加速比从超过2倍急剧下降到仅1.3倍。


图 5: 随着加速器数量增加,理论加速比的比较。

A5 结论

本文系统地研究并解决了LLM训练中的序列打包问题。
首先,通过对多种数据集(涵盖语言、音频、分子领域)的序列长度分布进行可视化,揭示了填充令牌普遍存在导致计算资源大量浪费的现象,一些场景下通过移除填充可获得超过2倍的加速。
其次,本文提出了两种基于成熟求解器的高效打包算法(SPFHP和NNLSHP),它们能在数秒内为海量数据集生成近乎无填充的打包方案,远优于现有缓慢且次优的方法。
第三,本文论证了若不对序列处理算法(如BERT)进行相应调整,打包会导致预测性能下降。为此,提出了一系列必要的模型调整(如注意力掩码、位置编码调整),以保持预测性能。
最后,通过全面的实验证明,得益于这些调整,打包训练能够保持与未打包训练等效的预测性能,同时带来显著的速度提升(超过2倍),且模型修改引入的开销低于5%。实验还证实,打包不会影响下游任务的性能。

未来工作展望
1. 扩展到计算机视觉领域:一个有趣的方向是将打包技术应用于不同尺寸的图像,以加速计算机视觉应用,特别是考虑到Transformer在视觉领域的广泛应用(如ViT)。
2. 改进其他模型:应用本文提出的避免交叉污染的方法来改进RoBERTa、GPT-3、T5等模型,解决它们在拼接不同文档的非连续片段时可能出现的性能下降问题。甚至BERT本身也可能从避免两个拼接段之间的污染中受益。

A6 附录

A 更广泛的影响

减少碳足迹。我们展示了在Wikipedia上预训练BERT时,处理填充令牌的计算开销约为50%。通过消除这部分浪费的计算时间,本文提出的方法为将基于BERT的模型的训练碳足迹减半铺平了道路。

提升技术可及性。此外,我们的方法避免了对自定义内核的需求,使得更广泛的NLP从业者能够轻松获得打包带来的好处。因此,我们希望这项研究能对NLP社区产生积极影响,并且我们认为使用这种方法没有任何缺点。

方法的适用前提与未来探索。我们算法的益处基于两个假设:训练数据集中存在倾斜的长度分布,以及硬件设置在固定批次大小上能高效训练。如果硬件能高效处理可变批次大小,那么像FasterTransformer和fairseq的排序批处理方法将产生相同甚至更大的益处。如果数据集生成方式不同,如GPT模型和RoBERTa(FULL-SENTENCES),所有序列都已满长,则无法拼接,打包也就没有益处。然而,达到满长序列的策略通常会混合来自不同无关文档来源的片段,这可能导致性能下降。我们的论文引入了一种避免序列间污染的方法,同样的方法也可以应用于避免段落间的污染,探索其在BERT预训练之外的益处是未来的工作。

跨语言与跨领域适用性。未来的工作需要研究打包在不同文化和语言生成的文本上的适用性。我们已经证明,使用我们的方法带来的加速不仅发生在Wikipedia上预训练BERT时,也发生在SQuAD和GLUE等其他数据集上。此外,原始英语文本的句子长度分布也显示出类似的特征。我们的研究使我们相信,可压缩的分布在语言任务及其他领域中自然产生,例如DNA序列长度、蛋白质长度和语音(M节)。许多此类序列建模工作负载都基于BERT/transformer架构的变体,因此很容易从我们的加速中受益。

潜在风险与规避。NLP的失败可能对社会产生重大影响。虽然我们的方法产生的错误可以避免,但一个潜在的错误来源是实现。注意力掩码和逐序列损失都需要修改以支持打包。这些更改比自定义内核所需的更改要小得多,但实现和调试仍可能耗时。为了帮助降低任何实现错误的风险,我们在附录中分享了所需更改的参考实现。

B 可复现性声明

所有打包算法的代码均在附录(U节)中提供,并直接链接到我们的GitHub页面,以简化下载和使用。我们甚至为不同变体提供了代码,以及为BERT训练或微调而分词的不同数据集的序列长度直方图。

为了生成学习曲线,可以使用我们向MLPerf™提交的公开结果,并且我们正在准备在其他框架中发布更多代码。为了鼓励在打包序列的模型中使用这些调整,我们还在TensorFlow中提供了详细的解释和代码片段。

本附录提供了详细的数学公式(E节和F节)、一个定理证明(D节)和复杂度计算(G节),以全面支持我们在论文中的主张。

D 关于LAMB超参数校正启发式的定理

问题背景。使用打包时,有效批量大小会改变,因此需要调整LAMB优化器【【35,Large Batch Optimization for Deep Learning: Training BERT in 76 minutes,2019】】的超参数。对于打包因子为$p$的打包数据集,我们按如下方式更新衰减参数:$\beta_1 := \beta_1^p$, $\beta_2 := \beta_2^p$。例如,如果未打包数据集的$\beta_1 = 0.81$,那么对于平均每个样本包含2个序列的打包数据集,应使用值$0.81^2 \approx 0.66$。

定理。假设梯度变化很小或没有变化,并且$p$是自然数,我们可以证明这个启发式方法是确保LAMB中的动量和速度不受打包影响的精确解。这可以通过数学归纳法证明。注意,根据定义$p \ge 1$。

定理 D.1: 对于任何$p \in N$,并假设在$b$个随机样本批次上的相应梯度(近似)相同,在LAMB优化器中选择超参数
可以确保经过$p$个独立更新步骤后的动量和速度与使用$p \times b$个样本进行一次打包更新步骤后的动量和速度相同。

证明:
- 基础情况: 当$p=1$时,等式左右两边相同,这与未打包的情况完全匹配。因此,定理对$p=1$成立。
- 归纳假设: 假设定理对所有直到某个$k$ ($k \ge 1$)的值$p$都成立。
- 归纳命题: 定理对$p = k + 1$成立。
- 归纳步骤证明: 让$l$为损失函数,$w_t$为$t$次