从 3 天到 1 小时,谷歌最新优化器将 BERT 预训练疯狂提速 65 倍
去年,谷歌发布了最强的预训练模型BERT,宣告了NLP领域的重大突破。
BERT 在 33 亿个文本的语料库上训练语言模型,然后在不同的下游任务上对其进行微调,在 11 个不同的 NLP 任务上取得了迄今为止最好的结果。
然而,在 33 亿文本的语料库上预训练 BERT 模型的成本非常大。 使用了 16 个自己的 TPU 集群(总共 64 个 TPU)来训练大版本的 BERT,大约耗时 4 天。时间。
如此巨大的训练成本,让普通研究人员很难尝试自己训练一个 BERT。
有没有办法加快BERT的训练?最近,来自 UC、UCLA 和 UCLA 的几位研究人员提出了一种新的优化器 LAMB 优化器,它将训练批量大小推到了硬件的极限。使用 TPU Pod(1024 TPUv3 芯片),BERT 的训练时间从 3 天缩短到 76 分钟!
论文地址:
“关联”
其中一位是杨友,来自加州大学,这项工作是在 Brain 实习期间完成的。
接下来,新智元带来这篇论文的翻译:
加速深度神经网络的最有效方法
大批量训练是加速大型分布式系统中深度神经网络训练的关键。但是,大批量训练很困难,因为它会产生泛化差距。直接优化通常会导致测试集的准确性下降。
BERT 是一种基于深度双向性的最先进的深度学习模型,用于语言理解。对于 BERT,之前的 large-batch 训练技术在增大 batch 大小(例如超过 8192))时效果不佳。BERT 的预训练也需要很长时间才能完成(大约使用了 16 个 TPUv3 芯片)。需要 3 天)。
为了解决这个问题,我们提出了 LAMB 优化器,它可以帮助我们在不损失准确性的情况下将批大小扩大到 65536。
LAMB 是一个通用的优化器,适用于小批量和大批量,除了学习率之外不需要超参数调整。基线 BERT-Large 模型需要 100 万次迭代才能完成预训练,而批量大小为 65536/32768 的 LAMB 只需要 8599 次迭代。通过将批大小推送到 TPUv3 pod 的内存上限,BERT 训练可以在 76 分钟内完成(表 1).
表 1:我们使用 SQuAD-v1 的 F1 分数作为准确度指标。F1 基线结果是通过 BERT 的公开可用的预训练模型(BERT-large)(截至 2019 年 2 月 1 日)实现的。我们在实验中使用 tpuv3。我们使用与基线相同的设置:整体前 9/10 使用序列长度 128,最后 1/10 使用序列长度 512。所有实验运行相同的数字。
深度神经网络的训练非常耗时。目前,减少训练时间的最有效方法是使用多个芯片(例如,CPU、GPU 和 TPU)来并行化 SGD 变体的优化过程。由于前向和后向传播中不同层之间的数据依赖关系,跨层并行化效率不高。相反,研究人员在每次迭代中将数据点并行化为小批量。如果确定了训练次数,那么线性增加batch size就意味着线性减少迭代次数(即更新权重的次数)。为了最小化训练时间,最大化批量大小是理想的。
但是,大批量的训练很困难。例如,批量大小为 512 的 top 训练可实现 80% 以上的 top-5 测试准确率。但是将batch size扩大到4096后,直接训练可能只能得到top 5准确率的50%~60%。
et al (10) 认为大批量训练存在泛化差距。 et al (6) 认为训练时间越长泛化差距越小。但是,训练时间超过 Long意味着大批量训练没有任何好处。
因此,大批量训练的目标是在一定数量内达到可观的准确度。通过设计一系列学习率计划,研究人员能够将训练批大小扩大到 32K,而准确性损失更小。据我们所知,Ying 等人。达到了迄今为止最快的训练速度,并达到了 76+% 的 top-1 准确率。通过使用 LARS 优化器将批量大小扩展到 32K,Ying 等人。使用 TPUv3 Pod 在 2. 2 分钟内完成 -50 训练。(最新富士通研究所刷新了这个速度,将训练时间缩短到74.7秒)
BERT 是目前最先进的深度学习语言模型。BERT 建立在语言理解的深度双向性之上。对于 BERT,之前的大批量训练技术在将批量规模扩大到非常大的规模(例如超过 8192))时效果不佳。BERT的预训练也需要很长时间才能完成(使用16个TPUv3芯片大约3天)。
为了扩大BERT的batch size,本文提出了LAMB优化器。LAMB 支持自适应和精确的逐层校正。
LAMB 是适用于小批量和大批量的通用优化器。用户只需要调整学习率谷歌优化,不需要调整其他超参数。使用 LAMB,我们可以在不损失准确性的情况下将 BERT 预训练的批量规模扩大到 64K。
BERT 预训练包括两个阶段:
(1) 前 9/10 使用 128 的序列长度;
(2) 之后的 1/10 使用 512 的序列长度。
完成 BERT 预训练需要 100 万次迭代,但我们只需要 8599 次迭代,这让我们可以将 BERT 训练时间从 3 天减少到 76 分钟。
我们将批量大小推到了 TPU Pod 的硬件限制。大于 32768 的批处理大小(序列长度 512) 将耗尽内存。大于 65536 的批处理大小(序列长度 128) 不会提供任何加速。我们的优化器可以扩展到 128k 及以上。由于硬件限制,我们在batch size达到32768,序列长度为512时停止,在batch size达到65536,序列长度为128时停止。
本文中的所有 BERT 模型均指 BERT-Large 模型。为了公平比较谷歌优化,本文中的所有实验都运行相同的数量(即固定数量的浮点运算)。我们的结果如表 1 所示。
LAMB 优化器
LAMB的全称是Layer-wise for Batch。
BERT 训练的基线使用权重衰减 Adam 作为优化器,它是 Adam 优化器的变体。另一种已成功应用于训练大批量卷积神经网络的自适应优化器是 LARS。
这些优化器启发我们为大批量 BERT 训练提出新的优化器。我们提出的 LAMB 优化器的概述如算法 1 所示。
实验和结果
定期培训
TPU 是用于浮点运算的强大计算硬件。我们在所有实验中都使用 TPUv3。TPUv3 Pod拥有1024颗芯片,可为混合精度计算提供100%以上的性能。我们的结果如表 1 所示。基线模型使用 sum 数据集进行了预训练。
我们使用与原始 BERT 模型相同的数据集,即 和 ,分别具有 2.5B 和 8 亿字。原始 BERT 模型的作者首先使用 128 的序列长度进行 900k 次迭代,然后使用 512 的序列长度进行 100k 次迭代。
16 个 TPUv3 芯片的总训练时间约为 3 天。我们使用 SQuAD-v1 的 F1 分数作为准确度指标。F1分数越高,准确率越高。斯坦福问答数据集(SQuAD)是一个阅读理解数据集,包含众包工作者从维基百科文章中提出的问题,每个问题的答案是与阅读的文章相对应的一段文本,或者该问题无法回答。我们从 BERT 的公共存储库下载了预训练模型。
使用作者提供的脚本,F1 成绩为 90.395。在我们的代码中,我们使用了 BERT 作者提供的数据集和基线模型,只修改了优化器。通过使用 LAMB 优化器,我们能够在批量大小为 32768 的 15625 次迭代(序列长度为 128 的 14063 次迭代和序列长度为 512 的 1562 次迭代)中获得 91.460 的 F1 分数。
我们将培训时间从 3 天减少到 100 分钟左右。我们将批量大小推到了 TPU Pod 的硬件限制。大于 32768 的批量大小(序列长度 512) 将导致 TPU Pod 内存不足。
我们实现了 76.7% 的弱扩展效率(49.1x 加速,64x 计算资源)。由于我们在 TPU Pod 上使用同步数据并行进行分布式训练,因此在通过互连传输梯度时存在通信开销。梯度的大小与训练模型相同。
混批训练
如前所述,BERT 预训练包括两个阶段:
(1) 前 9/10 epoch 使用 128 的序列长度,
(2) 最后 1/10 epoch 使用的序列长度为 512。
对于第二阶段,由于内存限制,TPUv3 Pod 上的最大批大小为 32768,因此当批大小达到 32768 时,我们停止第二阶段。
对于第一阶段,由于内存限制,TPUv3 Pod 上的最大批量大小为 . 但是,当我们将批量大小从 65536 增加到 65536 时,我们并没有看到加速,所以我们在第一阶段批量大小达到 65536 时停止了。
Smith 等人之前也研究了混合批次训练。然而,他们在训练期间增加了批量大小,而我们减小了批量大小。
我们能够从头到尾充分利用硬件资源。史密斯等人的研究。只有在最后阶段才充分利用硬件资源。增加batch size可以预热和稳定优化过程,但减小batch size会混淆优化过程,导致训练不收敛。
在实验中,我们发现了一种有助于稳定第二阶段优化的方法。由于我们切换到不同的优化问题,因此有必要重新预热优化过程。在第二阶段,我们没有降低学习率,而是从零开始增加学习率(重新预热)。
通过这些改变,我们只需要 8599 次迭代就可以在大约 76 分钟内完成 BERT 训练,达到 101.8%(weak)的弱缩放效率,加速 65.2 倍,使用 64多倍的计算资源。
综上所述
大批量技术是加速神经网络深度训练的关键。在本文中,我们提出了一个支持逐层和逐层的 LAMB 优化器。LAMB 是一种适用于小批量和大批量的通用优化器。通过使用 LAMB,我们可以将 BERT 预训练的批量大小扩展到 64K,而不会损失准确性。我们将 BERT 的训练时间从 3 天减少到 76 分钟左右,并将批量大小推到了 TPU Pod 的硬件限制。我们正在对 LAMB 优化器进行理论分析。