DeepSpeed 数据效率:一个可组合的库,可以更好地利用数据,提高训练效率,并提升模型质量
最近,大规模深度学习模型在许多方面赋予我们更多的能力,例如通过代码生成提高编程效率和通过文本到图像生成提供艺术灵感。为了支持这些服务并不断提高质量,深度学习模型架构迅速发展,模型规模也在以惊人的速度增长。例如,从GPT到GPT-3,模型规模在两年内增长了1500倍。不断增加的模型规模导致了前所未有的训练成本,使得许多AI从业者难以训练自己的模型。另一方面,一个较少被强调的观点是数据规模实际上正在以与模型规模相似的速度增长,而训练成本与两者成正比。 在下图1中,我们绘制了过去5年中几个代表性语言模型的模型和数据规模。从左边最老的模型到右边最新的模型,模型和数据规模都以相似的速度增长。这证明了提高数据效率的重要性:用更少的数据和降低的训练成本实现相同的模型质量,或用相同数量的数据和相似的训练成本实现更好的模型质量。
图1:过去5年中代表性语言模型的模型规模(参数数量)和数据规模(训练期间消耗的标记数量)。
在现有的数据效率技术中,有两个流行的研究方向:数据采样技术旨在通过从整个数据池中采样最合适的下一批数据来提高收敛速度;数据路由技术旨在通过将每个数据仅路由到模型组件的子集来减少计算量。这些技术提高了数据和训练效率,但现有的解决方案在可扩展性、灵活性和可组合性方面存在局限性。它们通常是为特定的训练任务设计的,这使得它们难以通过定制策略进行扩展,并且在不同用户的不同工作负载上应用时缺乏灵活性。此外,不同的技术是单独实现的,这使得将多种解决方案组合起来以进一步提高数据和训练效率变得具有挑战性。
为了解决这些挑战,我们,作为微软AI at Scale计划一部分的DeepSpeed团队,自豪地宣布DeepSpeed数据效率库——一个可组合的框架,它更好地利用数据,提高训练效率,并提升模型质量。DeepSpeed数据效率考虑了可扩展性、灵活性和可组合性,并特别展示了以下创新:
通过课程学习实现高效的数据采样。 课程学习(CL)通过从较简单的数据中采样来提高数据效率。我们提供了一个通用的课程学习库,使用户能够以最大可扩展性将课程学习应用于他们的模型:用户可以轻松地根据各种可定制的策略分析、索引和采样他们的训练数据。使用这个库,我们能够探索不同的CL策略用于GPT-3和BERT的预训练,并确定了最佳解决方案,该方案提供了高达1.5倍的数据节省,同时仍保持相似的模型质量。
通过随机分层令牌丢弃实现高效数据路由。 我们提出了一种名为随机分层令牌丢弃(random-LTD)的新数据路由技术,以跳过所有中间层中输入令牌子集的计算。Random-LTD采用了一种简单而有效的路由策略,并且需要最小的模型架构更改。 它可以灵活地应用于各种任务(GPT-3/BERT预训练和GPT/ViT微调),并且我们实现了显著的数据效率提升(在保持模型质量的同时,最多可节省1.5倍的数据)。
无缝组合多种方法。 提出的DeepSpeed数据效率框架无缝地结合了课程学习和随机LTD技术,并且只需要在用户代码端进行最小的更改。此外,通过组合这两种方法,我们可以实现更好的数据和训练效率:对于GPT-3 1.3B预训练,我们实现了2倍的数据和2倍的时间节省,同时与基线训练相比,模型质量更好或相似。当使用相同数量的数据时,我们的方法进一步提高了模型质量,超过了基线。用户还可以通过添加额外的数据效率技术来扩展和贡献库,以组合在一起。
这些进展在下面的博客文章中都有进一步的探讨。有关技术细节的更多信息,请阅读我们的论文,“Random-LTD: Random and Layerwise Token Dropping Brings Efficient Training for Large-scale Transformers” 描述了随机-LTD技术,以及“DeepSpeed Data Efficiency: Improving Deep Learning Model Quality and Training Efficiency via Efficient Data Sampling and Routing” 描述了课程学习技术和整体的DeepSpeed数据效率框架。
通过课程学习实现高效数据采样
动机
课程学习旨在通过在训练早期呈现相对较容易或较简单的样本来提高训练收敛速度。构建一个课程学习解决方案通常需要两个组件:难度度量(即如何量化每个数据样本的难度)和进度函数(即如何决定在采样下一个训练数据批次时的课程难度范围)。课程学习已成功应用于各种训练任务,去年我们还发布了一种特定的课程学习技术(序列长度预热)用于GPT风格模型的预训练(详见我们在NeurIPS 2022上发表的论文“The Stability-Efficiency Dilemma: Investigating Sequence Length Warmup for Training GPT Models”中的技术细节)。然而,现有工作的一个共同限制是缺乏一个通用且可扩展的课程学习库,这使得从业者难以轻松应用自定义的课程难度度量、度量组合和进度函数。
设计
为了解决现有解决方案的局限性,我们设计并实现了一个强调可扩展性的通用课程学习库。它由以下三个组件组成,如图2所示(顶部部分)。首先,我们使用数据分析器进行离线CPU数据分析,该分析器基于任何难度指标(如序列长度、词汇稀有度或用户定义的任何指标)对整个数据池进行索引。接下来,在训练过程中,课程调度器根据一个步进函数(如线性、根函数或用户提供的任何策略)确定当前步骤的难度阈值。然后,数据采样器将从索引的数据池中采样具有所需难度的数据。总体而言,这种通用实现将使用户能够在其工作负载上探索课程学习,并具有最大的可定制性(更多技术细节请参见我们的DeepSpeed数据效率论文)。
图2:DeepSpeed数据效率框架的设计。
评估结果
使用这种通用且可扩展的课程学习解决方案进行GPT-3和BERT-Large模型的预训练,我们能够基于多达7个难度指标轻松分析和索引庞大的训练数据,并提高数据和训练效率。对于GPT-3预训练,我们采用最佳难度指标(基于截断的序列长度和词汇稀有度的组合)的解决方案实现了1.5倍的数据和训练成本节省,同时仍保持模型质量与基线相同(表1案例(8) vs. (1))。对于BERT-Large预训练,我们采用最佳难度指标(词汇稀有度)的解决方案实现了1.5倍的节省,同时仍保持模型质量(表2案例(8) vs. (1))。另一方面,当使用与基线相同数量的数据时,我们的解决方案可以进一步提高模型质量(表1案例(2)到(6),表2案例(2)到(6))。
| 案例 | 预训练数据 | 平均0-shot准确率 | 平均10-shot准确率 |
|---|---|---|---|
| (1) 基线 | 300B | 42.5 | 44.0 |
| (2) 基于CL截断的序列长度 | 300B | 43.4 | 44.8 |
| (3) 基于CL重塑的序列长度 | 300B | 43.0 | 44.5 |
| (4) CL词汇稀有度 | 300B | 42.3 | 44.5 |
| (5) CL 结合 (2) 和 (4) | 300B | 43.6 | 44.9 |
| (6) 结合 (3) 和 (4) 的 CL | 300B | 43.0 | 44.4 |
| (7) 基线 | 200B (1.5倍) | 41.9 | 44.0 |
| (8) CL 结合 (2) 和 (4) | 200B (1.5x) | 42.7 | 44.5 |
表1:GPT-3 1.3B预训练数据消耗及在19个任务上的平均评估准确率。
| 案例 | 预训练数据 | GLUE微调分数 |
|---|---|---|
| (1) 基线 | 1049B | 87.29 |
| (2) 基于CL截断的序列长度 | 1049B | 87.31 |
| (3) 基于CL重新排序的序列长度 | 1049B | 87.48 |
| (4) CL词汇稀有度 | 1049B | 87.36 |
| (5) 结合 (2) 和 (4) 的 CL | 1049B | 87.60 |
| (6) CL 结合 (3) 和 (4) | 1049B | 87.06 |
| (7) 基线 | 703B (1.5倍) | 87.19 |
| (8) CL 结合 (2) 和 (4) | 703B (1.5x) | 87.29 |
表2:BERT-Large预训练数据消耗和8个任务上的平均GLUE微调分数。
通过随机分层令牌丢弃实现高效数据路由
动机
标准的数据路由通常将完整的图像/序列输入到模型的所有层中。然而,这个过程对于训练效率可能不是最优的,因为图像的某些部分(或句子的某些词)不需要频繁的特征更新。因此,提出了令牌丢弃方法,如图3(b)所示,跳过句子中某些令牌/词(即图3(b)中的G-2令牌)的计算,以节省计算成本。
尽管现有方法显示出有希望的结果,但它们也表现出几个注意事项:(1)大多数工作仅关注BERT(仅对文本数据进行编码器预训练),不包括解码器预训练和/或其他模态(例如,图像);(2)跳过层的能力有限,这限制了总计算节省量。通过分析现有方法,我们发现限制其跳过和覆盖能力的潜在主要问题是所有跳过层的G-2令牌的注意力机制丢失,因为多头注意力在不同层深度关注不同的令牌,并且注意力图与依赖关系在变压器架构的中间部分最为强烈地对齐。
设计
为了解决这个主要问题,我们提出了random-LTD,一种随机和分层的令牌丢弃机制,该机制仅处理整个数据批次中所有中间层的一部分令牌,以节省计算成本(更多详情请参见我们的Random-LTD论文)。因此,每个令牌很少会绕过所有中间层,并且模型可以捕获其与其他令牌的依赖关系。与基线相比,random-LTD的示意图如下面的图3所示,其中random-LTD将输入令牌分成两组,只有第一组涉及计算。
图3:基线、现有令牌丢弃方法和random-LTD之间的比较。请注意,对于random-LTD,只有部分输入(组1)用于第i层。
Random-LTD 简单却非常有效。特别是与其他现有的令牌丢弃方法相比,Random-LTD (1) 对每一层的两个不同组进行纯随机选择,因此我们不需要为选择标准进行任何专家设计;(2) 能够应用于所有中间层以实现更好的节省比例;(3) 展示了对于编码器和解码器模型的强大泛化能力;(4) 易于使用,无需进行大量模型更改。这些优势使得在将 Random-LTD 应用于各种工作负载时具有最大的灵活性。
评估结果
由于其极大的灵活性,我们能够将random-LTD方法应用于更广泛的应用中,包括BERT和GPT的预训练以及ViT和GPT的微调任务。在所有情况下,random-LTD在使用较少数据的情况下实现了与基线相似的模型质量,和/或在使用相同数据量的情况下实现了更好的模型质量(表3至6)。对于GPT-3和BERT-Large的预训练,random-LTD在保持相同模型质量的同时实现了1.5-2倍的数据节省。对于GPT-3,我们还测试了使用完整数据的random-LTD,与基线相比进一步提高了模型质量。
| 案例 | 预训练数据 | 平均0-shot准确率 |
|---|---|---|
| (1) 基线 | 300B | 42.5 |
| (2) 随机-LTD | 300B | 43.7 |
| (3) 随机-LTD | 200B (1.5倍) | 42.5 |
表3:GPT-3 1.3B预训练数据消耗及在19个任务上的平均评估准确率。
| 案例 | 预训练数据 | GLUE微调分数 |
|---|---|---|
| (1) 基线 | 1049B | 87.29 |
| (2) 随机-LTD | 524B (2x) | 87.32 |
表4:BERT-Large预训练数据消耗和8个任务上的平均GLUE微调分数。
| 案例 | 训练数据 | ImageNet Top-1 准确率 |
|---|---|---|
| (1) 基线 | 100% | 84.65 |
| (2) 随机-LTD | 77.7% (1.3倍) | 84.70 |
表5:ViT在ImageNet上的微调结果。
| 案例 | 训练数据 | PTB PPL |
|---|---|---|
| (1) 基线 | 100% | 16.11 |
| (2) 随机-LTD | 100% | 15.9 |
表6:GPT-2 350M在PTB任务上的微调结果。
组合数据效率技术以实现更多
课程学习和随机LTD技术是互补的。在DeepSpeed数据效率框架内,我们无缝地结合了这两种技术,如上图2所示,其中课程学习有助于采样下一个数据批次,而随机LTD则帮助决定如何在模型内部路由每个采样的数据。DeepSpeed数据效率在结合这两种技术时解决了几个复杂性,使用户可以轻松地将每种技术或两者都应用到他们的训练管道中。DeepSpeed数据效率的可组合性也适用于一般的数据采样和路由技术,因此它提供了一个平台来实现和组合额外的数据效率技术。
组合的DeepSpeed数据效率解决方案利用了数据效率技术,并实现了更好的数据和训练效率。以GPT-3预训练任务为例,组合CL和random-LTD,使用100%的数据,在我们的实验中获得了最佳的模型质量(表7案例(1)至(4))。当使用50%的数据进行预训练时,基线训练导致零样本和10样本评估准确率下降,而使用CL或random-LTD只能恢复部分10样本准确率损失。另一方面,组合的数据效率解决方案在使用100%数据时实现了与基线相同或更好的准确率结果,展示了2倍的数据和2倍的时间节省(案例(5)至(8))。当将我们的解决方案应用于BERT预训练时,也观察到了类似的2倍数据节省的好处。
| 案例 | 预训练数据 | 预训练时间(在64个V100上) | 平均0-shot准确率 | 平均10-shot准确率 |
|---|---|---|---|---|
| (1) 基线 | 300B | 260小时 | 42.5 | 44.0 |
| (2) CL 最佳指标 | 300B | 259小时 | 43.6 | 44.9 |
| (3) 随机-LTD | 300B | 263小时 | 43.7 | 44.9 |
| (4) CL + 随机-LTD | 300B | 260小时 | 43.8 | 45.1 |
| (5) 基线 | 150B (2x) | 130小时 (2x) | 42.0 | 42.7 |
| (6) CL 最佳指标 | 150B (2x) | 129小时 (2x) | 42.6 | 43.7 |
| (7) 随机-LTD | 150B (2x) | 131小时 (2x) | 42.7 | 43.5 |
| (8) CL + 随机-LTD | 150B (2x) | 130小时 (2x) | 42.8 | 44.0 |
表7:GPT-3 1.3B预训练数据/时间消耗及在19个任务上的平均评估准确率。
结论
我们非常高兴能与社区分享DeepSpeed数据效率库,并根据您的反馈进行改进。请在DeepSpeed GitHub和网站上找到代码、教程和文档。更多技术细节,请阅读我们的Random-LTD论文和DeepSpeed数据效率论文。我们相信,我们的可组合库和创新的数据效率技术将帮助用户在保持模型质量的同时降低训练成本,或在相似成本下实现更好的质量。我们希望DeepSpeed数据效率能成为一个激励和加速未来深度学习数据效率研究的平台。