自Transformers诞生以来,紧随其后的是BERT,在几乎所有与语言相关的任务中,无论是问题回答,情感分析,文本分类还是文本生成,都占据着NLP的主导地位。 与RNN和LSTM消失的梯度问题(不影响长数据序列的学习)不同,Transformers在所有这些任务上的准确性更高。 RNN和LSTM不可扩展,因为它们必须考虑先前神经元的输出。

现在,《Transformers》的主要问题是它们在训练和推理方面都需要大量计算。 虽然可以通过使用预先训练的语言模型(由Google,Facebook和OpenAI Large等大型公司开源)并在我们的数据集上进行微调来解决训练部分,但是这个解决方案并不完美。 现在,后一个问题可以通过FastFormers解决,FastFormers是一组配方,可以在各种NLU任务上为基于Transformers的模型实现高效的推理时间性能。

“将这些建议的方案应用于SuperGLUE基准,与现成的CPU模型相比,能够实现9.8倍至233.9倍的加速。 在GPU上,通过所介绍的方法,我们还可以实现最高12.4倍的加速。” -FastFormers

论文 FastFormers: Highly Efficient Transformer Models for Natural Language Understanding( arxiv.org/2010.13382)主要集中于为Transformer模型提供高效的推理,从而能够在大规模生产场景中进行部署。 作者特别关注推理时间效率,因为它主要支配了生产部署的成本。 在此文章中,我们将介绍本文所解决的所有问题和挑战。

那么,他们如何解决推理时间过长的问题?

他们主要利用三种方法,即知识蒸馏,结构化修剪和模型量化。

第一步是知识蒸馏,它可以减小模型深度和隐藏状态的大小,而又不影响准确性。

其次,结构化修剪可通过减少自我关注头的数量来缩小模型的尺寸,同时还努力保持准确性。

最后,模型量化可通过最佳利用硬件加速功能来加快模型执行速度。 在CPU上,采用8位整数量化方法,而在GPU上,所有模型参数都转换为16位浮点数据类型,以最大程度地利用有效的Tensor Core。

深入研究

知识蒸馏:知识蒸馏是指通过逐步讲授一个较小的网络,确切地讲,使用一个已经受过训练的较大网络来做什么,来进行模型压缩的想法。 虽然大型模型比小型模型具有更高的知识能力,但这种能力可能未得到充分利用。 即使模型使用很少的知识能力,评估模型在计算上也可能同样昂贵。 知识蒸馏将知识从大模型转移到小模型,而不会失去有效性。 由于较小型号的评估成本较低,因此可以将其部署在功能较弱的硬件(如智能手机)上。

知识蒸馏方法:特别使用两种方法,即特定于任务的蒸馏和与任务无关的蒸馏。

在特定任务的蒸馏中,作者按照TinyBERT提出的程序将经过微调的教师模型提炼为较小的学生体系结构;在与任务无关的蒸馏方法中,作者直接对常规蒸馏模型应用微调以针对特定任务进行调整。

知识蒸馏的结果:在实验中,作者观察到当蒸馏为其他模型类型时,蒸馏模型不能很好地工作。 因此,作者限制了我们的设置,以避免将Roberta模型提炼为BERT,反之亦然。 下表中,通过验证数据集上的教师模型总结了有关任务的知识提炼结果。 (学生称为蒸馏模型)

神经网络修剪:神经网络修剪是一种压缩方法,涉及从经过训练的模型中删除权重。 在农业中,修剪会切断植物不必要的分支或茎。 在机器学习中,修剪可以消除不必要的神经元或重量。 神经网络修剪技术可以将经过训练的网络的参数数量减少90%以上,减少存储需求并提高推理的计算性能,而不会影响准确性。 这有助于减小训练后的神经网络的大小或能耗,并有助于提高推理效率。 修剪使网络更高效,更轻便。

结构化修剪方法:我们的结构化修剪方法的第一步是识别“多头注意”中最不重要的头和前馈层中最不重要的隐藏状态。

  • 用于计算重要性分数的一阶方法,该方法利用一阶梯度信息而不是基于幅度的修剪。
  • 在进行重要性分数计算之前,作者将掩码变量添加到每个注意头以进行头部的梯度计算。然后,作者在整个验证数据集上对模型进行正向和反向遍历,然后累积梯度的绝对值。这些累积的值然后用作重要度分数,我们将其用于分类头部和中间隐藏状态的重要度。
  • 根据目标模型的大小,作者从网络中选择给定数量的顶部磁头和顶部隐藏状态。完成排序和选择步骤后,作者将重新分组并重新连接其余的头部和隐藏状态,从而使模型更小。修剪头部和隐藏状态时,作者在不同图层上使用相同的修剪率。这使得进一步的优化可以与修剪的模型无缝地协同工作。
  • 在实验中,作者发现,经过修剪的模型经过另一轮知识蒸馏后,可以获得更高的准确性。因此,知识蒸馏再次应用于该模型。

模型量化:量化是指用于执行计算并以小于浮点精度的位宽存储张量的技术。 量化模型对张量使用整数而不是浮点值执行部分或全部运算。 这允许更紧凑的模型表示,并在许多硬件平台上使用高性能矢量化操作。

CPU上的8位量化矩阵乘法:与32位浮点算术相比,8位量化矩阵乘法带来了显着的加速,这归功于CPU指令数量的减少。

GPU的16位模型转换:V100 GPU支持Transformer架构的完整16位操作。 同样,除了具有较小的值范围外,16位浮点运算不需要对输入和输出进行特殊处理。 由于Transformer模型受内存带宽限制,因此这种16位模型转换带来了相当可观的速度提升。 观察到大约3.53倍的加速,具体取决于模型设置。

除了应用的结构和数值优化外,作者还利用各种方式进一步优化计算,尤其是多处理优化和计算图优化。

综合结果

下表说明了以下结果的有效性

在本文中,作者介绍了FastFormers,它可以在各种NLU任务上为基于Transformer的模型提供有效的推理时间性能。 FastFormers论文的作者表明,利用知识提炼,结构化修剪和数值优化可以大大提高推理效率。 我们证明,这些改进最多可以提高200倍,并以节省22倍的计算量实现200倍以上的推理成本节省。

最后FastFormers源代码: https://github.com/microsoft/fastformers

作者:Parth Chokhra

deephub翻译组

FastFormers 论文解读:可以使Transformer 在CPU上的推理速度提高233倍相关推荐

  1. 亚马逊:我们提取了BERT的一个最优子架构,只有Bert-large的16%,CPU推理速度提升7倍...

    选自arXiv 作者:Adrian de Wynter.Daniel J. Perry 机器之心编译 机器之心编辑部 提取 BERT 子架构是一个非常值得探讨的问题,但现有的研究在子架构准确率和选择方 ...

  2. 让Transformer的推理速度提高4.5倍,这个小trick还能给你省十几万

    点击上方"视学算法",选择加"星标"或"置顶" 重磅干货,第一时间送达 丰色 发自 凹非寺 量子位 报道 | 公众号 QbitAI 最近,N ...

  3. 深度学习模型Intel与ARM部署性能分析,Intel和ARM CPU上CNN计算速度差距分析。

    深度学习模型部署性能分析,Intel和ARM CPU上CNN计算速度差距分析. 一. 模型部署CPU性能分析 1.1 开发阶段CPU-Intel X86架构 1.2 测试阶段CPU-ARM架构 1.3 ...

  4. AI论文解读:基于Transformer的多目标跟踪方法TrackFormer

    摘要:多目标跟踪这个具有挑战性的任务需要同时完成跟踪目标的初始化.定位并构建时空上的跟踪轨迹.本文将这个任务构建为一个帧到帧的集合预测问题,并提出了一个基于transformer的端到端的多目标跟踪方 ...

  5. NeurIPS论文解读|Decision Transformer: 通过序列建模解决离线强化学习问题

    今天为大家推荐一篇2021年被NeurIPS收录的一篇论文. <Decision Transformer: reinforcement learning via sequence modelin ...

  6. Transformer论文解读一(Transformer)

    最近Transformer在CV领域很火,Transformer是2017年Google发表的Attention Is All You Need,主要是针对自然语言处理领域提出的.本系列文章介绍Tra ...

  7. 论文解读TransFG: A Transformer Architecture for Fine-grained Recognition

    此篇文章是transformer在细粒度领域的应用. 问题:Transformer还未应用在图像细分类领域中 贡献点:1.vision transformer的输入把图像切分成patch,但是是没有o ...

  8. YOLOv7来临:论文解读附代码解析

    前言: 是一份关于YOLOv7的论文解读,首发于[GiantPandaCV]公众号,写的不是很好,望大佬们包涵! 2022年7月,YOLOv7来临, 论文链接:https://arxiv.org/ab ...

  9. Compression-Expansion Coding Improvements in MLC/TLC NVM论文解读

    文章目录 写在前面 背景知识 已有方案和架构思考 CompEX编码方案 核心思想 CompEx编码对压缩技术的选择 expand coding(扩展编码) 编码的数学定义 编码的实例 数据的压缩 核心 ...

最新文章

  1. MapReduce_wordcount
  2. 第十七届全国大学生智能汽车竞赛 沁恒微电子芯片推荐
  3. php发送短信验证码
  4. python编程语言的缺点-常见的AI编程语言优缺点比较,程序员千万不要入错行!...
  5. 【音乐理论】音与音高 ( 音域 | 音符表示 )
  6. Oracle自定义函数
  7. while(1); 作用
  8. Lucene全文检索_分词_复杂搜索_中文分词器
  9. PHP随机生成中国人姓名的类
  10. 安装window10出错:选中的磁盘具有 MBR 分区表。在 EFI 系统上,Windows只能安装到GPT磁盘。
  11. window xp共享文件夹
  12. SwiftUI实战教程 第三章 土豆List
  13. 如何将电脑图片缩小kb?图片怎么压缩大小?
  14. java类的构造方法编程训练—买可乐
  15. codeforces884D(大概是构造,优先队列)
  16. 孤单还是对你最好的惩罚
  17. Kylin(二) 安装与搭建
  18. Java岗大厂面试百日冲刺 - 日积月累,每日三题【Day16】—— Spring框架2
  19. 问题 C: 考试排名(一)(结构体专题)
  20. golang计算任意两点间的方位角

热门文章

  1. 步进电机控制,RPM与PPS单位关系分析
  2. 玩纸牌 -- Google面试题
  3. PyQt5(一) PyQt5安装及配置,从文件夹读取图片并显示,模拟生成素描图像
  4. 通达信 缠论分笔、分段DLL插件
  5. 计算机网络 —— TCP的三次握手四次挥手
  6. 判断某个对象属性值都不为空/至少有一个属性值不为空
  7. lib vs 生成pdb_「pdb文件」VS PDB文件详解 - seo实验室
  8. 平均股价的时间序列图形_求平均股价指数的公式怎么编???????
  9. 自己搜集编写的Delphi 通用函数
  10. 如何编写 INF 文件