作者 | 王言治

出品 | 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也要变美国公司,国产芯出路几何?

  • 张勇云栖连讲三年,阿里云十年一剑,王者归来

首次在手机端不牺牲准确率实现BERT实时推理,比TensorFlow-Lite快近8倍,每帧只需45ms...相关推荐

  1. MobileNet在手机端上的速度评测:iPhone 8 Plus竟不如iPhone 7 Plus

    如今,正在兴起一项有关手机应用和深度学习的新动向. 2017 年 4 月:谷歌发布 MobileNets,一个可在计算资源有限的环境中使用的轻量级神经网络. 2017 年 6 月:苹果推出 Core ...

  2. 基于 TensorFlow 在手机端实现文档检测

    手机端运行卷积神经网络的一次实践 - 基于 TensorFlow 和 OpenCV 实现文档检测功能 1. 前言 本文不是神经网络或机器学习的入门教学,而是通过一个真实的产品案例,展示了在手机客户端上 ...

  3. h5 调起相机_Html5在手机端调用相机的方法实现

    input调用设备录像,相机等- HTML5官方文档解释:capture属性用于调用设备的摄像头或麦克风. 当accept="audio/或video/"时capture只有两种值 ...

  4. 解决audio和video在手机端无法自动播放问题

    解决audio和video在手机端无法自动播放问题 参考文章: (1)解决audio和video在手机端无法自动播放问题 (2)https://www.cnblogs.com/theblogs/p/9 ...

  5. APICloud中app如何在手机端测试

    首先假设你已经有了APICloud账号,并创建了App项目. 需要注意的是,手机和电脑需要连接在同一wifi环境下. 第一步 下载自定义Loader 进入"开发控制台" 点击我们的 ...

  6. 当心啊!仅仅50行Python,就可以在手机端看小姐姐的电脑桌面!

    看上心意的小姐姐,想看她平时都浏览什么网页,如何才能看她的桌面呢,都说Python很厉害,这次我们做一个利用移动端访问电脑来查看电脑的界面的神器! 不知道大家以前有没有做过这方面的东西呢?也许大家听起 ...

  7. KindEditor解决上传视频不能在手机端显示的问题

    KindEditor自带的上传视频生成的HTML代码为<embed>,在手机端并不支持.于是可以自己在控件里增加生成video标签相关代码. 参考https://www.jianshu.c ...

  8. [html] HTML5的video在手机端如何实现进来页面时就自动播放?

    [html] HTML5的video在手机端如何实现进来页面时就自动播放? 理想情况autoplay=true.但是现实是:基本所有浏览器都屏蔽了这个属性. 能实现的现在只有微信了,微信有一套自己的规 ...

  9. HTML5中的audio在手机端和微信端的不能自动播放

    再做H5页面的时候,发现audio在手机端和微信端添加了autoplay以后还是不可以自动播放,这是因为手机端为了节约流量所设置的 通常解决方法是给一个交互事件: 标签: <audio loop ...

最新文章

  1. ACM JAVA大数
  2. python 链表两数相加
  3. Linux vim打开文件的四种方式
  4. 【HDU - 1863】 畅通工程(并查集+最小生成树)
  5. 大数据入门(一)-大数据概念和特点(1)
  6. 文件服务器 远程访问,远程访问文件服务器
  7. 恢复删除的Exchange邮箱
  8. 计算机房档案管理,河南省数字档案馆机房管理制度
  9. 计算机快捷方式图标没显示不出来,程序快捷方式不显示图标怎么办?Win10快捷方式图标变白纸解决方法...
  10. 全程不用usb数据线,adb通过网络连接Android设备
  11. 《东周列国志》第八十四回 智伯决水灌晋阳 豫让击衣报襄子
  12. Unity3D高级编程之进阶主程-陆泽西 (Jesse Lu)
  13. MAXIMO开发代码记录
  14. win10禁用计算机维护,想要电脑不卡,你必须知道win10必须禁用的服务有哪些
  15. 饥荒联机版连不上服务器_《饥荒》无法连接klei服务器 刷不出服务器解决办法...
  16. 辉芒微FT61F022A
  17. 浅谈javascript的原型和原型链(新手懵懂想学会原型链?看这篇文章就足够啦!!!)
  18. 使用u-view上传图片
  19. JavaScript 10个常见用法
  20. 《机电一体化系统设计》

热门文章

  1. 确定安全威胁与漏洞-A
  2. 布巴内斯瓦尔成智慧城市 印小城何以“智慧”
  3. PHP获取毫秒时间戳,利用microtime()函数
  4. 如何查看Apache的连接数和当前连接数
  5. Directx11 教程(2) 基本的windows应用程序框架(2)
  6. 彻底解决web开发中遇到的路径问题(上)
  7. WebService之soap类型的服务和rest类型的服务
  8. python之模块base64
  9. linux oracle修改编码utf8
  10. AS 400 常用命令