bert是目前最强大的nlp预训练模型,也是工业界目前最耗时的应用,计算量远高于imagenet。谷歌的研究人员提出新的优化器,使用1024块tpu,将bert的训练时间从3天成功缩短到76分钟,提速 65.2 倍!
去年,谷歌发布了最强预训练模型 bert,宣告了nlp领域的一项重大突破。
bert 在 33 亿文本的语料上训练语言模型,再分别在不同的下游任务上微调,在11个不同的 nlp 任务均得到了目前为止最好的结果。
不过,在 33 亿文本的语料上预训练一个 bert 模型的成本是非常大的,谷歌用了 16 个自己的 tpu 集群(一共 64 块 tpu)来训练大号版本的 bert,一共花了约4天的时间。
如此巨大的训练成本,让普通研究者难以尝试自己去训练一个bert。
有没有办法加快bert的训练呢?近日,来自google、uc berkeley、ucla的几位研究人员提出新的优化器——lamb优化器,将训练的batch size推到硬件的极限,使用 tpu pod ( 1024块 tpuv3 芯片),将bert的训练时间从3天缩短到了76分钟!
论文地址:
https://arxiv.org/pdf/1904.00962.pdf
其中一作尤洋(yang you)来自uc berkeley,这项工作于他在google brain实习期间完成。
接下来,新智元带来对这篇论文的译介:
加快深度神经网络最有效的方法
大批量训练(large-batch training)是加快大型分布式系统中深度神经网络训练的关键。然而,large-batch训练是很困难的,因为它会产生一种泛化差距(generalization gap)。直接优化通常会导致测试集的准确性下降。
bert是一种最先进的深度学习模型,建立在用于语言理解的深度双向transformers之上。对bert来说,当扩大批大小(例如超过8192)时,以前的large-batch训练技术效果并不好。bert的预训练也需要很长时间才能完成(使用16个tpuv3芯片大约需要3天)。
为了解决这个问题,我们提出了lamb优化器,它帮助我们将批大小扩大到65536,而不会丢失准确性。
lamb是一个通用的优化器,适用于小批量和大批量,并且除了学习率外不需要超参数调优。基线bert-large模型需要100万次迭代才能完成预训练,而batch size为65536/32768的lamb只需要8599次迭代。我们将batch size推到tpuv3 pod的内存上限,可以在76分钟内完成bert训练(表1)。
表1:我们使用squad-v1的f1 score作为精度指标。f1的基线成绩是由bert的公共github提供的预训练模型(bert- large)实现的(截止到2019年2月1日)。我们在实验中使用tpuv3。我们使用了与基线相同的设置:总epochs的前9/10使用序列长度128,最后1/10使用序列长度512。所有的实验运行相同数量的epochs。
深度神经网络的训练是十分耗时的。目前,减少训练时间最有效的方法是使用多个芯片(如cpu、gpu和tpu)来并行化sgd变体的优化过程。由于前向传播和反向传播中不同层之间的数据依赖关系,使得跨层的并行化效率并不高。相反,研究人员在每次迭代中并行化小批量中的数据点。如果确定了训练的epochs的数量,那么线性地增大batch size意味着会线性地减少迭代次数(即更新权重的次数)。为了最小化训练时间,最大化batch size将是理想的。
然而,大批量的训练是困难的。例如,使用大小为512的batch size训练在imagenet上训练alexnet,能实现80%以上的top-5测试精度。但将batch size扩大到4096之后,直接训练可能只能获得50% ~ 60%的top 5精度。
keskar等人(10)认为在大批量训练中存在一个泛化差距(generalization gap)。hoffer等人(6)认为,训练时间越长,泛化差距越小。然而,训练时间过长意味着进行大批量训练就没有好处了。
因此,大批量训练的目标是在一定数量的epochs内达到可观的精度。通过设计一系列的学习率计划表,研究者已经可以将imagenet训练的batch size扩大到32k,并且精度损失较小。据我们所知,ying et al.实现了目前最快的imagenet训练速度,并且达到了76+%的top-1精度。通过使用lars优化器,将batch size扩展到32k,,ying等人使用tpuv3 pod,在2.2分钟内完成了resnet-50的imagenet训练。(最新,富士通研究院刷新了这一速度,将imagenet训练时间降到74.7秒)
bert是目前最先进的深度学习语言模型。bert建立在用于语言理解的深度双向transformers之上。对bert来说,当将batch size扩大到非常大时(例如超过8192),以前的large-batch训练技术效果并不好。bert的预训练也需要很长时间才能完成(使用16个tpuv3芯片大约需要3天)。
为了扩大bert的batch size,本文提出lamb优化器。lamb支持自适应element-wise updating和精确的逐层修正(layer-wise correction)。
lamb是一个适用于小批量和大批量的通用优化器。用户只需要调整学习率,不需要调其他超参数。使用lamb,我们可以将bert预训练的批大小扩大到64k,而不会丢失准确性。
bert预训练包括两个阶段:
(1)前9/10的epochs使用128的序列长度;
(2)后1/10 epochs使用512的序列长度。
baseline需要100万次迭代来完成bert预训练,但我们只需要8599次迭代,这使我们能够将bert训练时间从3天减少到76分钟。
我们将批大小推到了tpu pod的硬件极限。批大小大于32768(序列长度为512)的话将耗尽内存。批大小大于65536(序列长度为128)则不会带来任何加速。我们的优化器可以将批大小扩大到128k,甚至更大。由于硬件限制,序列长度为512的设置下,我们在批大小达到32768时停下,在序列长度为128的设置下,批大小达到65536时停止。
本文中所有的bert模型都指bert-large模型。为了进行公平的比较,本文所有的实验都运行相同数量的epochs(即固定数量的浮点运算)。我们的结果如表1所示。
lamb优化器
lamb的全称是layer-wise adaptive moments optimizer for batch training。
bert训练的基线使用权重衰减的adam作为优化器,这是adam优化器的一个变体。另一个成功应用于大批量卷积神经网络训练的自适应优化器是lars。
这些优化器启发我们提出了新的优化器,用于大批量bert训练。我们提出的lamb优化器的概述如算法1所示。
实验和结果
常规训练
tpu是浮点运算的强大计算硬件。我们在所有的实验中都使用了tpuv3。tpuv3 pod有1024个芯片,可以为混合精度计算提供超过100 petaflops的性能。我们的结果如表1所示。基线模型在预训练时使用wikipedia和bookscorpus数据集。
我们使用了与原始bert模型相同的数据集,即wikipedia和bookscorpus,分别有2.5b和8亿单词。原始bert模型的作者首先以128的序列长度进行了900k次迭代训练,然后以512的序列长度进行了100k迭代训练。
16个tpuv3芯片的总训练时间约为3天。我们使用squad-v1的f1分数作为精度指标。f1得分越高,准确度越高。斯坦福问答数据集(squad)是一个阅读理解数据集,包含众包工作者从维基百科的文章中提出的问题,每一个问题的答案都是对应阅读文章的一段文字,或者该问题无法回答。我们从bert的公开github库上下载了预训练好的模型。
使用作者提供的脚本,baseline的f1得分为90.395。在我们的代码中,我们使用了bert的作者提供的数据集和基线模型,只修改了优化器。通过使用lamb优化器,我们能够在批大小为32768的15625次迭代中获得91.460的f1分数(序列长度为128的14063次迭代和序列长度为512的1562次迭代)。
我们把训练时间从3天减少到100分钟左右。我们将批大小推到了tpu pod的硬件极限。批大小大于32768时(序列长度为512)将导致tpu pod耗尽内存。
我们实现了76.7%的弱扩展效率(49.1倍的加速,64倍的计算资源)。由于我们在tpu pod上使用同步数据并行来进行分布式训练,因此在互连上传输梯度会带来通信开销。梯度的大小与训练后的模型相同。
mixed-batch训练
如前所述,bert预训练包括两个阶段:
(1)前9/10的epoch使用128的序列长度,
(2)最后1/10的epoch使用512的序列长度。
对于第二阶段,由于内存限制,tpuv3 pod上的最大批大小为32768,因此我们将第二阶段在批大小达到32768时停止。
对于第一阶段,由于内存限制,tpuv3 pod上的最大批大小是131072。但是,当我们将批大小从65536增加到131072时,并没有看到加速,因此我们在第一阶段批大小达到65536时停止。
此前,smith等人也研究了混合批训练。但是,他们在训练中增大了批大小,而我们减小了批大小。
我们能够从头到尾充分利用硬件资源。smith等人的研究只在最后阶段充分利用了硬件资源。增加批大小可以warm-up和稳定优化过程,但是减小批大小会给优化过程带来混乱,导致训练不收敛。
在实验中,我们发现了一种有助于稳定第二阶段优化的方法。由于我们切换到一个不同的优化问题,有必要重新warm-up优化过程。在第二阶段,我们没有降低学习率,而是将学习率从零开始增加(re-warm-up)。
通过这些改变,我们只需要8599次迭代,可以在76分钟左右完成bert训练,实现了101.8%的弱缩放效率(weak scaling efficiency),提速65.2倍,利用了64倍的计算资源。
结论
large batch技术是加快神经网络深度训练的关键。在本文中,我们提出了支持adaptive element-wise updating和layer-wise correction的lamb优化器。lamb是一个通用的优化器,适用于小批量和大批量。通过使用lamb,我们可以将bert预训练的batch size扩展到64k,而不会丢失准确性。我们将bert的训练时间从3天减少到76分钟左右,并将批大小推到了tpu pod的硬件极限。我们正在研究lamb优化器的理论分析。
美国海军两大旗舰蓝岭号、惠特尼山号已经不再适合担任旗舰
中兴FTTR常用业务配置指导(上)
4.35V/4.2V芯片锂电池0.3A充电管理芯片板
实现了多媒体数据的同步传输的USB3.0 HUB设计方案
RUI3:简化物联网低功耗LoRaWAN®设备的开发(二)
谷歌新研究使用1024块TPU,将BERT的训练时间从3天成功缩短到76分钟
射频技术大不同|RFID技术及其在电子政务中的应用
MAX15041 内置开关的同步DC-DC转换器
华为Mate 40于今日正式全网开售
智慧环卫通信系统的工作原理及功能分析
加密货币领域中的全球最大线下销售网络平台Pundi X介绍
绍兴移动打造全省5G基础建设先行区和5G产业应用示范区
使用数字隔离器进行设计
解析医疗健康领域的投资机会
福特申请了一项汽车通信的专利可以在单个交易中交易CMMP代币
动力电池进入成熟阶段 全球锂电设备业务将实现持续快速增长
传感器市场展望:唯有技术创新可解发展之忧
蚂蚁集团任命新合规负责人
如何测试数字万用表检测贴片元件好坏?
裕太微推出车载千兆以太网物理层芯片YT8011系列