端智能在手机淘宝中有哪些应用?MNN是什么?
署名2021-01-08

端智能在手机淘宝中的应用

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

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

1、利用AI新技术,创造全新的交互方式。这种利用AI,打开一个新赛道的方式是最难的,也是最有回报的。

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

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会在运行时根据运行环境寻找出最快的算子实现算法(我们称这个过程为“半自动搜索”)。

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

第一:MNN 的性能是领先于业界的。2019年9月的数据:Arm CPU上MNN 的单线程推理性能大约是TFlite的2~4倍;4线程推理性能大约是 TFLite 的10~20倍。

第二: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 的主要模块有:模型转换,模型量化工具和推理引擎本身

MNN 未来展望

从以后的发展来看,有这么两点:第一,解决现有的问题;第二,把握未来的趋势,面向未来做技术布局。

解决现有问题方面:

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

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

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