继续创作,加快生长!这是我参加「日新方案 10 月更文应战」的第14天,点击查看活动概况
导读
运用多头注意力的Transform在cpu上完结222倍的加快。
自BERT紧随Transformer诞生以来,几乎在一切与言语相关的使命中都占据着主导地位,无论是问答、情感分析、文本分类仍是文本生成。与RNN和LSTM不一样的是,RNN和LSTM的梯度消失问题阻止了长数据序列的学习,而transformer在一切这些使命上都有更好的准确性。也不像Transformers,RNN和LSTM是不可扩展的,因为它们有必要考虑到前一个神经元的输出。
现在Transformers的首要问题是它们在练习和推理方面都是高度密布的核算。而练习部分能够通过运用预练习的言语模型(由大型公司如谷歌,Facebook和OpenAI开放源代码)并在咱们的数据集上微调它们来处理。现在,后一个问题由FastFormers处理了,有一套办法能够完结根据Transformers的模型在各种NLU使命上的高效推理。
“将这些主张的办法应用到SuperGLUE基准测试中,与开箱即用的CPU模型比较,作者能够完结9.8倍到233.9倍的加快。在GPU上,咱们也完结了12.4倍的加快。” — FastFormers
论文FastFormers: Highly Efficient Transformer Models for Natural Language Understanding首要关注于为Transformer模型提供高效推理,使其能够在大规模出产场景中布置。作者特别关注推断时刻功率,因为它首要控制着出产布置的本钱。在这篇博客中,咱们将回顾本文所要处理的一切问题和应战。
那么他们是怎么处理Transformers高功率推理时刻的问题的呢?
它们首要运用常识蒸馏、结构化剪枝和模型量化三种办法。
第一步,常识蒸馏,削减模型深度和躲藏状况的巨细,而不影响精度。
第二,结构化修剪,通过削减自注意力头的数量,削减模型的巨细,一起试图坚持准确性。
最后,模型量化,通过优化运用硬件加快才能使模型能够更快的履行。CPU上采用8bit量化办法,GPU上将一切模型参数转化为16位浮点数据类型,最大极限地运用高效Tensor Cores。
深化介绍
常识蒸馏:常识蒸馏指的是模型压缩的思想,运用一个更大的已经练习有素的网络教一个较小的网络,一步一步地,切当地做什么得到较小的模型。虽然大模型比小模型具有更高的常识容量,但这一容量可能没有得到充分运用。即使模型只运用了很少的常识才能,它在核算上也可能是昂贵的。常识蒸馏将常识从一个大模型转移到一个小模型而不失掉有用性。因为较小的模型评价本钱较低,它们能够布置在功用较弱的硬件上,比方智能手机。
常识蒸馏办法:特别运用了两种办法,即特定于使命的和与使命无关的蒸馏。
在使命细化过程中,作者依照TinyBERT提出的过程,将教师模型细化为更小的学生模型。在与使命无关的蒸馏办法中,作者直接对一般蒸馏模型进行微调,以针对特定的使命进行调优。
常识蒸馏的作业流
常识蒸馏成果:在试验中,作者观察到,蒸馏模型在蒸馏到另一种模型类型时,不能很好地作业。因而,作者约束了咱们的设置,以避免将Roberta模型蒸馏为BERT模型,反之亦然。通过验证数据集上的教师模型,咱们汇总了对使命进行常识蒸馏的成果。(学生指蒸馏模型)
教师和学生模型对SuperGLUE benchmark在各使命验证数据集上的准确性
神经网络剪枝:神经网络剪枝是一种压缩办法,包括从练习模型中删除权值。在农业中,修剪是指砍掉植物不必要的枝干。在机器学习中,剪枝是去除不必要的神经元或权重。神经网络剪枝技术能够使练习网络的参数削减90%以上,在不影响精度的前提下削减存储需求,进步推理的核算功能。这有助于减小通过练习的神经网络的巨细或能量消耗,并有助于使推理更有用。剪枝使网络更高效、更轻。
修剪前后和神经元和神经元连接
结构化剪枝办法:咱们的结构化剪枝办法的第一步是识别多头注意力中最不重要的头和前馈层中最不重要的躲藏状况。
- 核算重要性得分的一阶办法,运用一阶梯度信息代替了根据幅度的剪枝。
- 在进行重要性评分核算之前,作者在每个注意力头中添加了一个mask变量,用于注意力头的梯度核算。然后在整个验证数据集上前后遍历模型,积累梯度的绝对值。然后,这些累积的值被用作重要分数,咱们用它来排序注意力头和中心躲藏状况的重要性。
- 根据目标模型的巨细,从网络中挑选给定数量的顶部heads和顶部躲藏状况。一旦排序和挑选过程完结,作者重新组合和连接剩下的head和躲藏状况,从而得到一个较小的模型。当对head和躲藏状况进行剪枝时,作者在不同的层中运用相同的剪枝率。这使得进一步的优化能够与修剪后的模型无缝地作业。
- 在试验中,作者发现,通过修剪后的模型通过新一轮的常识蒸馏后,能够获得更好的精度。因而,将常识蒸馏再次应用到模型中。
模型量化:量化是指在比浮点精度更低的位宽下履行核算和存储张量的技术。量化模型对用整数而不是浮点值的张量履行部分或悉数操作。这允许一个更紧凑的模型标明,并在许多硬件平台上运用高功能向量化操作。
在CPU上的8bit量化矩阵乘法:因为削减了CPU指令数量,8bit量化矩阵乘法与32位浮点运算比较带来了显著的速度进步。
16bitGPU模型转化:V100 GPU支持Transformer架构的完好16bit操作。别的,16bit浮点运算除了具有较小的值范围外,不需要对输入和输出进行特殊处理。因为Transformer模型是受内存带宽约束的作业负载,这种16bit模型转化带来了适当显著的速度增益。观察到大约3.53倍的加快,取决于模型设置。
除了结构优化和数值优化,作者还运用各种办法进一步优化核算,特别是多进程优化和核算图优化。
组合起来的成果
下面的表格阐明了成果是多么有用:
batch size为1的BoolQ验证数据集上的CPU推理加快
总结
本文介绍了FastFormers,它能对根据Transformer的模型在各种NLU使命上完结高效的推理时刻功能。论文FastFormers的作者标明,运用常识蒸馏、结构化剪枝和数值优化能够大幅进步推理功率。咱们标明,这种改进能够到达200倍的加快,并在22倍的能耗下节约超越200倍的推理本钱。
英文原文:medium.com/ai-in-plain…