当前位置: 首页 > 科技观察

单GPU一天能训练出什么样的BERT

时间:2023-03-20 01:07:16 科技观察

单GPU一天怎么训练BERT?现在,终于,一些研究人员这样做了,以查看语言模型在有限计算条件下的真实性能。要知道,过去大多数专业人士关注的是语言模型在极端计算条件下的表现。但是这样的语言训练模型环境对于很多研究者和实践者来说是不可能的。所以,这种单GPU单日挑战,有网友表示是他们最想看到的benchmark。就连ViT的作者、谷歌大脑研究员LucasBeyer也推荐了它,称这是一个令人耳目一新的变化。下面一起来看看具体的过程和结果吧~挑战过程这个研究的目标也很明确,就是反其道而行之:降低语言训练模型的计算能力,如何达到BERT的性能计算水平有限。既然要减少计算量,那么第一步肯定是要对模型做一些限制。这个之前也提到过,限时限GPU数量:每天单GPU。GPU方面,研究人员选择了三款进行测试,分别是rtx2080ti、rtxa4000和rtxa6000,每款都有4个CPU核心和32GB内存。在计算量受到限制后,还需要对模型的其他参数进行一些调整,以进一步评估BERT的实际适用性。这些调整包括初始数据设置、模型架构、训练和数据集改进。并且在调整过程中,整体基调围绕“实际使用”,避免跳到专业设置。出于这个原因,研究人员将所有内容都保留在PyTorch框架的实现级别。先说初始数据设置。这部分可以简单概括为以下几点:将标记数据打包成一个长度为128的随机序列,对不相关的段进行切分;删除标签,因为training之前在training中加入,对性能影响不大;将序列长度为64到96的小批量累积成大批量进行处理。然后是架构的修改。下图展示了不同模型的MLMtaskloss随着token数量增加的变化。事实证明,模型损失的衰减在很大程度上取决于模型的大小,而不是模型的类型。此外,由于每个令牌的性能与模型大小之间的关系是紧密耦合的,因此不太可能通过改变Transformer模型的大小和类型来获得较大的性能增益。但是,对于所有相同大小的模型,每个梯度的效率几乎保持不变,因此您可以选择一种能够通过快速搜索加速计算的架构,同时确保模型大小保持不变。具体优化及其他调整如下:减少注意力头数量以降低梯度成本:禁用所有QKV偏差;通过加速梯度计算而不对模型大小产生明显影响,禁用所有线性层偏差;实施缩放正弦位置嵌入,与学习或非缩放正弦嵌入相比的增量增益;LN预归一化比LN后归一化更有益;移除非线性磁头没有效果。接下来就是设置training了,这里就不细说了,只看相关的调整:optimizer还是Adam;设置学习率计划和批量大小;删除丢失链接。(因为Dropout会导致每秒更新的净减少)在数据集方面,研究团队采用了两种基于数据的方法来更好地缩减规模,分别以各种方式对现有数据进行过滤、处理或排序以及交换数据源,详情见下表。性能接近原始BERT。调整好各种参数后,单卡一天的BERT性能如何?看看最后的数据吧!下游性能评估通过GLUE进行。下表显示了3种不同显卡上的分数,与原始BERT非常接近。当模型训练计算16次,即(2天,在8块GPU上),数据和设置还是一样,最终的结果比原来的BERT提升了很多,达到了RoBERTa的性能水平。想了解更多可以点击下方链接查看论文原文~论文原文:https://arxiv.org/abs/2212.14034