赞
踩
BERT推理提速方法整理
一、BERT模型压缩
1、剪枝(pruning)
去掉BERT中不必要的部分,内容包括权重大小剪枝、注意力剪枝、网络层以及其他部分的剪枝等。还有一些方法也通过在训练期间采用正则化的方式来提升剪枝能力(layer dropout)。
总体思想是将权重矩阵中不重要的参数设置为0,结合稀疏矩阵来进行存储和计算。通常为了保证performance,需要一小步一小步地进行迭代剪枝。
(1)注意力剪枝
有的多头attention无作用
NeurIP文章Are Sixteen Heads Really Better than One?https://arxiv.org/abs/1905.10650
acc维持不变的情况下可推理提速1.2倍。
(2)神经元剪枝
神经元剪枝则直接将某个节点直接去掉。对应到权重矩阵中,相当于某一行和某一列置零。常见做法是,计算神经元对应的一行和一列参数的平方和的根,对神经元进行重要性排序,将大小排名最后的k%置零。
(3)突触剪枝
突触剪枝剪掉神经元之间的不重要的连接。常见的做法是在权重矩阵中按照数值大小对参数进行排序,将大小排名最后的k%置零即可,k%为压缩率。
2、知识蒸馏(knowledge distillation)
基本思想是将知识从大型的,经过预训练的教师模型转移到通常较小的学生模型中,常见的学生模型根据教师模型的输出以及分类标签进行训练。
(1)DistillBERT
https://arxiv.org/abs/1910.01108
在bert的基础上用知识蒸馏技术训练出来的小型化bert,可以将BERT模型的大小减少40%,同时保留97%的语言理解能力,速度提高60%。(较好)
(2)TinyBERT
TinyBERT: Distilling BERT for Natural Language Understanding | OpenReview
利用对Transformer结构的知识蒸馏和针对pre-training和fine-tuning两阶段的知识蒸馏,在GLUE基准测试中获得了与BERT相当的结果,同时在推断方面比BERT快7.5倍,快9.4倍
(3)MobileBERT
MobileBERT: Task-Agnostic Compression of BERT by Progressive Knowledge Transfer | OpenReview
是BERT-LARGE的精简版,比其快4倍。在GLUE的自然语言推理任务中,MobileBERT在Pixel 3手机上实现了0.6 GLUE评分性能下降和367 ms延迟。
(4)结合蒸馏和剪枝
https://arxiv.org/abs/1910.06360
推理提速2倍,在自然语言问题的简答准确性损失小于0.5 f1点。
(5)将蒸馏bert与bilstm结合
https://arxiv.org/abs/1903.12136
取得了与ELMo模型相似的结果,同时大约减少了100倍的参数并提高15倍的推理速度。
(6)一种蒸馏的通用方法
https://arxiv.org/abs/1911.03588
可以用于transformer框架之外模型的蒸馏方法,能提高10倍以上推理速度。
3、Theseus 替换(忒修斯压缩)
https://arxiv.org/abs/2002.02925
EMNLP2020 | 模型压缩系列:BERT-of-Theseus(一种基于模块替换的模型压缩方法)_JasonLiu1919的博客-CSDN博客
针对模型微调阶段,先将原始的BERT分为数个模块并为其创建对应的压缩模块(即替代模块),再随机地用压缩模块替换掉原始的模块,并训练这些压缩模块使其能够效仿原始的模块。在训练过程中逐步增加替换的概率,从而实现整体模块(即整个模型)替换。
模型性能比DistillBERT好,推理速度未知。
4、量化(Quantization )
通过减少用于表示每个权重值的精度来压缩模型。例如模型使用float32标准定义参数的精度进行训练,然后我们可以使用量化技术选择float16,甚至int8表示参数的精度用于压缩模型。
(1)动态量化
将32bit浮点型直接替换为8bit整型。可以提速2-3倍,但是准确率会降低2个点左右,而且GPU上不支持此运算。
(2)伪量化QAT
在训练过程中进行量化操作。在训练过程中,weight 和 activation 都被“伪量化”为 INT8,但是计算实际仍以 FP32 完成。通过这种方法使模型在训练过程中能够“感知”到量化的影响,同时避免直接使用 INT8 训练导致的无法收敛的情况。
可以实现模型压缩,但对模型加速没有多大效果。
(3)聚类伪量化
用k-means等聚类算法,将大小相近的参数聚在一起,分为一类。每一类计算参数的平均值,作为它们量化后对应的值。
(4)QBERT模型 https://arxiv.org/abs/1910.06188
在BERT微调阶段进行量化感知训练,以便在最小精度损失的情况下将BERT压缩4倍。此外,所生成的量化模型如果对支持8bit Integer的硬件进行优化,可以加快推理速度。
5、权重共享(Weight Sharing)
如ALBERT,12层共用一套参数而使得参数量降低到原来的1/12。这个方案对于模型压缩作用很大,但对于推理加速则收效甚微,因为共享权值并没有带来计算量的减少。
6、权重因式分解(Weight Factorization)
基本思想是将原始的大矩阵分解为两个或多个低秩矩阵的乘积。就模型压缩技术而言主要用于全连接层和卷积层。
7、网络层合并与计算图优化
资料较少。
二、早退机制(Dynamic Early Exiting)
核心是根据样本的难度来匹配相应的计算量。
bert对每个样本都同等的执行了12层运算,忽略了样本之间的难度差异。对于一些比较简单的样本,或许前几层的Layer表示就足以支撑模型进行正确的预测,后续的计算都可以认为是冗余的,从而可以省去以提升推理的速度。
相关paper合集:https://github.com/txsun1997/awesome-early-exiting
1、基于句子的退出机制
(1)DeeBERT
DeeBERT: Dynamic Early Exiting for Accelerating BERT Inference - ACL Anthology
设置阈值,若其熵小于某个特定的阈值,说明模型对于当前的预测足够自信,则可以退出,否则则需要继续执行下一层。
在GLUE的分类数据集上进行了实验,发现相比于DistilBERT这类静态模型压缩的方法,能够取得更好的推理加速的效果。
(2)FastBERT
FastBERT: a Self-distilling BERT with Adaptive Inference Time - ACL Anthology
https://github.com/TobiasLee/Awesome-Efficient-PLM (里面还有几个作者的其他模型)
速度可调、推理时间自适应。
如果给定不同的加速阈值来权衡速度与性能之间的关系,那么它可以比BERT提高1到12倍的速度。
(3)CALM
https://arxiv.org/abs/2207.07061
教大模型自己跳过“无用”层,推理速度×3性能不变,谷歌MIT这个新方法火了
谷歌研究人员提出的新框架。如果CALM意识到某些层“可有可无”,那么它在计算时就会跳过这些层,即让模型根据不同的输入,动态决定要用多少层网络来计算。
推理速度快3倍。
(4)PABEE
https://arxiv.org/abs/2006.04152
尝试结合中间不同层的退出决策的一致性进行更加鲁邦的退出决策,其核心是当连续某几层的中间分类器都给出一致的预测结果后,认为这一个样本的预测结果以及足够自信,因而可以提前退出。
推理快1.5倍。
2、基于Token 的退出机制
基于上下文窗口中所有 Token 的预测不确定度的最大值,若是其超过了某个设定的阈值,则后续的计算过程中,这一token 的表示将不再被重复计算,而是直接传递到下一层。
(1)Accelerating BERT Inference for Sequence Labeling via Early-Exit
https://github.com/LeeSureman/Sequence-Labeling-Early-Exit
推理快1-4倍。
(2)TR-bert
https://aclanthology.org/2021.naacl-main.463.pdf
提速1-3倍。
三、其他方法
1、TurboTransformers
https://github.com/Tencent/TurboTransformers
https://www.jianshu.com/p/957e9e7a5358
腾讯开源的BERT推理模型,支持C++和python方式调用,在pytorch基础上增加几行代码可以获得端到端BERT加速,可提速1-4倍。
2、招商证券nlp组bert推理提速方案
招商证券BERT压缩实践:如何大幅提高模型推断速度?_AI_招商证券信息技术中心NLP开发组_InfoQ精选文章
招商证券BERT压缩实践(二):如何构建3层8bit模型?_AI_招商证券信息技术中心NLP开发组_InfoQ精选文章
将压缩模型按任务分为两类:对于(长、短文本)分类任务,使用了 3 层 Theseus 模型+QAT 方法进行压缩,对于其他(文本相似度、因果推断等)任务,使用了 3 层蒸馏+QAT 方法进行压缩。
经过了两步压缩后模型精度下降了 2-3 个点,推理速度提升约4倍。
参考资料
1、模型压缩方法总结博文(有性能和推理速度的对比表格)
All The Ways You Can Compress BERT | Mitchell A. Gordon
2、压缩方法综述
https://arxiv.org/pdf/2002.11985.pdf
*KD是知识蒸馏
3、从算法应用层、框架层、硬件层考虑加速
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。