淘系专家带你初探端智能与MNN(下篇)

简介: 端智能在手淘中的应用。

屏幕快照 2020-02-13 上午11.00.36.png

作者|舒会(玄裳)
出品|阿里巴巴新零售淘系技术部

关注「淘系技术」微信公众号,回复“MNN”即可获取两次直播完整版 PPT 及视频回放链接;
点击下方「阅读原文」获取 MNN 开源地址,欢迎大家 star 我们哦~

作者:舒会(玄裳)

MNN 项目核心负责人之一
阿里巴巴淘系技术高级技术专家
先后任职于美国 Amazon、Google
Google ML Kit Founding Members之一

引言

淘系专家带你初探端智能与MNN(上篇)里,我们探讨了端智能的特性,挑战以及趋势。端智能是Mobile First和AI First两条道路的交叉点,也是许多移动开发者跨界发展的出路。

在这篇文章里,我们会介绍一下手机淘宝中端智能的应用。然后会介绍一下手机淘宝端智能中提供核心基础设施的推理引擎MNN。顺带说一句,MNN团队中许多成员之前是做移动开发的。移动开发者向AI开发跨界,可以参考一下哦。

手机淘宝中端智能的应用

手机淘宝(手淘)里面的端智能应用比比皆是。从大家最常用的商品搜索框,到利用照相机视频流买东西的“拍立淘”,再到最近几年兴起的使用AR(增强现实)进行化妆品的试妆,到处都是端智能的应用。

个人认为,端智能在手淘中的应用方式,分为以下两类:

1、利用AI新技术,创造全新的交互方式。这种利用AI,打开一个新赛道的方式是最难的,也是最有回报的。这方面的例子是AR试妆(口红,染发等)。现在在手淘里,你可以进入雅诗兰黛的口红页面,点击“在线试妆”来玩AR技术预览口红的效果。见下图。

屏幕快照 2020-02-13 上午11.02.17.png

2、利用 AI 新技术,给已有的工作的流程提供新的增长点。这个所谓的增长点,可以是更加契合用户个人的特点,也可以是某些操作更加有效率,更加节省服务端的压力,或者更加隐私。当然,可以是以上的几点(个性化,时效性,省服务端算力,隐私性)结合起来。

  • 个性化:千人千模。全局模型可以被用户的个人使用数据个性化定制。目前手淘首页的“猜你喜欢”页面的推荐内容,就是使用了用户的个人数据对全局推荐模型进行了定制,取得CTR的提升 (目前此功能在灰度实验中)。
  • 时效性+省服务端的算力:以手机淘宝首页的信息流为例,手机端会向服务端请求展示的商品,服务端为回复一定数量的商品以及相应的排序,但是这个排序是可以被app内的用户行为实时改变的。这个所谓的“端上重排”就是手机端利用本地的信息,运行一个ML模型,快速做出决定,不用与服务端通信。端上重排根据用户的浏览信息重排商品,可以提高转化率。
  • 隐私性:这方面比较火的是前几年由Google推出的Federated Learning。它可以在每个用户数据不离开手机的情况下,训练出一个描述所有用户的模型,同时有安全算法保证最终的全局模型无法逆向出原始的训练数据。Federated Learning还存在一些基本的研究挑战没有解决[1],所以手机淘宝还停留在尝试Federated Learning,并没有完全工业落地。

MNN介绍

MNN (Mobile Neural Network) 是阿里巴巴内部自己研发的推理引擎。在它研发之初,TFLite刚刚发布,而且由于TFLite最初版有诸多问题,为了快速响应业务的变化,阿里巴巴决定内部自研推理引擎MNN。MNN在2019年5月初在Github开源。开源至今,受益于阿里巴巴内部的用户和开源社区用户的反馈,MNN逐渐成长为一个优秀的、成熟稳定的推理引擎。目前,在阿里巴巴内部,MNN是端上推理引擎的事实标准。

MNN主要解决的是现在端智能的两大痛点:1. 底层的硬件、操作系统碎片化 (CPU、GPU、NPU, Android/iOS, Mobile/IOT) 2. 机器学习的框架复杂(TFLite,PyTorch, ONNX, etc.)。为了能够在不同的硬件、操作系统里发挥最好的功能,MNN会在运行时根据运行环境寻找出最快的算子实现算法(我们称这个过程为“半自动搜索”)。关于半自动搜索的技术细节,我们在第二次直播中有深度解答:http://mudu.tv/watch/4397479

目前端上的深度学习引擎有许多家(Google有TFLite,Facebook有PyTorch,苹果有CoreML,百度有PaddleLite,腾讯有NCNN,小米有MACE,阿里巴巴有MNN),MNN提供了什么特殊的价值呢?为什么用户要选用MNN而不是别的呢?

第一:MNN 的性能是领先于业界的。2019年9月的数据:Arm CPU上MNN 的单线程推理性能大约是TFlite的2~4倍;4线程推理性能大约是 TFLite 的10~20倍。(更多具体实验数据,我们在第二次直播给出:http://mudu.tv/watch/4397479

第二:MNN 的大小有优势。它的静态库约为 TFLite 的66.7% (MNN + OpenCL backend: 1.2M + 334K; TFLite + NNApi backend: 2.3M)。

第三:MNN 支持多种异构设备。CPU方面,MNN 支持了X86,ArmV7, V8。GPU 方面,MNN 支持了 OpenCL, OpenGL, Vulkan, Metal。NPU方面,MNN 支持了华为的 NPU ,并用在手淘的拍立淘场景中。

第四:MNN 的算子支持程度已经得到大幅的加强。MNN 在2019年12月大约增加了200个 OP 。

▐ MNN 的主要模块

MNN 的主要模块有:模型转换,模型量化工具和推理引擎本身。

► 模型转换

模型转换器如下图:

屏幕快照 2020-02-13 上午11.03.17.png

目前,MNN还没有支持从头开始训练一个模型的能力。也就是说,用户必须事先用其他的训练框架比如Tensorflow, PyTorch把模型训练好,然后再转换为MNN的模型格式,最终部署到端上。

它主要的工作流程是,先解析“源头”格式的模型(Caffe、TF、ONNX),进行一些与硬件无关的优化,例如图优化、算子融合、算子替换、布局调整等。得到初步优化的图之后,转换为MNN自己的格式。MNN的模型格式是一个自定义Schema的flatbuffer格式 [2]。

► 量化工具

模型转换好之后,可以使用 MNN 的量化工具对模型进行压缩。目前,MNN支持 post-training quantization(无训练量化)。后续 MNN 会支持 quantization-aware training(带训练量化),以获得更好的准确率和更低比特的压缩。

模型的量化工具如下图:

屏幕快照 2020-02-13 上午11.03.40.png

MNN的量化方案是自己实现的,它目前有ADMM和KL散度两种方案。也就是说,“源头”的预训练好的模型需要是浮点的。ADMM量化方案,是MNN根据达摩院的Paper “Extremely Low Bit Neural Network: Squeeze the Last Bit Out with ADMM” [3] 实现的。它与KL散度的区别在于:ADMM是基于数学优化的方法,只需要几十个数据点即可,但是计算较慢。而KL散度是基于概率统计的方法,需要较多的数据(500到1000个数据点),计算较快。实际操作上来说,对特征的量化,ADMM和KL散度没有巨大的差距;对权重的量化,推荐使用ADMM。

▐ MNN 未来展望

对于未来的发展,我们主要立足于两点来看:第一,解决现有问题;第二,把握未来的趋势,面向未来做技术布局。

解决现有问题方面:

MNN 的易用性还不够。这方面,我们会有一整套的易用性提升:开箱即用的工具箱;文档补齐;Demo 示例;预编译包等… 这些易用性提升的改变,我们预计在今年春节之前发布。
训练:很多时候,要获得一个用于某个应用场景的模型其实很简单:拿 MobileNet 做一下迁移学习,就可以达到很好的效果。MNN 未来会加入训练模型的能力,让这种迁移学习的场景可以直接通过 MNN 的 API 或者工具达成。

面向未来的技术布局方面:

MNN + NPU:NPU的运行速度快了 CPU 好几倍,而且能耗有优势。是未来的主流。而且在可预见的未来,NPU的碎片化比较严重。MNN目前支持了华为的海思NPU,以后会支持更多的 NPU ,并且会提供一个统一的 API ,降低碎片化。
MNN 小程序:小程序平台降低了外部客户把他们的软件写入手淘的门槛。以后,手淘里面的端智能能力,可以通过小程序透出给外部开发者,使用简单,功能强大。今年的双11,modiface 与我们合作,通过小程序使用 MNN ,巨大提升了运行速度(相比于 TFJS ),降低了内存使用。未来,更多的外部客户可以在他们的小程序里调用 MNN ,简单、高效地将机器学习带到小程序里。
模型压缩:前文也提到了 NLP 应用是未来的一大趋势。而 NLP 的模型普遍大于 CV 模型。在这个时候,大幅度地压缩模型,能够让之前只能在服务器运行的模型放到端上运行。所以未来的 MNN ,会提供更好的模型压缩。

结语

坊间传言,许多人在众多推理引擎中选择 MNN 的原因是它快。而 MNN 并没有那么易用。这些用户为了能够使用 MNN 将他们的模型部署到 app 中所做的事情,可谓翻山越岭。

2020年,我们希望 MNN 与用户们一起成长,能够真正成为好用、高效的机器学习引擎,帮助开发者把端智能玩进自己的 app 中。

References
[1] https://en.wikipedia.org/wiki/Federated_learning#Technical_limitations

[2] https://github.com/alibaba/MNN/blob/master/schema/default/MNN.fbs

[3] https://arxiv.org/abs/1707.0987

We are hiring


淘宝基础平台部-端智能团队欢迎移动端计算优化工程师和推理引擎架构师的加入。对新技术感兴趣,善于创新突破,渴望用新技术给用户带来创新体验的同学请联系我们。

简历投递至吕行:chengfei.lcf@alibaba-inc.com

屏幕快照 2020-02-07 下午3.57.54.png

相关文章
|
2月前
|
物联网 机器人 Swift
|
1月前
|
算法 开发者
代码与禅意:技术实践中的悟道之旅
【2月更文挑战第23天】在技术的海洋中,我们如同行者探索未知的领域。本文透过个人的技术实践经历,探讨了编程不仅仅是一门科学或艺术,更是一种哲学和内省的过程。我们将深入分析如何通过代码实现自我超越,以及在这个过程中对技术、生活和存在的深刻理解。
|
6月前
|
人工智能 文字识别 开发者
CogVLM智谱AI 新一代多模态大模型发布,魔搭社区最佳实践体验!
继 5 月 18 日推出 VisualGLM-6B 后,智谱AI&清华KEG 潜心打磨,于近日发布并直接开源了更强大的多模态大模型——CogVLM-17B。模型已第一时间发布在魔搭社区,可体验!
|
7月前
|
机器学习/深度学习 算法 测试技术
蚂蚁集团开源代码大模型CodeFuse!(含魔搭体验和最佳实践)
蚂蚁集团在刚刚结束的2023外滩大会上开源了代码大模型CodeFuse,目前在魔搭社区可下载、体验。
|
11月前
|
算法 搜索推荐
闲鱼技术2022年度白皮书-服务端主题-QCon直击|闲鱼推荐大规模应用背后的工程实践(上)
闲鱼技术2022年度白皮书-服务端主题-QCon直击|闲鱼推荐大规模应用背后的工程实践
195 0
|
11月前
|
存储 资源调度 算法
闲鱼技术2022年度白皮书-服务端主题-QCon直击|闲鱼推荐大规模应用背后的工程实践(中)
闲鱼技术2022年度白皮书-服务端主题-QCon直击|闲鱼推荐大规模应用背后的工程实践
235 0
|
11月前
闲鱼技术2022年度白皮书-服务端主题-QCon直击|闲鱼推荐大规模应用背后的工程实践(下)
闲鱼技术2022年度白皮书-服务端主题-QCon直击|闲鱼推荐大规模应用背后的工程实践
186 0
|
11月前
|
存储 缓存 人工智能
《跨端智能在蚂蚁的应用-青壁》演讲视频&文字版
《跨端智能在蚂蚁的应用-青壁》演讲视频&文字版
111 0
|
11月前
|
机器学习/深度学习 存储 人工智能
【直播预告】蚂蚁端智能技术进展与思考
【直播预告】蚂蚁端智能技术进展与思考
113 0
|
11月前
|
机器学习/深度学习 人工智能 达摩院
2022最火的AIGC落地怎么用,阿里达摩院团队深度解读
2022最火的AIGC落地怎么用,阿里达摩院团队深度解读
295 0