挑战单卡单日训练BERT,ViT作者推荐

结果:性能接近基准BERT

Pine 发自 凹非寺

量子位 | 公众号 QbitAI

单个GPU,只花一天时间,能把BERT训练成什么样?

现在,终于有研究人员做这件事了,在有限的计算条件之下看看语言模型的真实性能如何。

要知道在以往,大多数专业人员的关注点都在极端计算的条件下的语言模型性能。

但这样的语言训练模型环境,对很多研究人员和从业人员是不可能存在的。

因此这个单天单个GPU的挑战,就有网友称是一个最希望看到的基准。

连ViT作者,谷歌大脑研究员Lucas Beyer都发文推荐,称这是一个令人耳目一新的转变。

具体的过程和结果如何,一起来看看~

挑战过程

这次研究的目标也很明确,就是反其道行之:缩小语言训练模型的算力,在有限的计算量的情况下如何达到BERT的性能水平

既然要缩小计算量,那第一步肯定是对模型作出一些限定。

这也还是之前提到的,限定时间和GPU个数:单天单个GPU。

关于GPU,研究人员分别选取了3个进行测试,即rtx2080ti、rtxa4000和rtxa6000,每个单元有4个CPU核和32GB内存。

在限定计算量之后,就要对模型的其他参数进行一些调整,以进一步对BERT的实际适用性进行评估

这些调整包括初始数据设置、模型架构、训练以及数据集的改进。

并且在调整的过程中,整体基调都是围绕“实际使用”进行的,避免跳转到专业的设置,为此,研究人员将所有内容都保持在PyTorch框架的实现级别上。

先来说说初始数据设置,这部分可以简单概括为以下几点:

  • 将标记化的数据打包成长度为128的随机序列,不相关的片段用
  • 分割;
  • 删除< cls > 标记,因为在训练前训练中加入它并没有对性能产生多大影响;
  • 将序列长度为64到96微小批量累积到大批量再处理。

然后是对架构的修改,下图显示了不同模型在随着token数量的增加MLM任务损失的变化。

结果很显然,一个模型损失的衰减很大程度地取决于模型的大小,而不是模型的类型。

并且,因为每个token的性能与模型大小之间的关系紧密耦合,若想通过改变Transformer模型的大小和类型来获得巨大性能增益是不太可能的。

不过对于同大小的所有模型,每个梯度效率是几乎保持不变的,因此可以在保证模型大小不变的情况下,选择能够通过快速搜索加速计算的架构。

具体的优化和其他调整如下:

  • 减少注意力头的数量来降低梯度成本:禁用所有QKV偏差;
  • 禁用所有线性层偏差,通过加速梯度计算,不会对模型大小产生明显影响;
  • 实现比例正弦位置嵌入,相较于学习或非比例正弦嵌入有增量收益;
  • LN的预标准化比后LN更有益;
  • 去除非线性头部并无影响。

接下来便要对训练进行设置,具体也就不再赘述,直接来看相关调整:

  • 优化器依旧是Adam;
  • 设定Learning Rate计划和批量大小;
  • 丢掉Dropout环节。(因为Dropout会导致每秒更新的净减少)

而在数据集方面,研究团队采用了两种基于数据的途径来更好地缩小规模,分别是以各种方式过滤、处理或排序现有的数据交换数据源,具体可以看下表。

性能接近最初的BERT

在调整完各种参数后,这个单卡一天的BERT性能到底如何?直接看看最终的数据!

在下游性能评估时是通过GLUE来进行的,下表能够看到在3个不同显卡上的得分,非常接近最初的BERT。

而当模型训练计算量为16倍时,即(2天,在8个GPU),依旧是一样的数据和设置,最终得到的结果比最初的BERT提高了很多,达到了RoBERTa的性能水平。

如果想了解更多,可以点击下面链接查看论文原文~

论文原文:
https://arxiv.org/abs/2212.14034

参考链接:
https://twitter.com/giffmana/status/1608568387583737856

版权所有,未经授权不得以任何形式转载及使用,违者必究。