Efficient Methods for Natural Language Processing: A Survey
Aug 2022
https://arxiv.org/abs/2209.00099
充分利用有限的资源可以在资源保守的同时,促进自然语言处理(NLP)研究和实践的进步。这些资源可以是数据、时间、存储或能量。最近在NLP中的工作从缩放中产生了有趣的结果;然而,仅使用规模来改善结果意味着资源消耗也会规模化。这种关系推动了对高效方法的研究,这些方法需要较少的资源来实现类似的结果。这项调查涉及并综合了NLP效率方面的方法和发现,旨在指导该领域的新研究人员并启发新方法的开发。
1引言
在过去十年中,训练越来越大的深度学习模型已成为一种新兴趋势(图1)。虽然模型参数的稳步增加导致了最先进的性能和新的研究方向,如提示,但这也变得越来越成问题。首先,此类模型通常具有受限的访问权限,因此没有民主化,或者即使如此,仍然需要大量计算资源才能运行(Zhan等人,2021)。其次,它们是不可持续的,需要大量的能量进行训练和推理(Schwartz等人,2020a)。第三,模型不能无限扩大,因为它们的大小受到可用硬件的限制(Thompson等人,2020)。为了解决这些局限性,专注于提高效率的方法正变得越来越流行。
释义
效率通常被称为进入系统的资源与其产出之间的关系,一个高效的系统在不浪费资源的情况下产生产出。特别是对于NLP,我们将效率视为与模型产生的结果相关的模型成本:
等式(1)描述了产生特定(R)结果的AI模型的训练成本,与三个(非穷尽)因素成比例:(1)单个(E)示例上的模型执行成本,(2)训练(D)数据集的大小,以及(3)模型选择或(H)超参数调整所需的训练运行次数(Schwartz等人,2020a)。然后,成本(·)可以沿着多个维度进行测量,例如计算成本、时间成本或环境成本。它们中的每一个都可以以多种方式进一步量化;例如,计算成本可以包括浮点运算(FLOP)的总数或模型参数的数量。由于使用单一成本指标可能会产生误导(Dehghani等人,2021),本调查将收集并组织多个方面的高效NLP工作,并讨论哪些维度对用例和利益相关者有益。
本次调查的范围。
我们的目标是温和地介绍旨在提高效率的广泛方法,重点是NLP。因此,我们通过遵循典型的NLP模型管道(图2)来构建该调查,并提出旨在使各个阶段更有效的现有方法。为了为NLP研究人员提供效率的实用指南,我们向两组读者介绍了这项工作:(1)来自NLP各个领域的研究人员在有限的资源下工作。根据资源的瓶颈,读者可以直接跳转到NLP管道的其中一个涵盖的方面。例如,如果主要限制是在推断时预期的,则第6节中描述的方法是最相关的方法。(2) 研究人员对改善NLP中效率方法的现状感兴趣。在这里,该研究可以作为寻找新研究方向机会的切入点。为了指导读者,我们在图3中展示了本次调查中考虑的有效NLP方法的类型图。此外,虽然硬件选择可能会对模型的效率产生很大影响,但大多数NLP研究人员无法直接控制有关硬件的决策,大多数硬件优化可以在管道的所有阶段灵活使用。因此,我们将工作重点放在算法方法上,但在第7节中提供了有关硬件的适当指针。最后,我们进一步讨论了如何量化效率,在评估过程中要考虑哪些因素,以及如何确定最适合的模型。
2数据
提高效率的一种方法是使用更少的训练实例和/或更好地利用可用的训练实例。在本次调查中,我们重点注意在假设提供的标签正确的情况下减少训练数据的方法。1
2.1过滤
最近的研究表明,提高数据质量可以显著提高性能,同时降低训练成本(与增加数据量相反)。例如,Mishra和Sachdeva(2020)发现,使用约2%的SNLI数据(Bowman等人,2015)可以实现与使用完整数据相当的性能。Lee等人(2022b)表明,在预训练期间去除重复项已经可以显著提高训练效率,具有同等甚至更好的模型性能。在包括重复数据消除步骤的OPT(Zhang等人,2022)等最新模型的开发过程中也发现了类似的趋势。最后,各种工作侧重于更好地理解单个实例对模型性能的贡献(Swayamdipta等人,2020)。
2.2课程学习
课程学习旨在通过找到可用训练实例的良好顺序来提高数据效率(Elman,1993;Bengio等人,2009)。Dodge等人(2020)观察到Transformer模型的类似趋势。
启发式方法。
许多方法通过启发式估计实例难度来选择简单的实例优先排序。对于Transformer架构,Platanios等人(2019年)发现,考虑模型的能力可以进一步提高神经机器翻译(NMT)的性能并减少训练时间。在自然语言理解(Xu等人,2020)和问答(Tay等人,2019)中也观察到了类似的结果。对于语言建模,Press等人(2021)表明,对短序列进行初始训练可以大大缩短训练时间,同时保持模型性能。Agrawal等人(2021)进一步研究了基于复杂性的装箱训练实例,并用较少的训练步骤实现了可比性能
自主学习。
与使用诸如句子长度或单词稀有度之类的启发式方法(Platanios等人,2019;Zhang等人,2019年;Zhao等人,2020年;Xu等人,2020)不同,自节奏学习自适应地选择对模型训练有用的实例(Kumar等人,2010年)。利用模型和数据不确定性(Wan等人,2020;Zhou等人,2020)以及对话生成与知识提取相结合(Zhu等人,2021),自主学习已成功应用于NMT。Zhan等人(2021)甚至提议学习可以很好地转移到其他领域的元课程。
2.3主动学习
即使在训练之前,也可以通过选择性地注释对模型训练最有帮助的实例来提高数据效率(Settles,2012;Ren等人,2021b)。关键的挑战是在不知道实际标签的情况下评估帮助性。因此,现有方法通常使用模型的不确定性或基础实例表示(或两者)进行采样。基于不确定性的方法假设具有最高不确定性的实例添加了最多的信息(Lewis和Gale,1994),并专注于良好的不确定性估计(Tang等人,2002;Gal等人,2017;Yuan等人,2020)。相反,基于表示的方法侧重于最大化选定实例的多样性(Bodó等人,2011年;Sener和Savarese,2018年;Gissin和Shalev Shwartz,2019年;Kirsch等人,2019年)。尽管各种研究表明了NLP的主动学习潜力(Ein Dor等人,2020;Lee等人,2020年;Yuan等人,2022年),但关于其在不同任务和模型中的可推广性,仍存在一些悬而未决的问题(Lowell等人,2019年)。其他问题包括数据中的离群值,这些离群值可能对基于不确定性的策略有害(Karamcheti等人,2021),并可能增加注释难度,从而增加注释成本(Settles等人,2008;Lee等人,2022a)。
2.4提示
受人类与GPT-3等模型交互的启发(Brown等人,2020),提示是指通过将其作为文本输入来要求模型执行预测任务(Liu等人,2021a)。然后根据语言模型的输出推断出最终预测(Li和Liang,2021)。通常,可以使用填充模板或前缀字符串手动或自动创建提示,用于标记、跨度和句子级别的补全(Petroni等人,2019年;Brown等人,2020年;Shin等人,2020;Li和Liang,2021)。这使得提示适用于更具挑战性的NLP任务,例如问答、总结和机器翻译(Schick和Schütze,2021)。由于不需要训练或微调,提示成为以无监督方式处理NLP任务的有效替代方案。2
3模型设计
一个活跃的研究领域是设计更有效的模型,或者通过实施架构更改,或者通过附加新模块来加速主模型的工作流。在本节中,我们将概述Transformer的当前发展,例如,通过调整其架构或将其与外部资源相结合。
3.1稀疏激活
正如Derczynski(2020)所示,激活函数的选择(和实现)可以在执行时间上产生数量级的差异。为了通过利用稀疏激活来加速推断,Fedus等人(2022)提出了Switch Transformer,它将计算路由给专门的专家(“专家”)。这种方法基于专家架构的混合(Jacobs et al.,1991;Shazeer et al.,2017),在足够的内存带宽的情况下,可以扩展到多达万亿个参数,这通常是随着专家数量增加而增长的瓶颈(Rajbhandari et al.,2022)。稀疏激活的另一个例子是自适应稀疏Transformer模型(Correia等人,2019),该模型通过(稀疏)entmax激活来替换注意力头部中的(密集)softmax激活,从而从数据中自动最佳地学习每个头部的稀疏倾向。在此基础上,Sparsefinder(Treviso等人,2022)通过在计算entmax注意力的稀疏模式,为Transformer提供了更有效的注意力机制。
3.2参数效率
一些工作研究减少参数的数量;例如,通过共享模型各层的权重,如通用Transformer(Deghani等人,2019)和ALBERT(Lan等人,2019年)。Perceiver(Jaegle等人,2021)提出了类似的方法,但将原始输入插入任何内层。ALBERT进一步使用矩阵分解来减小嵌入层的大小,这是模型参数的最大消耗者之一。最后,Subformer(Reid et al.,2021)研究了Transformer中权重分配的方法,并表明仅共享模型的中间层比其他层效果更好。
3.3Transformer注意力机制
Transformer模型中注意力机制的一个局限性是它们对序列长度的二次依赖性,这导致了注意长距离序列的有效注意力的变体。现有的策略包括更好地利用已经处理的片段,例如通过递归连接多个片段(Transformer XL;Dai等人,2019),学习网络以压缩长期记忆(Compression Transformer;Rae等人,2020),分别建模全局和局部注意力(Ainslie等人,2020年),并将长序列建模为连续时间信号(∞-前者;Martins等人2022c)。另一项研究试图通过使用固定的注意力模式来减少自注意力的二次瓶颈(Longformer;Beltagy等人,2020年,稀疏Transformer;Child等人,2019年,BigBird;Zaheer等人,2020),或者通过将标记分组为桶或簇来学习注意力稀疏模式(Reformer;Kitaev等人,2020年,SMYRF;Daras等人,2010年,Routing Transformer;Roy等人,2021)。一些策略通过反向应用呈现线性运行时的内核技巧,通过导出查询键矩阵的低阶近似值来修改注意机制,如线性Transformer(Katharopoulos等人,2020)、Performer(Choromanski等人,2021)和RFA(Peng等人,2020年)。3最后,S4(Gu等人,2022)是Transformer的最新替代方案,它利用了状态空间表示的离散化和状态矩阵的参数化,并在非常长的输入中获得了强大的结果。
3.4检索增强模型
文本生成的一个有希望的方向是将参数模型与检索机制相结合,从而形成半参数模型(Gu等人,2018;Lewis等人,2020b)。4在推理时,模型从数据库中检索令牌/短语/句子,然后由模型通过概率分布的插值使用(Khandelwal等人,2019),门控机制(Yogatama等人,2021)或注意力(Borgeaud等人,2022年)。这通常相当于交易模型的大小和数据库条目的数量。例如,RETRO(Borgeaud et al.,2022)通过从2万亿令牌数据库中检索令牌块,尽管参数少了25倍,但其性能与GPT-3、Jurassic-1(Lieber et al.(2021)和Gopher(Rae et al.)相匹配。
这些模型还具有良好的泛化特性:通过从特定领域的数据库中检索,模型可以应用于训练过程中未发现的领域(Khandelwal等人,2019年,2021),避免了对每个领域的模型进行微调的需要。具有显式记忆还允许“动态”调整检索增强模型。例如,Martins等人(2022b)表明,在数据库中添加更正示例比微调更能获得更好的翻译,同时减少了总翻译时间。然而,缺点是检索增强模型通常很慢,因为它们需要在推理过程中执行检索。最近的几项工作提出了缓解这一问题的策略,例如修剪数据库、拥有较小的输入相关数据库、减少表示维度、缓存信息和减少检索步骤的数量(He等人,2021a;Meng等人,2022;Wang等人,2021b;Martins等人,2022a,b;Alon等人,2022)。
4预训练
预训练是开发NLP模型的常见步骤(Peters等人,2018;Devlin等人,2019)。它通常涉及对文本数据进行大量自监督的一种形式,例如对屏蔽词的预测(例如BERT)或语言建模(例如GPT模型族)。预先训练的模型随后针对特定任务进行微调(第5节)。除了提高性能外,预训练步骤还可以显著提高效率(Peters等人,2018;Kovaleva等人,2019)。例如,He等人(2019);Neyshabur等人(2020)表明,预训练提高了下游任务的收敛速度。如图1所示,在过去几年中,这些模型的尺寸一直在不断增加,并显示出只有在模型变得非常大时才会出现的能力(Wei等人,2022b)。然而,对这些越来越大的模型进行预训练需要计算(Strubell等人,2019;Schwartz等人,2020a),这导致了降低其成本的重要挑战。
4.1动态掩蔽
当应用于下游任务时,目标任务的选择可以决定预训练模型的成功。自监督学习目标是大量未标记数据预训练模型的关键组成部分。这些目标取决于任务是使用解码器、编码器还是两者建模。
仅解码器。
仅解码器模型的经典目标函数,如GPT(Radford等人,2019;Brown等人,2020)和PaLM(Chowdhery等人,2022),是因果语言建模(CLM)目标,它使用整个词汇的交叉熵损失预测给定前缀的下一个单词。
仅编码器。
BERT(Devlin等人,2019)提出了一种仅用于预训练编码器模型的常见方法,该方法使用两个目标任务:(1)掩蔽语言模型(MLM)任务,旨在填充文本输入的随机掩蔽标记,以及(2)下一个句子预测(NSP)任务,目的是预测两个随机句子是否连续出现在训练数据中。为了更好地利用可用数据,各种工作研究了不同于BERT中使用的静态掩蔽的掩蔽策略。例如,Liu等人(2019)表明,在训练期间动态屏蔽令牌(即,在每个步骤随机屏蔽15%的令牌,而不是在训练之前屏蔽一次)已经可以以类似的性能提高效率。此外,他们还表明,为了获得更好的模型性能,可以从预训练阶段放弃NSP目标。
其他研究表明,屏蔽特定标记(例如对象或内容词;Bitton等人,2021)或更多标记(Wettig等人,2022年)可以提高性能并更有效地使用可用数据。ELECTRA(Clark等人,2020)和DeBERTa(He等人,2021b)实验了替换令牌检测(RTD),这是一种新的自监督学习目标,使用小生成器模型替换输入中的令牌。这两项研究都表明,与BERT相比,RTD可以更快、更好地进行预训练。
编码器解码器
T5(Raffel et al.,2020)和BART(Lewis et al.,2020a)中提出的另一种方法使用去噪序列到序列目标来预训练编码器-解码器LM,允许解码器预测掩蔽位置的令牌跨度,而不是单个令牌。
5微调
微调指的是使预训练的模型适应新的下游任务的步骤。一般来说,微调特指基于下游任务数据的梯度训练。在本次调查中,我们使用了更广泛的微调定义,包括用于将预训练模型应用于下游任务的任何方法。
5.1参数高效微调
基于梯度的微调通常涉及在下游任务数据上训练模型的所有参数。这意味着每次在新任务上微调预训练模型时,都会创建一组全新的模型参数。如果在许多任务上对模型进行了微调,则存储需求可能会变得繁重。开创性的ELMo工作最初通过训练新的分类层并保持其余参数固定,将预先训练的模型用于下游任务。这种方法更新的参数比训练完整模型少得多,但已表明其性能更差,因此变得不那么常见(Devlin等人,2019)。
另一种选择是参数有效微调(PEFT),其目的是使模型适应新任务,同时仅更新或添加相对较少的参数。适配器(Houlsby等人,2019;Bapna和Firat,2019;Rebuffi等人,2017)将新的可训练密集层注入到预训练模型中,是针对NLP模型提出的第一种PEFT方法。适配器最近通过(Karimi Mahabadi等人,2021)的“压实器”方法进行了改进,该方法通过低秩矩阵的Kronecker积构造适配器参数矩阵。作为添加新层的替代方法,参数效率可以通过使用学习向量直接修改激活来实现,可以通过级联(Lester等人,2021;Li和Liang,2021)、乘法(Liu等人,2022a)或加法(Ben Zaken等人,2022)。或者,通过使用稀疏更新(Sung等人,2021;Guo等人,2021)或低秩更新(Hu等人,2022),而不是添加新参数或更改模型的计算图,可以使原始模型的更新存储成本更低。最后,已经表明,可以在低维子空间中执行优化(Li等人,2018);将更新存储在该子空间中可以看作是PEFT方法(Aghajanyan等人,2021b)。最先进的PEFT方法添加或更新的参数比全模型微调少大约四个数量级,而不会牺牲(在某些情况下还会提高)性能(Hu等人,2022年;Karimi Mahabadi等人,2021;Liu等人,2022a)。
5.2多任务和零样本学习
虽然传统的转移学习包括微调,但也有其他范例允许将预先训练的模型立即应用于感兴趣的下游任务。多任务学习(Caruana,1997;Ruder,2017)旨在训练一个能够执行各种任务的单一模型。通常,这是通过在所有感兴趣任务的数据上显式训练模型来完成的。如果多任务模型已经针对给定的下游任务进行了训练,则无需进行微调。最近的工作还表明,多任务模型也可以进行微调(Raffel等人,2020;Aghajanyan等人,2021a;Aribandi等人,2022;Liu等人,2022a)。
在某些情况下,多任务模型可以应用于新任务,而无需任何微调。这种能力被称为零炮概括。Radford等人(20172019)和Brown等人(2020)证明,使用无监督目标训练的语言模型能够执行各种开箱即用的任务。后来,Sanh等人(2022)和Wei等人(2022a)表明,多任务训练也可以实现零镜头泛化能力。虽然零镜头泛化可以完全绕过微调,但它(截至本文)只在大型和计算密集型模型上得到了证明。
6推理和压缩
已经提出了各种方法来提高推理时的效率。修剪(LeCun等人,1989)和蒸馏(Hinton等人,2015)等压缩方法假设较小的模型比较大的模型更有效。自适应计算通过忽略用于进行预测的内部模块来加速推断(Schwartz等人,2020b)。最后,量化是一种正交方法,通过修改基础数据类型直接提高效率。
6.1修剪
最初由LeCun等人(1989)提出,从神经网络中去除不必要的权重旨在避免不必要的计算,以减少推理时间,同时减少精度损失,此外,还可以减少内存容量和带宽需求。修剪可以应用于模型中的不同层次:例如,Voita等人(2019);Michel等人(2019)发现,只有很少的注意力头部对模型的预测有实质性贡献,并建议删减其余部分;Correia等人(2019);Ji等人(2021);Qu等人(2022)验证了Transformer中的弱注意值可以在没有精度损失的情况下进行修剪。其他人专注于修剪个体权重(Sanh等人,2019;Gordon等人,2020)或层(Dong等人,2017;Sajjad等人,2020年)。最后,一些工作试图确定修剪特定重量/层的良好标准(Sanh等人,2020;Hoefler等人,2021),甚至建议在推断期间动态降低层(Fan等人,2020);有时与适配器等其他效率方法结合使用(Rückléet al.,2021)。修剪方法的日益普及进一步提出了如何量化和比较它们的问题(Tessera等人,2021;Blalock等人,2020;Gale等人,2019)。5
6.2蒸馏
尽管剪枝主要侧重于从预训练模型中移除权重,Hinton等人(2015)建议通过使用预训练模型从头开始训练较小的模型(学生)以获得监督信号(教师)。虽然早期的工作侧重于提取特定于任务的模型(Kim和Rush,2016),但最近的工作专注于提取预先训练的模型,然后可以对特定的下游任务进行微调(Sanh等人,2019;Liu等人,2020;Jiao等人,2020年;Sun等人,2020)。
6.3自适应计算
压缩方法的另一种选择是为每个实例自适应地决定使用模型的哪个部分。例如,早期退出预测允许系统仅利用模型中较低(早期)层的输出进行预测(Dabre等人,2020;Elbayad等人,2020年;Schwartz等人,2020b;Xin等人,2020)。
6.4量化
各种数据类型可以用作神经网络的基本表示(第7节)。将高精度数据类型映射到低精度数据类型通常称为量化。虽然量化节省了内存和计算成本,但降低精度可能会导致精度损失。因此,量化通常需要仔细的模型构建和训练。
低精度和混合精度。
各种工作的目标是特定的精度水平,例如整数(Kim等人,2021)、8位(Quinn和Ballesteros,2018;Zafrir等人,2019;Bhandare等人,2018;Prato等人,2020)和3位量化(Ji等人,2021;Zadeh等人,2022),甚至三元和二进制表示(Zhang等人,2020;Bai等人,2020年)。其他工作研究混合精度量化,因为不同分量可能对其基本精度具有不同的灵敏度。例如,Shen等人(2020)表明嵌入层需要比注意层更精确的参数表示,而Kim等人(2021)表明非线性函数需要比一般矩阵乘法更多的比特。其他人将量化定义为一个约束优化问题,以自动识别精度较低的层(Hubara等人,2021)。这些工作表明,跨不同组件的定制量化方案可以在提高效率的同时保持精度。
量化意识训练。
最后,一些工作建议在训练期间考虑量化,以使其对量化后的性能损失具有鲁棒性(Zafrir等人,2019年;Kim等人,2021;Stock等人,2021)。例如,Bai等人(2020);Zhang等人(2020)提出利用知识蒸馏来保持二值化和三值化模型的准确性。
6.5其他方法
尽管这项调查提出了旨在提高推理效率的最突出的研究领域,但也存在其他几种具有相同目标的方法。例如,Wu等人(2022年)将几种方法结合起来以实现最大的模型压缩,而其他工作则改进了特定于任务的机制,例如机器翻译中的波束搜索(Peters和Martins,2021)。此外,还可以利用并行性进一步提高推理效率(Rajbhandari等人,2022)。
7硬件利用率
最后,我们讨论了考虑用于训练和推理的底层硬件的几种方法。大部分工作致力于减少GPU内存消耗,这是Transformer模型中的主要瓶颈之一。注意,所提出的许多技术可以应用于训练和推理的不同阶段(图2),并且可以组合以提高效率。
数据类型。
传统上,神经网络使用IEEE 765单精度32位浮点,它由4个字节组成,表示浮点数(float32)。然而,随着模型参数的增加,这会显著影响GPU中的内存消耗。结合半精度(float16)和单精度(float 32)数据表示可以将网络的内存消耗减少一半,用于推理,几乎一半用于训练(Micikevicius等人,2018)。float16的一种替代方案是TPU中使用的大脑浮点(bfloat16),它可以导致更稳定的训练(Kalamkar等人,2019)。由于许多现代CPU和GPU中的硬件支持,bfloat16和float16还可以使FLOP/S翻倍。
减少优化器内存。
因为Adam优化器跟踪一阶和二阶动量,所以它需要为神经网络中的每个参数存储两个浮点数。因此,为了训练包含K个参数的模型,GPU必须存储与模型、一阶和二阶动量对应的3K个参数。DeepSpeed(Ren等人,2021a)等库允许优化器从GPU内存卸载到CPU RAM中,在CPU RAM中使用高效的AVX指令执行计算。比特和字节(Dettmers等人,2022)使用动态逐块量化和8位整数来表示优化器。逐块量化需要比特和字节将每个张量分割成单独量化的块,从而减少GPU间的通信。bitsandbyte可以将Adam的GPU内存消耗减少75%,在许多情况下,通过减少GPU间的通信来加快训练速度。虽然比特和字节在GPU上运行,但该方法理论上与DeepSpeed中的优化器卸载兼容。
专用硬件。
使用专用集成电路(ASIC)或现场可编程门阵列(FPGA)的NLP应用的专用硬件已经存在,但尚未广泛可用。这些硬件设计将专用计算单元用于提高效率的不规则方法(如第6节中讨论的量化和修剪),因此提高了效率。例如,Zadeh等人(202022);Li等人(2021);Qu等人(2022)设法支持在CPU/GPU上无法完成的超低位和混合精度计算;Ham等人(2020年,2021);Qu等人(2022);Wang等人(2021a)提出了预测Transformer中不必要组件并对其进行修剪的硬件,包括冗余头/令牌和弱注意力值。Qu等人(2022)专门提出了专门的硬件来调度数据加载,以缓解修剪带来的不平衡。其他工作开发新型专用处理器和存储器,以匹配Transformer中组件的特性;例如,softmax和层规范化(Lu等人,2020;Liu等人,2021b)和嵌入式电阻RAM(一种低延迟和能耗的非易失性存储器),用于存储字嵌入(Tambe等人,2021)。
共同设计。
最后,我们为联合优化硬件、软件和算法设计的工作提供了一些建议,这些设计在历史上一直是效率提高的重要驱动因素(胡克,2021)。例如,Lepikhin等人(2021)证明,改进底层编译器已经可以大大改进并行化,从而使模型的参数扩展到600B。联合设计的其他突出示例还集中于专家模型的改进,这些模型考虑了导致大幅加速的底层硬件(He等人,2022;Rajbhandari等人,2022)。最后,Barham等人(2022)提出了一种新的集群调度方法以及并行异步调度,进一步提高了效率。
7.1边缘设备
在资源受限的设备上运行高级NLP模型可以提供更好的用户体验,因为它可以保护用户隐私并减少推断延迟。各种工作专门针对提高设备上设置的效率。SquezeBERT(Iandola等人,2020)是一种类似于移动BERT的架构,它将高效的组卷积融入到自注意中,并且它在移动设备上的运行速度比MobileBERT(Sun等人,2020年)等其他高效模型更快。EdgeFormer(Ge和Wei,2022)是一种轻量级编码器-解码器转换器架构,专为设备上设置而设计。它在低延迟的移动CPU上运行,并提供高质量的机器翻译和语法纠错能力。GhostBERT(Huang等人,2021)使用构建在MobileNets中使用的深度可分离卷积之上的ghost模块(Howard等人,2017)。LiteTransform(Wu*等人,2020)利用长短距离注意力通过卷积编码局部上下文,并通过注意力操作捕获长距离依赖性。在资源受限的设置下,它大大提高了Transformer在机器翻译任务上的性能。最后,ProFormer(Sankar等人,2021)使用对位置敏感的散列和本地投影注意层来构建文本分类的单词嵌入,并减少设备部署的运行时和内存。
8评估
为了评估效率,重要的是确定人们试图限制的资源,例如,资金、数据、内存、时间、电力消耗、碳排放等。此外,效率并不能从本质上保证总体资源消耗的减少,因为由此产生的成本降低可能会导致需求增加并抵消其收益。这被称为杰文斯悖论(Jevons,1866),部分原因是效率提高和需求增加之间的时滞,以及能源定价和监管等外部人为因素。
8.1测量效率
在提高效率时,通常有多种因素需要相互权衡。例如,虽然更长时间的模型训练可能会提高其任务性能,但同时也会增加资源消耗。
帕累托最优。
这个问题的一个解决方案可以是确定帕累托最优解,即没有其他系统在较低的资源消耗下达到更好或同等的任务性能的解。由于仍然可能存在不止一个帕累托最优解,最终的选择取决于应用环境;e、 例如,小的、平均质量的模型和大的、高质量的模型都可以是最优的。因此,只要模型有助于或扩展给定问题和度量空间的帕累托最优曲线,即使其他解决方案可能使用更少的资源或产生更高质量的分数,它也会有新的贡献。通过推动帕累托障碍来推进NLP是一种既定做法。例如,WNGT 2020机器翻译共享任务(Birch等人,2020)考虑了实时时间、系统或GPU内存使用、模型大小以及BLEU之间的帕累托边界。尤其是在机器翻译评估中,这种权衡是常见的(Kimet等人,2019年;Bogoychev等人,2020年;Behnke和Heafield,2021)。Puvis de Chavannes等人(2021)在探索Transformer模型的Pareto-efficient超参数组合时,将功耗作为与困惑的权衡。最后,Liu等人(2022b)检查了许多任务的帕累托效率,试图将模型选择搜索空间缩小到有效的示例。
功耗。
衡量效率的一个资源是功耗。存在各种测量功耗的方法,例如,通过使用诸如电表之类的特定硬件。虽然这可以提供高时间精度的精确数字,但不能提供细粒度的估计。此外,这不包括冷却或联网等外部能源成本。另一种方法是利用MLCO2等软件工具(Luccioni等人,2019)。一些工具甚至提供了机器内不同组件功耗的实时细分(Henderson等人,2020年)或本地机器API报告的数据,以便在谨慎的情况下尽早停止训练(Anthony等人,2020)。最后,Hershcovich等人(2022)介绍了NLP系统的模型卡,该模型卡鼓励研究人员以一致的方式记录效率。请注意,以编程方式测量功耗需要注意一些事项。首先,在堆栈的不同级别,采样频率通常由于多种原因而受到限制,并且可能导致测量开始延迟。因此,较短的实验可能会记录能量使用为零,并且几乎总是会有一些过程的实际能量需求被忽略。其次,当前API未报告热损失等低效率,因此不包括冷却和其他系统管理活动。第三,并非所有架构和操作系统都受支持。例如,OSX下的功耗很难管理,TPU功耗的直接数字也不可用。
碳排放。
除了电力消耗,上述工作还经常报告碳排放。它们是使用用于运行该计划的边际能源发电的能耗和碳强度来计算的。因此,低能源并不意味着低碳,如果在适当的时间(即,当能源组合为低碳强度时)执行,高能源模型可以在适当的区域内,并在一定程度上小心地实现点能耗影响的零碳。为了估算特定项目执行过程中的二氧化碳排放量,ElectricityMap6等API可实时获取许多地区的碳浓度。然而,由于碳强度不同,并且受到其他因素的影响,例如数据中心的电力使用效率,因此通常是比较的基础;事实上,Henderson等人(2020)建议使用多次运行进行稳定估计。此外,需要考虑的是,执行零碳计划仍然消耗能源(要注意杰文斯悖论)。
财务影响。
货币成本是一种资源,人们通常更愿意利用它来提高效率。固定成本和运行成本都会影响NLP,这取决于用户选择如何执行模型。由于硬件配置及其价格在典型的非线性尺度上形成离散点,因此值得注意有效的成本点并进行拟合。实施可从中断中恢复的抢占式流程也通常允许访问更便宜的资源。在计算或摊销硬件成本时,还应考虑停机时间、维护和配置。衡量总体拥有成本(TCO)提供了一个更有用的指标。
FLOP/秒。
最后,经常报告的效率度量是浮点运算(FLOP)和每秒浮点数(FLOP/s)。虽然这种离散度量听起来在硬件的功能方面很明确,但在堆栈的多个阶段存在一些变化,增加了不确定性。例如,不同的操作可以算作不同硬件上的FLOP;不考虑非浮点运算;硬件很少被100%利用,实现这一目标是一个挑战,因此理论上的FLOP/s性能不能与所用时间相乘,以产生所执行的计算量。尽管如此,每单位功率的FLOP/s可以表明哪些硬件选择有可能为这些因素提供帕累托有效权衡(Hsu等人,2005)。
8.2与其他需求的权衡
在提高效率时,一个主要但很少研究的问题是与公平性和鲁棒性等其他需求的权衡。例如,Hooker等人(2020);Renduchintala等人(2021);Silva等人(2021)发现,剪枝等压缩技术可以放大现有的偏见;Mohammadshahi等人(2022)在多语言环境中进一步展示了这一点。到目前为止,没有多少研究在提高模型效率的同时保持模型的公平性。为了量化这种影响,Xu等人(2021)提出忠诚度作为一种新的衡量标准。最后,Xu和Hu(2022)试图更系统地研究这些效应,但得出的结论好坏参半。虽然发现了更多积极的见解,如分布外(OOD)推广(Ahia等人,2021;Iofinova等人,2022年)和模型转移(Gordon等人,2020年),但我们发现需要更多的工作来更好地理解效率方法对它们的影响。
8.3衡量效率的挑战
硬件的选择可能导致某些效率测量(如延迟和彻底投入)的显著差异(Lee Thorp等人,2022)。正确衡量效率仍然是一个巨大的挑战。例如,Cao等人(2020)表明,使用基于软件的工具通常会在估计真实能量时引入较大的误差。相反,通过对分类器进行功率监测器获得的地面真实能量的训练,可以获得更准确的估计值(Cao等人,2021);然而,将它们扩展到新的硬件设备和多个GPU仍然是一个开放的问题。
分离不同阶段。
重要的是分别表征预处理和微调阶段的效率。例如,模型可能在训练期间呈现不同的记忆需求,但结果是训练模型具有可比的推理记忆消耗。这是因为训练经常涉及设计选择,这会增加反向传播的内存开销。例如,某些优化器可能需要更多的内存。类似地,参数共享技术在训练期间几乎没有什么好处,但在推理时表现出了记忆改善(Dehghani等人,2021)。
成本因素之间的分歧。
如第7节部分所述,成本指标可能彼此不一致。例如,专家的混合增加了总体参数计数,但改善了质量和FLOP之间的权衡,因为他们通过路由到模型的子部分来最小化每个数据的成本(Rajbhandari等人,2022)。相反,非结构化稀疏技术可以显著减少FLOP的总数。然而,在实践中,它引入了低级操作,这可能会导致存储索引的内存需求高得多,这些索引指示矩阵的哪部分是稀疏的(Qu等人,2022)。最后,Dao等人(2021)发现了特定的稀疏模式,可以用当前硬件实现更可预测的加速。
9型号选择
超参数搜索。
通过仔细选择超参数,机器学习方法的性能可以显著提高。基于模型的技术,如贝叶斯优化(BO)(Snoek等人,2012;Feuerr等人,2015)和基于图的半监督学习(Zhang和Duh,2020)使用替代模型来高效搜索最优超参数,避免了昂贵的网格搜索或手动调整。SMAC3库(Lindauer等人,2022)实施了几个BO策略,包括用于昂贵的深度学习任务的预算有限变体,并集成到auto-sklearn(Feurer等人,2020)和auto-pytorch(Zimmer等人,2021)中。
降低超参数优化成本的一种补充方法是连续减半算法(SHA)(Jamieson和Talwalkar,2016)及其大规模并行变体异步SHA(ASHA,Li等人,2020),其在固定数量的训练迭代中并行测试多个超参数设置,然后丢弃具有最差验证集性能的一半设置。然而,由于计算预算有限,BO和ASHA有时都无法确定良好的设置(Liu和Wang,2021)。目前尚不清楚这些方法是否也可以用于选择随机初始权重或排序训练样本,这也会对模型性能产生实质性影响(Dodge等人,2020)。
超参数迁移。
为了尽量减少找到最佳超参数设置所需的试验次数,我们可以从其他数据集或任务中转移知识——类似于ML工程师如何手动选择合理的设置。传递神经过程(Wei等人,2021)提供了一种方法,可以使用贝叶斯优化,以神经过程作为替代模型,传递先前任务的观测值、参数和配置。与传统的BO方法相比,这可以产生更精确的模型,试验次数更少,但尚未对大型NLP模型进行测试。此外,在训练大型神经网络时,可以使用µTransfer(Yang等人,2021)来调整小型模型,然后将超参数转移到大型模型,从而降低每个调整步骤的成本。首先,使用Maximal Update Parameterization(µP)对目标模型进行参数化(Yang和Littwin,2021),该方法可以找到合适的较小模型(宽度或深度减小),其最优超参数与较大目标模型的相似。使用任何优选方法对小模型进行调整,然后将选定的超参数值直接用于大目标模型。µTransfer适用于许多不同的超参数,包括学习速率、动量、权重初始化方差和权重乘数,但不适用于控制正则化的参数,例如辍学。
10结论
在本次调查中,我们根据传统的NLP管道组织了现有文献,并对提高效率的现有方法及其缺点进行了广泛概述。正如我们的讨论所示,NLP的效率可以通过许多不同的方式实现;但也面临着各种开放的挑战,例如量化它的良好指标。