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

一天一卡挑战:RTX2080Ti应对大规模模型训练,节省136倍算力,学术界欢呼

时间:2023-03-12 04:26:19 科技观察

在消费级GPU上进行仅一天的培训。你能得到什么样的BERT模型?近日,语言模型又火了AI领域。预训练语言模型的无监督训练属性使其能够在海量样本的基础上进行训练,获得大量的语义和语法知识。无论是分类还是问答,似乎没有AI解决不了的问题。然而,大模型带来的不仅仅是技术上的突破,同时也对算力提出了无穷无尽的需求。最近,来自马里兰大学的JonasGeiping和TomGoldstein讨论了所有关于扩展计算的研究,并深入探讨了改进缩小计算的方法。他们的研究引起了机器学习社区的注意。在新的研究中,作者讨论了什么样的语言模型可以在单个消费级GPU(RTX2080Ti)上进行训练,并获得了令人兴奋的结果。让我们看看它是如何工作的:ModelScaleExpansion在自然语言处理(NLP)领域,基于Transformer架构的预训练模型已经成为主流并带来了许多突破。在很大程度上,这些模型的强大之处在于它们的大尺寸。随着模型参数数量和数据量的增长,模型的性能会不断提升。因此,NLP领域出现了增加模型大小的竞赛。然而,很少有研究人员或从业者认为他们有能力训练大规模语言模型(LLM),而且通常只有业内的技术巨头才有资源训练LLM。为了扭转这一趋势,马里兰大学的研究人员进行了一些探索。论文《Cramming: Training a Language Model on a Single GPU in One Day》:论文链接:https://arxiv.org/abs/2212.14034这个问题对大多数研究者和从业者来说意义重大,因为它将成为模型训练成本的参考,有望打破LLM训练成本高昂的局面瓶颈。该研究论文迅速在推特上引起关注和讨论。IBM的NLP研究专家LeshemChoshen在推特上评论道:“这篇论文总结了所有你能想到的大型模型训练技巧。”马里兰大学的研究人员认为,如果缩小模型预训练是大规模预训练,这将为目前难以实现的大规模模型开辟一系列进一步的学术研究。此外,该研究试图衡量过去几年NLP领域的整体进展,而不仅仅是模型大小的影响。该研究提出了一个名为“填鸭”的挑战——在测试前一天学习整个语言模型。研究人员首先分析了训练管道的各个方面,以了解哪些修改实际上可以提高小规模仿真模型的性能。而且,该研究表明,即使在这种受限环境中,模型性能也严格遵循在大规模计算环境中观察到的缩放定律。虽然较小的模型架构加快了梯度计算,但随着时间的推移,模??型改进的总体速度几乎保持不变。本研究试图在不影响模型尺寸的情况下,利用膨胀律通过提高梯度计算的效率来获得性能提升。最终,该研究成功地训练了一个具有可观性能的模型——在GLUE任务上接近甚至超过BERT——并且训练成本很低。有限资源为了模拟普通从业者和研究者的资源环境,本研究首先构建了一个资源受限的研究环境:一个任意大小的基于transformer的语言模型,完全从头开始使用掩码语言建模(masked-languagemodeling)进行训练;管道中不能包含现有的预训练模型;任何原始文本(不包括下游数据)都可以包含在训练中,这意味着可以通过明智地选择如何以及何时对数据进行加速采样来实现,前提是采样机制不需要预训练模型;原始数据的下载和预处理不包括在总预算中,这里的预处理包括基于CPU的分词器构建、分词和过滤,但不包括表示学习;训练仅在单个GPU上进行24小时;downstreamperformance在GLUE上进行评估,downstreamfine-tuning在GLUE上仅限于简单训练(5个epoch或更少)只使用下游任务的训练数据,并且需要使用Globalhyperparameters,downstreamfine-tuning不计入在总预算中。本研究的具体训练设置与一些经典大模型的对比如下表所示:,训练和变异数据集的方法。实验是在PyTorch中进行的,没有使用专门化来尝试公平,一切都保持在PyTorch框架的实现级别,只允许可以应用于所有组件的自动运算符融合,并且只有当最终的架构变体是chosen高效注意力核只有在body之后才重新启用。图1:不同transformer架构变体的MLM损失函数与令牌左:全局视图。右图:放大到10e8和更多令牌案例。所有模型都以相同的计算成本进行训练,我们可以看到通过架构重塑实现的改进可以忽略不计。关于提升性能,我们第一个想到的方法肯定是修改模型架构。直觉上,较小/较低容量的模型似乎最适合一天一次的训练。然而,在研究了模型类型与训练效率之间的关系后,研究人员发现缩放定律对缩小尺寸构成了巨大的障碍。每个令牌的训练效率在很大程度上取决于模型大小,而不是转换器的类型。此外,较小的模型学习效率较低,这在很大程度上减缓了吞吐量的增长。幸运的是,训练效率在相同大小的模型中几乎保持不变这一事实意味着我们可以寻找具有相似参数大小的合适架构,主要根据影响单个梯度步骤的计算时间来做出设计选择。.图2:学习率时间表,虽然全局表现相似,但可以在放大的中间图像中看到差异确实存在。在这项工作中,作者研究了训练超参数对基于BERT的架构的影响。可以理解的是,原始BERT训练方法的模型表现不及临时填鸭式训练要求,因此研究人员重新审视了一些标准选择。作者还研究了优化数据集的想法。缩放定律阻碍了通过架构修改获得显着收益(超出计算效率)的方式,但缩放定律不会阻止我们在更好的数据上进行训练。如果我们想每秒训练更多的令牌,我们应该寻求训练更好的令牌。图3:在bookcorpus-wikipedia数据上进行填鸭式训练的模型的词汇量与GLUE分数和MNLI准确性的关系。GLUE上的性能研究人员系统地评估了GLUE基准上的性能和WNLI,并指出在前面的部分中仅使用了MNLI(m),没有根据完整的GLUE分数调整超参数。在针对BERT-base的新研究中,作者微调了5个时期的所有数据集,批量大小为32,学习率为2×10-5。这对于通过Cramming训练的模型来说不是最优的,它可以从16的批量大小和4×10?5的学习率以及余弦衰减中获得小幅改进(此设置不会改进预训练的BERT检查点)。表3和表4描述了此设置在GLUE下游任务上的性能。作者对比了原始的BERT-basecheckpoint,BERT预训练设置达到计算能力上限后停止,Izsak等人描述的设置。2021年,以及修改后的设置,设置每个GPU一天的训练。总体而言,性能出奇地好,尤其是对于MNLI、QQP、QNLI和SST-2等较大的数据集,下游微调可以消除完整BERT模型与Cramming设置中的变体之间的剩余差异。此外,作者发现,与具有有限计算能力的传统BERT训练和Izsak等人描述的方法相比,新方法有了实质性的改进。对于Izsak等人的研究,所描述的方法最初是为一个完整的8GPU刀片服务器设计的,在新场景中,将其中的BERT-large模型压缩到较小的GPU负责大部分性能。下降的原因。表3:基线BERT和模型的Cramming版本的GLUE-dev性能比较,其中所有任务的超参数都是固定的,epoch限制为5,缺失值为NaN。专为8个GPU刀片服务器设计,所有计算都集中在一个GPU中。表4:baselineBERT和paddedmodel的GLUE-dev性能对比总体而言,使用论文中的方法,训练结果已经非常接近原始BERT,但要注意后者使用的totalFLOPS为45-136是新方法的两倍(在16个TPU上用了4天)。而当训练时间延长16倍时(在8块GPU上训练两天),新方法的性能实际上比原来的BERT要高很多,达到了RoBERTa的水平。总结在这项工作中,人们讨论了基于转换器的语言模型在计算非常受限的环境中可以实现多少性能,值得庆幸的是,修改的几个方向使我们能够在GLUE上实现不错的下游性能。研究人员表示,希望这项工作能够为进一步改进提供基线,并进一步为近年来针对变压器架构提出的许多改进和技巧提供理论支持。