挑战单卡单日训练 BERT,ViT 作者推荐
导读:单个 GPU,只花一天时间,能把 BERT 训练成什么样? 现在,终于有研究人员做这件事了,在有限的计算条件之下看看语言模型的真实性能如何。 要知道在以往,大多数专业人
单个 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
版权声明:本文部分来自互联网,由小编精心所写,本文地址:http://www.zhubian88.cn/smbk/72301.html,如需转载,请注明出处!