一直以来,随着深度学习的快速发展,复杂而庞大的模型需要在计算力强大的计算设备上才可以展示其强大的能力,如GPU,深度学习运行在移动和嵌入式设备中,它赋予了这些设备在终端本地运行机器学习模型的能力,从而不再需要向云端服务器发送数据。这样一来,不但节省了网络流量、减少了时间开销,而且还充分帮助用户保护自己的隐私和敏感信息

,而在没有强大计算机资源支持的情况下,怎样才能大规模部署深度学习算法成为可能。因此博主会通过本文来系统介绍下目前已经成功落地的深度学习框架。

揭秘支付宝中的深度学习引擎:xNN

支付宝App中的深度学习引擎——xNN。xNN通过模型计算框架两个方面的优化,解决了深度学习在移动端落地的一系列问题。

xNN的模型压缩工具(xqueeze) 在业务模型上实现了近50倍的压缩比, 使得在包预算极为有限的移动App中大规模部署深度学习算法成为可能。xNN的计算性能经过算法和指令两个层面的深度优化,极大地降低了移动端DL的机型门槛。

我们对支付宝APP做逆向工程,发现一些native library :

1. amnet-http 是 http 协议相关的一些东西,不是http协议的实现,里面用到了 Google 的Brotli 压缩格式Facebook 的ZSTD 压缩算法,看来Ali采用了业界比较成熟的一些压缩方法直接用到支付宝上了。这个库叫amnet,猜测应该是 Ali’s mnet意思, mnet是别人家的东西,Ali改了改。

2. amnet-mmtp, mmtp应该是另外一个Protocol了,没看错的话就是MPEG Media Transport Protocol。另外还有amnet-mng, mng貌似是manager的缩写,用来管理的吧。

3. APSE 不知道是不是AliPay Security的缩写,其实这里感觉大部分内容都是mbedtls 的,主要是SSL/TLS相关内容。既然跟SE(安全)相关,肯定少不了加密,这里确实能找到很多加密算法的常数。

4. Openssl,微信里也有,OpenSSL 是一个安全套接字层密码库,囊括主要的密码算法、常用的密钥和证书封装管理功能及SSL协议,并提供丰富的应用程序供测试或其它目的使用。支付宝作为一款支付工具,在安全方面肯定做了很多的加强!
OpenSSL被曝出现严重安全漏洞后,发现多数通过SSL协议加密的网站使用名为OpenSSL的开源软件包。OpenSSL漏洞不仅影响以https开头的网站,黑客还可利用此漏洞直接对个人电脑发起“心脏出血”(Heartbleed)攻击。据分析,Windows上有大量软件使用了存在漏洞的OpenSSL代码库,可能被黑客攻击抓取用户电脑上的内存数据。

5. Protocol Buffers:这是Google的,要使得模型在客户端本地,开发者必须要在桌面设备上提前训练好一个模型,各种类型的数据都需要使用 Protocol Buffers(简称 ProtoBuff)来定义数据结构,有了这些 ProtoBuff 代码,你就可以使用工具来生成对应的 C 和 Python 或者其它语言的代码,方便装载、保存和使用数据。

6. sigAlgorithm,名字很直白,签名算法。

7. silk,Skype的音频库,微软大方开源给大家用了,对商业使用也很友好,随便用。

8. XNN,Caffe, MXNET 深度学习的库:看来支付宝中有好几种DL框架。

深度学习——云端还是移动端?

近来,深度学习(DL)在图像识别、语音识别、自然语言处理等诸多领域都取得了突破性进展。DL通常给人以计算复杂、模型庞大的印象——从Siri语音助手到各种聊天机器人、再到支付宝“扫五福”,移动端收集数据+云端加工处理似乎成为一种常识。然而对很多应用来说,这种模式其实只是无奈之选。

去年春节的“扫五福”活动中,为了识别手写“福”字,支付宝多媒体团队调动了近千台服务器用于部署图像识别模型。可是如此规模的集群也没能抵挡住全国人民集五福的万丈热情。为了防止云端计算能力超载,活动中后期不得不启动了降级预案——用计算量小但精度也较低的传统视觉算法替代了DL模型。降级虽然不妨碍大伙继续热火朝天地收集福卡,但对用户体验无疑是有一定影响的,比如一些不可言说的汉字也被误判成了“福”字。

xNN主要特性一览

xNN为DL模型提供了从压缩到部署、再到运行时的统计监控这一全生命周期的解决方案。xNN环境由开发后台和部署前台两部分组成。

开发后台以xqueeze工具链为核心,支持多种训练框架。业务可以使用xqueeze压缩、优化自己的DL模型,得到尺寸大幅减小、运行速度显著加快的模型版本。压缩后的模型据使用场景部署:高频模型安装包内置低频模型按需下发的形式部署到移动端。

部署前台:xNN还通过一个jsapi提供了直接对接H5应用的能力——通过DL模型的动态下发和H5,能够实现完全的动态化,从而在客户端不发版的情况下完成算法+逻辑的同时更新。

xNN的部署框架原生兼容Caffe,业务可以在不做转换的情况下直接在移动端运行已有的Caffe模型,以快速评估效果。而经过压缩的私有格式模型更小、更快。在Tensorflow和Keras平台上训练的模型也能够在原有的环境上进行压缩,然后转换为xNN支持的格式部署到移动端(tensorflow和keras有自己的模型压缩工具,可以看我的上一篇博文中有介绍:TensorFlow Lite入门)。不同于core ML,xNN理论上支持安卓和iOS上的所有机型。

xqueeze模型如何压缩

xNN-xqueeze的模型压缩流程如下图之(a)所示,包括神经元剪枝(Neuron Pruning)突触剪枝(Synapse Pruning)量化(quantization)网络结构变换(network transform)自适应Huffman编码(adaptive Huffman)、共5个步骤。

其中,前三步理论上是有损的,而使用xqueeze对网络权重压缩超参进行finetune(微调),能够将精度的下降保持在可控甚至可忽略的程度。后两步则完全不影响网络的输出精度整个流程不仅会减小模型的尺寸,还通过网络的稀疏化和结构优化,显著提高前向预测的速度。

在压缩的经典方案DeepCompression的基础上,xqueeze 进一步扩充了Neuron pruning和Network Transform的能力。其中,Neuron Pruning能够逐次裁剪掉“不重要”的神经元和与之对应的权重参数。通过Neuron Pruning和Synapse Pruning的结合,在模型精度和压缩比之间达成更好的平衡。xqueeze还具有network transform——在网络的宏观层面进行优化的能力,Network Transform脚本扫描整个网络,诊断出可优化的点,包括在有条件的情况下自动地进行层(layer) 的组合与等效替换。此外,xqueeze通过自适应地使用Huffman编码,有效提升不同稀疏程度的模型之压缩比。

如下图所示,对于业务分类模型,使用xqueeze工具链能够实现45.5倍的压缩,在同等程度的精度损失下,压缩率超越经典方案达60%。

xNN计算性能优化

xNN的性能优化不局限于底层,而是通过与xqueeze工具链的配合,在算法指令两个层面同步发力,为更为深入的优化创造空间。
如下图所示,在算法层,xqueeze的剪枝在压缩模型尺寸的同时,也促进了网络的稀疏化——即催生出大量的零值权重。相应地,xNN在指令层实现了稀疏运算模块,在卷积和全连接计算中,自动忽略这些零值权重,减小计算开销,提升速度。又如之前已经提到的,在xqueeze的Network Transform阶段,会对网络进行宏观层面的优化,包括将相邻的层进行结果上等效的组合与替换,来减少计算的冗余度和提高访问存储器的效率, 要充分发挥network transform的效能,也离不开指令层实现的支持。

在指令层,xNN通过智能调配各个内核的负载,提升多线程环境下的性能。xNN在设计中不仅关注计算资源,还充分考虑了访问存储器的开销,通过精细化地调度数据的读写来提升cache的命中率。最为重要的是,所有核心计算模块均由某位芯片行业出身的指令集架构专家一条一条汇编代码手写而成,这是很牛逼的。

在以SqueezeNet为基础的业务分类模型上,xNN在Qualcomm 820 CPU上能够输出29.4 FPS的前向预测帧率,在苹果A10 CPU (iPhone 7)上的帧率则达到52.6 FPS,比CPU与GPU并用的Core ML还要更快。

业务落地

xNN的最新版本在确保精度的前提下,尺寸已压缩到100KB以下。Android平台上,全功能xNN的SDK包增量仅200KB出头,若根据特定应用做裁剪,将能够轻松减小到100多KB。

挑战

随着手机处理器性能的提升和模型轻量化技术的发展,移动端DL正在变得越来越可行,并得到了广泛的关注。苹果和谷歌已经分别宣布了各自操作系统上的DL框架Core MLTensorflow Lite,这无疑将极大地促进移动端DL的发展。但是,尤其对于支付宝这样的国民App来说,仍然存在一些严峻的挑战是无法通过直接套用厂商方案来解决的。

  1. 机型跨度大:支付宝App拥有数亿受众群体,在其中落地的业务必须对尽可能多的用户、尽可能多的机型提供优质的体验。对支付宝来说,参考Core ML只将功能开放给少数高端机型的做法是不合适的。因而无论在运行速度和内存占用等性能指标、还是在兼容性上,支付宝的移动端DL都必须做到极致,才能最大幅度地降低使用门槛。
  2. 包尺寸要求严:支付宝App集成了众多的业务功能,安装包资源非常紧张,一个新模型要集成进安装包往往意味着需要下线其他的功能。而即便通过动态下发的形式进行部署,DL模型的大小也会强烈影响用户的体验。随着移动端智能化程度的不断提升,直接在端上运行的DL应用必然会越来越多,这以当前单个模型大小就动辄数十、数百M的尺寸来看几乎是不可想象的。同时,移动端DL引擎本身的SDK也需要尽可能地瘦身。

小米深度学习框架—MACE

在2018年 月 28 日,第十三届开源中国开源世界高峰论坛上,小米首席架构师、人工智能与云平台副总裁崔宝秋在《小米 AI 时代的开源》的主题演讲中,代表小米正式发布了小米移动端深度学习框架 —— MACE。

目前tensorflow已支持GPU加速,但是tensorflow Lite还未支持,GPU加速,好在谷歌强大的生态环境,默认情况下TensorFlow Lite使用的是CPU来进行解算,如果你需要使用Android 8.1推出的硬件加速API,则需要确保它运行在受支持的设备上。

如果对小米的MACE感兴趣,可以查看其项目地址:

接下来我们了解下头条在移动端是怎么部署的

在现场 Demo 展示中,应用可以快速推断出短视频中质量最高的图像,它会给出评分前三的视频帧。除此之外,字节跳动 AI 实验室还能利用深度卷积神经网络抽取关键视频片段,并总结为更精简的短视频。

现场 Demo 展示还有很多炫酷的应用与方法,例如在足球直播中,实验室构建的系统能追踪球员与足球,并估计相机所在的位置及拍摄的球场区域。这一系统在 2018 年世界杯期间接入了今日头条客户端的直播间,它还能检测精彩片段,并为 Xiaoming Bot 写作机器人提供图像素材。

其实 Demo 中的很多应用都需要部署到移动端,例如给人脸加各种特效的激萌或抖音等。为此,实验室展示了一种快速轻量级的人脸识别方法。他们会使用经量化的修正版 MobileNet V2,并采用知识蒸馏方法从预训练的大模型中学习更优秀的精炼模型。因此在实际应用中能以毫秒级的延迟完成人脸识别任务,而对人脸再加特效也就非常迅速了。

经过这么多的展示,总的而言字节跳动有非常多优秀的产品,而这些产品正需要新兴的机器学习乃至深度学习技术提供更多「炫酷」的功能。

总结:目前来看,苹果和谷歌已经较早开源其DL框架Core ML和Tensorflow Lite,至于开发者们喜欢用哪个可以自己根据兴趣和选业务进行选择。

可参考我的上篇博文Tensorflow Lite

参考:阿里技术年度精选集

移动端深度框架 TensorFlow Lite 、小米MACE和 支付宝xNN 比较相关推荐

  1. 移动端目标识别(1)——使用TensorFlow Lite将tensorflow模型部署到移动端(ssd)之TensorFlow Lite简介...

    平时工作就是做深度学习,但是深度学习没有落地就是比较虚,目前在移动端或嵌入式端应用的比较实际,也了解到目前主要有 caffe2,腾讯ncnn,tensorflow,因为工作用tensorflow比较多 ...

  2. python tensorflow 智能家居_机器学习助力智能家居,支持ESP32的 TensorFlow Lite Micro 现已发布!...

    ESP32 简介:Wi-Fi MCU 我们很高兴宣布设备端机器学习框架 TensorFlow Lite 已支持 ESP32 芯片组,可进一步减轻 TensorFlow Lite Micro 的工作负载 ...

  3. 比拼三大移动端深度学习框架,小米MACE有哪些优势?

    采访嘉宾 | 何亮亮 AI前线导读: 随着深度学习领域的快速发展,以及移动端芯片计算能力的逐步提升,设备端上的深度学习推理正在变成一个巨大的需求和趋势,一个好用的深度学习框架成为深度学习应用落地的关键 ...

  4. AI开发者看过来,主流移动端深度学习框架大盘点

    简书作者 dangbo 在<移动端深度学习展望>一文中对现阶段的移动端深度学习做了相关展望.作者认为,现阶段的移动端 APP 主要通过以下两种模式来使用深度学习: online 方式:移动 ...

  5. PyTorch Mobile在端侧可堪大用?能否与TensorFlow Lite一较高下

    田海立@CSDN 2020-11-07 PyTorch 1.3中发布Pytorch Mobile,其支持情况如何,能否与TensorFlow Lite一较高下呢?本文试分析之.PyTorch Mobi ...

  6. TensorFlow Lite学习笔记

    TensorFlow Lite学习笔记 目录 TensorFlow Lite学习笔记 Tensorflow LIte Demo 模型固化freeze_graph和模型优化optimize_for_in ...

  7. 一文盘点10大移动端机器学习框架

    本文介绍了适用于移动端的 10 个机器学习框架,包括针对计算机的机器学习框架和针对手机端的优化性能的框架. 本文介绍了适用于移动端的 10 个机器学习框架,包括针对计算机的机器学习框架和针对手机端的优 ...

  8. 谷歌TensorFlow Lite支持Core ML

    在与苹果合作之后,昨日,谷歌 TensorFlow 团队宣布,TensorFlow Lite 正式支持 Core ML.今后,iOS 开发人员将可以利用 Core ML 的优势来部署 TensorFl ...

  9. TensorFlow Lite发布重大更新!支持移动GPU、推断速度提升4-6倍

    乾明 发自 凹非寺 量子位 出品 | 公众号 QbitAI TensorFlow用于移动设备的框架TensorFlow Lite发布重大更新,支持开发者使用手机等移动设备的GPU来提高模型推断速度. ...

最新文章

  1. Oracle12C的卸载过程
  2. 堡垒之夜一年内增1亿玩家、YouTube为支持AV1的8K电视提供8K内容、Elon Musk要过极简生活等...
  3. centos7安装nginx和php,centos7安装nginx1.10和php7
  4. Win10技巧:16个系统优化设置小技巧,大幅度提升你的电脑性能!
  5. 参数化测试 junit_使用JUnitParams进行参数化的JUnit测试
  6. ble芯片 全称_蓝牙芯片都有哪些厂商?一文解答
  7. python 中的面向对象
  8. 全方位带你解读软件测试分类
  9. FCKEditor报java.lang.NullPointerException
  10. Hive 3.1.2 国内镜像下载地址
  11. 移动APP测试用例设计的关注点
  12. css设置弹出信息,javaScript自定义alert弹出信息窗口
  13. 如何处理偶现的 Bug
  14. 关于JavaScript中万恶的this
  15. About kettle carte
  16. 教你怎么用you-get精确下载B站视频及弹幕
  17. 一款功能强大的IP查询工具!
  18. 希尔顿荣誉客会与FLYERT飞客宣布建立合作伙伴关系,为忠诚会员提供超值奖励...
  19. Producing Snow CodeForces - 948C 优先队列+思维
  20. 【C语言】求一个字符串的长度,不要使用strlen()函数

热门文章

  1. python申明全局变量_Python之全局变量篇
  2. (二)小记——linux 查看主次设备号、以及misc_register生成的次设备号
  3. 微信小程序请求后端php数据
  4. 数据表插入数据insert into
  5. 日常生活补充维生素C需要选对吃法
  6. 一个工科生的竹资源探索之旅
  7. Node下载安装步骤
  8. 机械键盘ALT与WIN键功能互换,或win键被锁定
  9. 优秀的装机必备「系统「效率「笔记「程序员」mac软件集
  10. 两种方法快速搞定高版本的cad图怎么在低版本中打开