首次在手机端不牺牲准确率实现BERT实时推理,比TensorFlow-Lite快近8倍,每帧只需45ms...
作者 | 王言治
出品 | AI科技大本营(ID:rgznai100)
基于Transformer的预训练模型在许多自然语言处理(NLP)任务中取得了很高的准确度。但是这些预训练模型往往需要很大的计算量和内存。由于移动平台的存储空间以及计算能力的限制,这些模型很难实现在移动端的部署。
因此,在这个边缘计算越来越重要的今天,如何有效的压缩这些大模型成为了一个重要的研究课题。
在过去的一年中,为了减少BERT模型的大小,同时保持多个下游NLP任务的准确性,很多小模型被相继提出。例如,DistilBERT 和TinyBERT是通过减少Transformer Block数量来达到减小模型的目的,然而精确度相比于BERT-base有明显下降。
MobileBERT在BERT-base的基础上,成功的将模型尺寸比减小了4倍,并且保持了较小的精度损失。有意思的是,如果我们将MobileBERT与VGG-16进行对比, MobileBERT的计算量比VGG-16小5.3倍,但计算延迟却比VGG-16的高6.2倍。
造成这种现象的原因是MobileBERT拥有超过2000个计算层(与BERT-large相同),这会在计算过程中产生大量的中间结果,最终导致严重的计算延迟。
这也成为了将拥有较深层的网络模型部署在移动端实现实时推理的另一大阻碍。
因此,我们不禁思考,是否存在一种有效的解决方案,可以在不牺牲BERT模型准确率的情况下,在移动端实现实时推理?
近日,美国东北大学王言治研究组和威廉玛丽学院任彬研究组共同提出了名为CANAO的编译器感知的神经网络结构优化框架,在保持了与BERT原模型相近的准确率的同时,他们成功的将模型大小减少了4.8倍,速度提升了5倍。
相比于TensorFlow-Lite(TFLite), CANAO框架在速度方面提升了7.8倍,延迟仅为45ms,首次实现在手机端的高准确率(几乎不牺牲准确率)、实时自然语言处理任务。
他们将CANAO与三种模型BERT-base, DistilBERT, MobileBERT在准确率和延迟上做了对比。CANAOBERT w/o distill.是直接训练的小模型,CANAOBERT是通过知识蒸馏法训练的模型,CANAOBERT是通过NAS进一步优化模型宽度得到的模型。
可以看出,三个CANAO模型的延迟都小于对比的三种模型。相比于BERT-base,他们的模型在CPU和GPU上分别快了5.2倍和4.1倍,准确率仅降了0.5-2%。相比于MobileBERT, 他们的模型在CPU和GPU上分别快了1.49倍和1.53倍,准确率仅降了0.4-1%。
上表显示了他们的编译器感知的神经网络结构优化框架在DistilBERT,BERT-base以及他们的CANAOBERT模型上取得的效果,并与TFLite框架(只支持移动端CPU)进行了比较。CANAO框架可以分别在CPU和GPU上提升2倍和2.4倍的速度。未进行任何优化的BERT-base模型在TFLite上的运行速度是382ms, 而他们的压缩模型在CANAO框架下最快能达到45ms,速度提升了7.8倍。
他们的研究最先起始于对NLP模型的深度与模型准确率关系的探究。
目前大多数预训练NLP模型都很深,从计算层数来算的话,BERT-base有1000+层,Bert-large和MobileBERT有2000层,这会导致在移动端部署时很高的计算延迟。
那么NLP模型真的需要这么多层数吗?如果需要的话,要如何解决高延迟的问题呢?
模型深度vs模型准确率
首先,对于层数问题,他们做了多组对比实验。如下表所示,在拥有相同的计算量的前提下,他们分别使用了一个深且窄的网络结构和一个浅且宽的网络结构,并进行了准确率的对比,以此来探究模型深度与准确率的关系,这些模型是通过BERT-large蒸馏得到。
通过对比实验结果可以发现,在相同的计算量下,较深的网络确实比较浅的网络在准确率方面有更好的表现,从而也在一定程度说明了网络深度对于NLP模型的必要性。
那么要如何解决深度带来的高延迟问题呢?
他们提出了CANAO编译器感知的神经网络结构优化框架,其中包括:
1.基于轻量级多项式的层融合技术(Lightweight Polynomial-based Layer Fusion)
2.编译器感知的神经结构搜索技术(Compiler-aware Neural Architecture Search)
基于轻量级多项式的层融合技术
这是一种基于编译器的优化技术,通过有效的合并多个计算层,来大量减少由多次存取层间结果带来的计算延迟。
编译器感知的神经结构搜索技术
他们是首个将编译器优化信息作为反馈信息加入到神经结构搜索的循环中,来实现对网络模型的协同优化,让模型同时拥有高准确率和低延迟。
虽然使用网络延迟来优化网络结构的硬件感知神经结构搜索(hardware-aware NAS) 已经被提出,但是在NAS和编译器优化之间仍然缺少一些联系。
例如,现有的支持硬件的NAS: MnasNet、FBNet、ProxylessNAS都采用通用的、非优化的编译器。对于具有较浅层数的CV应用来说尚可达到较好的效果,但是对于具有数百甚至数千层的网络,如果没有编译器优化的协助,则很难实现低延迟的目标。
而他们提出的CANAO编译器感知的神经网络结构优化框架可以让搜索出的模型满足编译器优化后的对计算资源的高利用率,从而在保持高准确率的前提下,实现对BERT类模型在移动设备上的实时推断。
Demo视频见详见B站:
【CoCoPIE深度学习】手机实时BERT问答2 On-mobile real-time question answering using BERT
https://www.bilibili.com/video/BV1Wp4y1a7RK
更多技术细节可以查阅文章
https://arxiv.org/abs/2009.06823
结语
在移动手机普及的今天,如何在移动端等资源受限的设备上使用 BERT 模型,是一个极具挑战问题。而CANAO编译器感知的神经网络结构优化框架提供了一个有效的解决方案,它对BERT模型进行结构优化,并在编译器优化的协助下,在移动端实现了高准确率、实时自然语言处理。
作者简介:
王言治是美国东北大学电子与计算机工程系助理教授。他在清华电子系和南加州大学拿到本科和博士学位。他的主要研究方向是深度神经网络的加速与安全性。他们的CoCoPIE压缩编译协同优化框架可以实现大多数神经网络在移动端的实时推理。他的文章广泛发表于各个顶会顶刊,包括机器学习方向AAAI,CVPR,ICML,ICCV,ICLR,IJCAI,ECCV等,电路与设计自动化方向DAC,ICCAD,ISSCC,FPGA等,计算机系统方面ASPLOS,ISCA,MICRO,HPCA,CCS,VLDB,PLDI,ICS,PACT等。他的文章引用超过7200次,得过Google,Mathworks, Intel等研究奖项,得过4项最佳论文奖,另外10次提名,多次设计竞赛奖项。他的研究工作被媒体广泛报道和引用超过400次。他的多位学生已经在各个学校担任教职,包括康涅狄格大学,克莱姆森大学等,工作单位包括谷歌、脸书、腾讯、滴滴(超新星员工)。
更多精彩推荐
关于Python 3.9,那些你不知道的事
OpenCV 实现视频稳流,附Python与C++代码!| 防抖技术
英伟达收购,ARM也要变美国公司,国产芯出路几何?
张勇云栖连讲三年,阿里云十年一剑,王者归来
相关文章:

[svc]caffe安装笔记-显卡购买
caffe,这是是数据组需要做一些大数据模型的训练(深度学习), 要求 服务器显卡(运算卡), 刚开始老板让买的牌子是泰坦的(这是2年前的事情了). 后来买不到这个牌子的,(jd,tb)看过丽台的,看过gtx系列的哪个型号来着, 也不合适,后来买的特斯拉显卡 [查了下一些知名的显卡牌子](https…
AABO:自适应最优化Anchor设置,性能榨取的最后一步 | ECCV 2020
编译 | VincentLee来源 | 晓飞的算法工程笔记Introduction目前,主流的目标检测算法使用多种形状的anchor box作为初始预测,然后对anchor box进行回归调整,anchor box的配置是检测算法中十分重要的超参数。一般而言,anchor box的配…

Android列表控件选项中添加进度框ProgressBar实现
今天有时间就学习了下在ListView、GridView列表项中清加ProgressBar,小马用最简单的代码实现可以通用的功能,人人都能看懂,哈哈,直接说下,如果你的适配器getView方法返回的View是一个自定义控件的话,有点不好实现哦&am…

写一个通用数据访问组件
出处:http://www.csharp-corner.com willsound(翻译) 我收到过好多Email来问我如何用一个通用的数据提供者(data provider)在不失自然数据提供者(native data provider)稳定而强大功能的前提下来访问不同的数据源(data sources).一个小伙子…

InstallShield 2015 LimitedEdition VS2012 运行bat文件
转载:http://www.cnblogs.com/fengwenit/p/4271150.html 运行bat文件 网上很多介绍如何运行bat的方法,但我这个是limted 版本,不适用。 1. 打开 Define Setup Requirements and Actions –> Custom Actions 2. 右健 After Register Product –> Ne…

理解C#中的string类型
作者:未知目的 本文的目的在于揭示和DOTNET及C#相关的一些常见的和不常见的问题。在这些问题中我的第一篇文章和string数据类型有关,string数据类型是一种引用类型,但是当和其他引用类型比较的时候,很多开发人员可能并不能完全理解它的行为。 问题 对于常见的引用类…
最全总结!聊聊 Python 操作PDF的几种方法
作者 | 陈熹来源 | 早起Python前言本文主要涉及:os 模块综合应用glob 模块综合应用PyPDF2 模块操作基本操作PyPDF2 导入模块的代码常常是:from PyPDF2 import PdfFileReader, PdfFileWriter这里导入了两个方法:PdfFileReader 可以理解为读取器…

three.js(六) 地形法向量生成
2019独角兽企业重金招聘Python工程师标准>>> 上一节采用 分形算法生成地形的高度值, 接着我们需要生成每个顶点的法向量。 three.js 的PlaneGeometry 自带有法向量, 法向量分为两种 即 平面法向量 和 平面每个定点法向量。 因此一个n*n 块组成…

ASP.NET中使用多个runat=server form
作者:未知ASP.NET 在同一个页面不支持多个 runatserver forms,要解决这个问题,可以把每个 form 放在一个单独的 panel 控件中,这样用户就可以简单地通过单选按钮在不同 panel 间切换。代码如下:2FormExample.aspx<%…
激发企业大“智慧” | 深度赋能AI全场景 揭秘你不知道的移动云
2020年是人工智能技术发展的关键年。疫情之下,世界见证了人工智能在抗击疫情中发挥的积极作用;今年4月,国家发改委正式将人工智能确定为新基建的重要领域之一。在历史机遇下,AI已实现"质变和量变",正迈入与技…

ExtJS 4.x 得到资源树上任意的节点对象
上半年做ExtJS 4.x 的时候,遇到过对资源树操作的情况: Ext.tree.Panel 如下图:目的: 直接根据每个节点的{任意key : 对应value},就能找到匹配的节点对象 代码如下: refs : [ { selector : rtree, …

【转载】mysql常用函数汇总
转载地址:http://www.jb51.net/article/40179.htm 一、数学函数ABS(x) 返回x的绝对值BIN(x) 返回x的二进制(OCT返回八进制,HEX返回十六进制)CEILING(x) 返回大于x的最小整数值EXP(x) 返回值e(自然对数的底&…

有关java的一些话
2019独角兽企业重金招聘Python工程师标准>>> 跟着做完TankWar,java才算是入门了,真正学习java从看尚学堂马士兵老师的视频开始,至今三个月已过,感谢马老师的精彩讲解,您才是我真正的java入门老师࿰…

ADO.NET 2.0中的SqlCommand.ExecutePageReader
http://blog.joycode.com/liuhuimiao/在.NET 2.0 PDC或Beta1中,可以看到SqlCommand对象新增了个ExecutePageReader方法,该方法实现了分页读取数据的功能。对于分页读取数据,在ADO.NET1.1中(当然2.0也适合)一般常用动态…
组合游戏系列5: 井字棋、五子棋AlphaGo Zero 算法实战
来源 | MyEncyclopedia上一篇我们从原理层面解析了AlphaGo Zero如何改进MCTS算法,通过不断自我对弈,最终实现从零棋力开始训练直至能够打败任何高手。在本篇中,我们在已有的N子棋OpenAI Gym 环境中用Pytorch实现一个简化版的AlphaGo Zero算法…
2020职场人裸辞三大原因:不开心、工资低、没有盼头
近期,脉脉发布了《2020职场人裸辞现状调研报道》,报道显示2020最让职场人想裸辞的三大原因为:不开心、工资低、没有盼头。报告数据中还显示,工资不满预期是最让人想要裸辞的主要原因,但有超过6成职场人表示,…

Oracle PL/SQL编程学习笔记:Merge方法的使用
Oracle11g的Merge很强大! 1 create or replace procedure BRANCE_REPORT_MERGE is2 3 begin4 Merge into BRANCHREPORT desttable5 using TEMP_BRANCHREPORT tmptable6 on (desttable.SENDER_IDtmptable.SENDER_ID and desttable.BRANCH_IDtmptable.BRANCH_ID…

2.0中获取数据库连接统计数据
作者: http://blog.joycode.com/liuhuimiao/.NET 2.0中的SqlConnection多了一个StatisticsEnabled属性和ResetStatistics()、RetrieveStatistics()两个方法,用于获取SQLServer的连接统计数据。当然,这样做是以性能损耗为代价的,但…

Python学习day5作业-ATM和购物商城
Python学习day5作业Python学习day5作业ATM和购物商城作业需求ATM:指定最大透支额度可取款定期还款(每月指定日期还款,如15号)可存款定期出账单支持多用户登陆,用户间转帐支持多用户管理员可添加账户、指定用户额度、冻…
60分钟看懂HMM的基本原理
作者 | 梁云1991来源 | Python与算法之美HMM模型,韩梅梅的中文拼音的缩写,所以又叫韩梅梅模型,由于这个模型的作者是韩梅梅的粉丝,所以给这个模型取名为HMM。开玩笑!HMM模型,也叫做隐马尔科夫模型ÿ…

获取远程网卡MAC地址
出自: http://blog.joycode.com/liuhuimiao/朋友mingal急问我有关获取远程网卡MAC地址的ASP.net实现。我一开始以为是获取本机MAC地址,说了几种方法给他。由于他还需要获取服务器(本机)相关信息,如硬盘序列号、CPU信息…

[hadoop源码阅读][9]-mapreduce-概论
hadoop的mapreduce的运行流程大概就是如下图所示了 如果要是文字描述,估计要大篇幅了,大家可以参考下面的参考文档. 参考文档 1.http://caibinbupt.iteye.com/blog/336467 2.http://hadoop.apache.org/docs/r0.19.2/cn/mapred_tutorial.html 3.http://developer.yahoo.com/hado…

【小白的CFD之旅】小结及预告
这是小白系列的索引,后续会继续更新。 已更新的部分 01 引子02 江小白03 老蓝04 任务05 补充基础06 流体力学基础07 CFD常识08 CFD速成之道09 初识FLUENT10 敲门实例11 敲门实例【续】12 敲门实例【续2】13 敲门实例【续3】14 实例反思15 四种境界16 流程17 需要编程…
Kaggle金牌得主的Python数据挖掘框架,机器学习基本流程都讲清楚了
作者 | 刘早起来源 | 早起Python导语:很多同学在学习机器学习时往往掉进了不停看书、刷视频的,但缺少实际项目训练的坑,有时想去练习却又找不到一个足够完整的教程,本项目翻译自kaggle入门项目Titanic金牌获得者的Kernelÿ…

input type右对齐与只读的
右对齐的 <input type"text" style"background:#efefef; text-align:right" readonly value"this" /> 只读的input <input type"text" name"nodeCode" readonly value"<%functionNodeForm.getNodeCode()%…

如何从sdcard读取文件
2019独角兽企业重金招聘Python工程师标准>>> 首先,我们必须明白文件储存格式是有许多种的,如utf-8,unicode等。 那么,我们如何将文件原封不动的读取出来呢,我们可以设定,文件储存的绝对路径为filepath。则代…

HDU 2034 人见人爱A-B
人见人爱A-B Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 77157 Accepted Submission(s): 21509 Problem Description参加过上个月月赛的同学一定还记得其中的一个最简单的题目,就是{A}{B}&#…

Java中的包,类的导入,静态导入
包的作用 1. 为了更好的组织代码,能够将自己的代码与代码库的代码分离。 2. 在需要合作完成的工作中,可以使用分包的方式来尽量的减少类命名的冲突。 Sun公司推荐程序员使用公司域名的反向字符作为公司项目的起始包名:如 baidu.com --> c…

实现800*600,1024*768两套分辨率方案
下面这段代码,可以实现800*600,1024*768两套分辨率方案。 <html><head><title>Untitled Document</title><script language"javascript">function go(){var myWidthscreen.widthif (myWidth>800){window.location.repl…
倒计时 4 天!高通人工智能应用创新大赛颁奖典礼线上隆重举行
经过7 个月的激烈角逐,由高通公司(Qualcomm)、中国智谷重庆经开区、CSDN、Testin云测、OPPO、极视角、中科创达、创业邦联合主办,重庆经开区高通中国中科创达联合创新中心协办,TensorFlow Lite 作为开源技术合作伙伴的…