DeepSpeed 数据效率:一个可组合的库,可以更好地利用数据,提高训练效率,并提升模型质量

DeepSpeed Data Efficiency

近年来,大规模深度学习模型正在以多种方式赋能我们,例如通过代码生成提高编程效率通过文本到图像生成提供艺术灵感。为了实现这些服务并不断提升质量,深度学习模型架构正在快速发展,模型规模也正在以惊人的速度增长。例如,从 GPT 到 GPT-3,模型规模在 2 年内增长了 1500 倍。不断增长的模型规模导致了前所未有的训练成本,使许多 AI 从业者难以训练自己的模型。另一方面,一个不太受重视的观点是,数据规模实际上与模型规模以相似的速度增长,而训练成本与两者都成正比。 在下面的图 1 中,我们绘制了过去 5 年中几个代表性语言模型的模型规模和数据规模。从左侧最旧的模型到右侧最新的模型,模型规模和数据规模都以相似的速度增长。这表明提高数据效率的重要性:使用更少的数据和更低的训练成本实现相同的模型质量,或者使用相同数量的数据和相似的训练成本实现更好的模型质量。

Model and data scales

图 1:过去 5 年中代表性语言模型的模型规模(参数数量)和数据规模(训练期间消耗的令牌数量)。

在现有的数据效率技术中,有两个流行的研究方向:数据采样技术旨在通过从整个数据池中采样最合适的下一批数据来提高收敛速度;数据路由技术旨在通过将每个数据路由到模型组件的子集来减少计算量。这些技术提高了数据和训练效率,但现有解决方案在可扩展性、灵活性、可组合性方面存在局限性。 它们通常针对特定训练任务而设计,这使得它们难以扩展自定义策略,并且在来自不同用户的不同工作负载上应用起来灵活性较差。此外,不同的技术是分别实现的,这使得组合多个解决方案以进一步提高数据和训练效率变得具有挑战性。

为了应对这些挑战,我们,DeepSpeed 团队作为微软AI at Scale计划的一部分,很荣幸地宣布推出DeepSpeed 数据效率库 - 一个可组合的框架,可以更好地利用数据,提高训练效率,并提升模型质量。DeepSpeed 数据效率考虑了可扩展性、灵活性、可组合性,并具体展示了以下创新

通过课程学习实现高效数据采样。 课程学习(CL)通过从更简单的数据中采样来提高数据效率。我们提供了一个通用的课程学习库,它使用户能够以最大可扩展性将课程学习应用于他们的模型:用户可以轻松地根据各种可自定义策略分析、索引和采样训练数据。使用这个库,我们能够探索 GPT-3 和 BERT 预训练的不同 CL 策略,并确定最佳解决方案,该解决方案可以提供高达1.5 倍的数据节省,同时仍然保持相似的模型质量。

通过随机分层令牌丢弃实现高效数据路由。 我们提出了一种新颖的数据路由技术,称为随机分层令牌丢弃(random-LTD),它跳过所有中间层中输入令牌子集的计算。Random-LTD 采用了一种简单但有效的路由策略,并且需要最少的模型架构变更。 它可以灵活地将 random-LTD 应用于各种任务(GPT-3/BERT 预训练和 GPT/ViT 微调),并且我们在数据效率方面取得了显著的提升(高达1.5 倍的数据节省,同时仍然保持模型质量)。

无缝组合多种方法。 提出的 DeepSpeed 数据效率框架无缝地组合了课程学习和 random-LTD 技术,并且只需要对用户代码进行最小的更改。此外,通过组合这两种方法,我们可以实现更好的数据和训练效率:对于 GPT-3 1.3B 预训练,与基线训练相比,我们实现了2 倍的数据和 2 倍的时间节省,同时获得了更好或相似的模型质量。使用相同数量的数据时,我们的方法进一步提高了基线模型的质量。用户还可以通过添加额外的可组合数据效率技术来扩展和贡献该库。

以下博客文章将进一步探讨这些进展中的每一个。有关更多技术细节,请阅读我们的论文,“Random-LTD:随机分层令牌丢弃带来大型 Transformer 的高效训练”,该论文介绍了 random-LTD 技术,以及“DeepSpeed 数据效率:通过高效数据采样和路由提高深度学习模型质量和训练效率”,该论文介绍了课程学习技术和整体 DeepSpeed 数据效率框架。

通过课程学习实现高效数据采样

动机

课程学习旨在通过在训练初期呈现相对容易或简单的示例来提高训练收敛速度。构建课程学习解决方案通常需要两个组成部分:难度度量(即如何量化每个数据样本的难度)和节奏函数(即如何在采样下一个训练数据批次时决定课程难度范围)。课程学习已成功应用于各种训练任务,去年我们还发布了一种针对 GPT 风格模型预训练的特定课程学习技术(序列长度预热)(请参阅我们发表在 NeurIPS 2022 上的论文“稳定性-效率困境:研究 GPT 模型训练的序列长度预热”中的技术细节)。然而,现有作品中的一个共同局限性是,不存在通用的可扩展的课程学习库,允许从业人员轻松地应用自定义课程难度度量、度量组合和节奏函数。

设计

为了解决现有解决方案的局限性,我们设计并实现了一个通用的课程学习库,强调可扩展性。它由三个组件组成,如下图 2(上部)所示。首先,我们使用数据分析器执行离线的 CPU 独占数据分析,该分析器根据任何难度度量(例如序列长度、词汇稀有度或用户定义的任何内容)对整个数据池进行索引。接下来,在训练期间,课程调度器根据节奏函数(例如线性、平方根或用户提供的任何策略)确定当前步骤的难度阈值。然后数据采样器将从索引的数据池中采样具有所需难度的样本。总的来说,这种通用实现将使用户能够以最大的可定制性探索他们工作负载上的课程学习(更多技术细节请参阅我们的 DeepSpeed 数据效率论文)。

DeepSpeed Data Efficiency framework

图 2:DeepSpeed 数据效率框架的设计。

评估结果

使用这种通用且可扩展的课程学习解决方案来进行 GPT-3 和 BERT-Large 模型预训练,我们能够轻松地根据高达 7 个难度度量来分析和索引庞大的训练数据,并实现更好的数据和训练效率。对于 GPT-3 预训练,我们的解决方案(使用最佳的难度度量组合,包括基于截断的序列长度和词汇稀有度)实现了 1.5 倍的数据和训练成本节省,同时仍然保持与基线相同的模型质量(表 1 中的案例 (8) 与 (1))。对于 BERT-Large 预训练,我们的解决方案(使用最佳的难度度量,即词汇稀有度)实现了 1.5 倍的节省,同时仍然保持模型质量(表 2 中的案例 (8) 与 (1))。另一方面,我们的解决方案在使用与基线相同数量的数据时,可以进一步提高模型质量(表 1 中的案例 (2) 到 (6),表 2 中的案例 (2) 到 (6))。

案例 预训练数据 平均 0 阶精度 平均 10 阶精度
(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) CL 组合 (3) 和 (4) 300B 43.0 44.4
(7) 基线 200B (1.5 倍) 41.9 44.0
(8) CL 组合 (2) 和 (4) 200B (1.5 倍) 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) CL 组合 (2) 和 (4) 1049B 87.60
(6) CL 组合 (3) 和 (4) 1049B 87.06
(7) 基线 703B (1.5 倍) 87.19
(8) CL 组合 (2) 和 (4) 703B (1.5 倍) 87.29

表 2:BERT-Large 预训练数据消耗和 8 个任务上的平均 GLUE 微调分数。

通过随机分层令牌丢弃实现高效数据路由

动机

标准数据路由通常将完整的图像/序列馈送到模型的所有层。然而,这个过程可能不是训练效率的最佳方法,因为图像的某些部分(或句子的某些词语)不需要频繁的特征更新。因此,已经提出了令牌丢弃方法,如下图 3 (b) 所示,它跳过句子中某些令牌/词语(即图 3 (b) 中的 G-2 令牌)的计算,以节省计算成本。

尽管现有方法显示出有希望的结果,但它们也存在一些不足之处:(1) 大多数工作仅关注 BERT(仅针对文本数据的编码器)预训练,而不包括解码器预训练和/或其他模态(例如图像);(2) 跳过层的可能性是有限的,这限制了总的计算节省量。通过分析现有方法,我们发现限制它们跳过和覆盖能力的潜在主要问题是所有跳过的层中 G-2 令牌的注意力机制的丢失,因为多头注意力在不同的层深度关注不同的令牌,并且注意力图与 Transformer 架构中间的依赖关系最紧密地对齐。

设计

为了解决这个主要问题,我们提出了 random-LTD,一种随机的分层的令牌丢弃机制,它仅处理整个数据批次中所有中间层的子集令牌,以节省计算成本(有关更多详细信息,请参阅我们的 Random-LTD 论文)。因此,每个令牌很少绕过所有中间层,模型可以捕获它与其他令牌的依赖关系。下图 3 展示了 random-LTD 与基线的比较,其中 random-LTD 将输入令牌分成两组,只有第一组涉及计算。

random-LTD

图 3:基线、现有令牌丢弃方法和 random-LTD 之间的比较。请注意,对于 random-LTD,只有部分输入(组 1)用于层 i。

Random-LTD 是一种简单但非常有效的方法。特别地,与其他现有的 token 丢弃方法相比,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 阶精度
(1) 基线 300B 42.5
(2) Random-LTD 300B 43.7
(3) Random-LTD 200B (1.5 倍) 42.5

表 3:GPT-3 1.3B 预训练数据消耗量和 19 个任务的平均评估准确率。

案例 预训练数据 GLUE 微调分数
(1) 基线 1049B 87.29
(2) Random-LTD 524B (2x) 87.32

表 4:BERT-Large 预训练数据消耗量和 8 个任务的平均 GLUE 微调得分。

案例 训练数据 ImageNet Top-1 准确率
(1) 基线 100% 84.65
(2) Random-LTD 77.7% (1.3x) 84.70

表 5:ViT 在 ImageNet 上的微调结果。

案例 训练数据 PTB PPL
(1) 基线 100% 16.11
(2) Random-LTD 100% 15.9

表 6:GPT-2 350M 在 PTB 任务上的微调结果。

组合数据效率技术以实现更多

课程学习和 random-LTD 技术是互补的。在 DeepSpeed 数据效率框架内,我们将这两种技术无缝地组合在一起,如上图 2 所示,其中课程学习有助于对下一个数据批次进行采样,random-LTD 有助于确定如何将每个采样数据路由到模型中。DeepSpeed 数据效率解决了组合这两种技术时的几个复杂问题,以便用户可以轻松地将每种技术或两种技术都应用到其训练流水线中。DeepSpeed 数据效率的可组合性也适用于数据采样和路由技术,因此它提供了一个平台来实现和组合其他数据效率技术。

组合后的 DeepSpeed 数据效率解决方案利用了两种数据效率技术,并实现了更好的数据和训练效率。以 GPT-3 预训练任务为例,将 CL 和 random-LTD 组合在一起,使用 100% 的数据,在我们的实验中实现了最好的模型质量(表 7 案例 (1) 到 (4))。在使用 50% 数据进行预训练时,基线训练会导致更差的零样本和 10 样本评估准确率,并且使用 CL 或 random-LTD 只能恢复一部分 10 样本准确率的损失。另一方面,组合后的数据效率解决方案在使用 100% 数据的情况下实现了与基线相同或更好的准确率结果,证明了 2 倍的数据和 2 倍的时间节省(案例 (5) 到 (8))。类似的 2 倍数据节省的好处也观察到了在将我们的解决方案应用于 BERT 预训练时。

案例 预训练数据 预训练时间(在 64 个 V100 上) 平均 0 阶精度 平均 10 阶精度
(1) 基线 300B 260 小时 42.5 44.0
(2) CL 最佳指标 300B 259 小时 43.6 44.9
(3) random-LTD 300B 263 小时 43.7 44.9
(4) CL + random-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) random-LTD 150B (2x) 131 小时 (2x) 42.7 43.5
(8) CL + random-LTD 150B (2x) 130 小时 (2x) 42.8 44.0

表 7:GPT-3 1.3B 预训练数据/时间消耗量和 19 个任务的平均评估准确率。

总结

我们很高兴与社区分享 DeepSpeed 数据效率库,并根据您的反馈对其进行改进。请在 DeepSpeed GitHub网站 上找到代码、教程和文档。有关更多技术细节,请阅读我们的 Random-LTD 论文DeepSpeed 数据效率论文。我们相信,我们可组合的库和新颖的数据效率技术将帮助用户降低训练成本,同时保持模型质量,或者在类似成本下实现更好的质量。我们希望 DeepSpeed 数据效率能够成为一个平台,促进和加速深度学习数据效率的未来研究。

更新: