淘宝端智能演进和思考

今天分享内容包括三部分,第一是端智能总体趋势和淘宝应用现状,第二是淘宝在应用端智能过程当中面临的问题和挑战,以及咱们的应对和解决思路,咱们构建了端到端的完整技术体系,第三是开源推理引擎 MNN 的最新状况。git

0一、端智能趋势和现状

端智能简单说就是在端侧作机器学习或者深度学习模型的推理运行及上层应用。端智能相比云端智能具备低延时,保护数据隐私,节省云端计算资源等优点。其实你们在平常生活中已经用到了不少端智能应用,好比手机上拍照的 AI 摄像,人脸解锁 FaceID ,以及短视频 App 中各类 AR 特效等。github

那么,为何会出现端智能,以及他底层演化逻辑是什么?首先这两年有一个明显趋势就是深度学习从实验室往产业落地方向演进,海量终端设备成为落地最佳载体,手机是覆盖用户最多的设备,很容易作到规模化应用。除了这个大的趋势,咱们以为影响端智能演进还有三个关键要素,分别是算力、算法和场景。算法

算力:手机的算力不断增加,每一年 CPU/GPU 性能也有很是大的提高, NPU 更是已经成为标配,而且有数量级上性能提高。性能优化

算法:模型压缩技术不断成熟,其中量化已经很是成熟,基本能够实现不下降精度的状况下将模型缩小为 1/4 甚至更小,另外小模型的架构设计也愈来愈成熟,面向移动端的各类网络模型不断出现,面向移动终端有限资源的算法模型设计也逐步成熟。网络

场景:就手机自己来讲,AI 成为手机的热点和卖点,像 AI 摄像,人脸解锁等已经成为手机的基础功能。从 App 应用场景来讲,近来刷爆咱们朋友圈的应用都是跟 AI 相关的,有 Face App ,垃圾分类识别,以及 Zao App 。目前有些软件更多的是使用云端 AI 能力,须要把人脸照片上传至服务端作换脸,容易出现数据隐私问题。若是用端 AI 来作,不用上传你人脸图片,很天然解决数据隐私问题,只是如今端上算力不够,作不到这样的应用。架构

咱们能够预期的是,随着算力的加强,算法的成熟,基于端智能也会出现愈来愈多有趣、好玩的一些创新应用。框架

如今集团里愈来愈多的 APP 开始应用端智能,拿手淘来讲,端智能已经成为咱们的核心基础能力,助力业务发展的创新和突破。在阿里巴巴有 20 个以上的 APP 在使用端智能,拿手淘来讲,咱们已经上线了 10+个场景,有 25+ 个模型在跑,天天运行次数超过 500 亿次,在手淘搜索推荐等重要场景也在使用端智能作更加精准搜索推荐,今年双 11 也会大规模使用。运维

0二、淘宝端智能体系建设

咱们作了这么多应用,那在应用过程当中到底碰到了哪些问题和挑战?机器学习

首先从 APP 使用端智能整个链路上面看,通常都会有数据采集,作数据清洗或者数据标注,而后作算法模型设计,接着在服务端模型训练,以后进行模型压缩和转化,其次在部署端上面作推理,最后产品落地去使用。整个链路较长,涉及云端和客户端,以及须要算法工程师和移动开发工程师配合才能完成相关应用落地。编辑器

我以为端智能应用有三个大的挑战,第一:总体链路比较长,并且其中每一个节点出现问题都会阻碍端智能应用落地,特别像 17 年算法模型在端侧推理部署运行成为瓶颈,因此咱们开发 MNN 去解决这个问题。第二:算法和工程协同,须要算法工程师和移动工程师通力合做,可是二者存在自然的 gap 须要互相协同配合。第三:端侧环境复杂,碎片化的设备,系统,各类兼容性问题。针对这些问题,咱们构建一套端到端的全链路部署方案,下面具体展开讲解。

这是咱们的技术大图,主要有三部分组成:

  • 客户端引擎 & 框架 包括机器学习算法库,深度学习推理引擎 MNN,算法快速迭代的 Python VM 容器,以及上层的算法能力集合和行业解决方案。
  • 离线配套工具 包括模型转换,模型压缩工具,以及配套的性能测试,调试工具等。
  • 云端平台 包括模型转换和压缩服务,以及模型管理,部署,运维监控的各类系统。

下面将会具体展开讲解推理引擎,开箱即用算法集,行业解决方案三块内容。

首先来看下推理引擎 MNN 的技术挑战,第一碎片化,网络模型,训练框架,终端设备都是碎片化的。第二资源受限,终端设备不像服务端,他的内存,算力比较有限。第三高性能,像人脸检测等实时性要求比较高,因此在资源受限状况下还须要作到高性能,这也是巨大的挑战。

推理引擎,就是找到一种方案实现不一样模型在不一样设备上最高效的运行。这里有三种不一样设计思路。

一种是相似 TVM 的自动化搜索方案,考虑模型的特征,好比卷积核大小,考虑部署设备的硬件特效,好比内存,算力,而后结合二者找到一种最高效的运行方式。这种方式性能高,但成本也高,由于须要离线为每一种设备作遍历调优,找到最高效的运行方式,好比手淘覆盖的手机比较多,因此成本很是高。

第二种方式是纯手工优化,主要是针对特定的卷积核大小作优化,好比 3x3 卷积,因此专门优化的网络模型性能比较好,没优化过的性能会差一些,另外未考虑硬件特性,因此总体性能通常,成本也较高,由于须要遍历状况比较多。

第三种方式就是咱们 MNN 采用的方案,我本身叫半动搜索优化,经过 NC4HW4 内存布局将不一样卷积核作对齐作统一矩阵计算优化,再根据硬件特性调度作选择最优方式运行,咱们如今更可能是基于规则,后续演化考虑作在线调优。总体来讲性能比较好,成本也比较低。

这是 MNN 总体架构图,左边离线部分包含模型转换和模型压缩,将各类训练框架模型转换成 MNN 的模型;右边是线推理部分,MNN 目前支持 CPU,以及 GPU 对应的 OpenCL,Vulkan 等 backend 。

以图上为例, Pixel 2 手机支持 CPU ARM 和 Vulkan backend ,小米 6 支持 CPU ARM,OpenCL , Vulkan backend ,Mate20 支持 ARM82 架构的 CPU backend,以及 OpenCL , Vulkan backend 。

在预推理环节,咱们根据模型结构信息,以及设备的硬件信息 找到一种最快运行方式。好比 Pixel 2 上使用 CPU 和 Vulkan 运行,小米 6 使用 CPU 和 OpenCL 运行,Mate 20 上使用 ARM82 指令和 OpenCL 运行。这是粗粒度的 CPU 和 GPU 运行方式选择,更细一点好比一样 CPU 运行,咱们有 winogrand,strassion 矩阵计算算法会根据模型和硬件特性选择不一样分块,这样实现最快运行。

MNN 很早基于 iDST 量化算法支持了模型压缩能力,可是以前的量化工具的产品化作的不是特别好,过去几个月咱们重点优化了量化工具,尽可能作到简单易用。目前无训练的量化工具咱们已经发布,一行命令就能够简单实现量化,精度降低 1% 之内,文件大小减小到原来的 1/4 ,推理速度提高 30~70% 。另外,咱们正在研发带训练能力的量化方案,这里实现跟业界方案不太不同,咱们为了解决碎片化的训练框架的问题,如今是直接在 MNN 上添加训练能力,这样可使用 MNN 模型作 Finetune 训练。

前面介绍了推理引擎 MNN ,主要解决算法模型端侧运行问题。可是移动开发对算法模型其实不是很懂,以人脸为例,他更但愿有我的脸 API 给我调用一下使用,因此咱们作了开箱即用算法集合,里面有人脸,人体姿态,物体识别等内容。

可是后来咱们发现即便有了人脸特征点,要作一个 AR 人脸特效这样的应用仍是有很大的成本。因此咱们又作了一个 AR 特效解决方案,能够简单方便作一个 AR 贴纸特效。

具体来讲,经过一个 IDE 编辑器作所见即所得的特效编辑,而后导出一个资源文件包,对应端上有个渲染 SDK 解析资源文件作特效还原。但从业务场景来讲,手淘毕竟不是一个短视频 App , AR 贴纸对业务价值有限,因此咱们目前 AR 方案更可能是结合美妆行业,家居行业等作商品相关的 AR 应用,提高用户购物体验。

说完 AR 特效方案,再看一个大数据相关的解决方案。在原有的大数据体系里面,客户端更可能是一个数据采集的角色,服务端作大数据计算和挖掘,而后作例如个性化推荐的应用。

可是随着端算力加强,端上能够跑机器学习和深度学习模型,咱们作了端侧的数据特征计算框架,支持作数据特征提取,模型计算等工做。其中一个应用就是情景计算,利用端侧多维度的数据,能够准确刻画使用手淘的情景信息,好比你是在走路仍是坐车,仍是躺在床上。

另外,根据你在页面的停留时长,浏览轨迹能够识别你对商品的喜爱程度,从而作更加精准的推荐。目前这块已经在手淘的搜索推荐普遍使用,而且取得了不错的效果。

接下来具体看几个在手淘这边的典型应用场景,第一个是拍立淘,拍立淘是一个以图搜商品的服务,原来是直接拍照上传云端作识别,这样总体耗时比较长,服务端成本比较高。如今已经把愈来愈多的部分放到端侧来作,好比物体检测,分割等放到端上来作,而后再上传云端作识别召回,相比原来有更好的用户体验,也节省了服务端成本。

这是一些其余典型应用,第一个是基于用户实时意图识别作交互式搜索推荐,第二个是 AR 试妆,第三个闲鱼作的一个智能发布,第四个是咱们在智能硬件的若干应用。

0三、MNN开源进展和应用

接下来说下 MNN 开源相关的状况,下面是 MNN 的发展历程,咱们 17 年 10 月正式启动,经历 18 年双十一洗礼,今年双十一有更大规模的应用。

这里有几个数字,天天 MNN 在手淘推理次数远大于 2 亿次, Crash 占比 <0.1% , 业界应用 >20 个, issue 修复 260 。因此能够说, MNN 是通过多场景海量计算验证的,它的稳定性和可靠性值得信赖。

MNN 的核心特色是通用性,轻量性,高性能,易用性

目前不管是性能,设备支持,训练框架支持,OP 支持等方面咱们都是业界领先。

MNN 的易用性也是咱们很是重视的一个点,Python 是算法工程师友好的语言,因此咱们构建了 Python 工具链,方便算法同窗测试和验证。目前咱们提供模型转换,模型压缩,模型结构可视化,以及支持 OP 列表查询的工具,下面是具体安装命令,pip install MNN ,而后能够选择对应的工具使用,右侧是模型结构显示的一个示例。

MNN 开源之后,如今已经成为阿里巴巴的官方推荐项目,也很高兴看到业界同窗用 MNN 来作车牌识别,物体检测,车辆检测等各类应用,特别还有同窗写了不少介绍和使用文档。这里一并表示感谢,也但愿更多的同窗可以参与进来。

▼开源地址:https://github.com/alibaba/MNN

关于 MNN 后续演进有三点内容想特别和你们分享。

  • App 视角 这是由咱们出生决定的,咱们服务于手淘这样的超级 App,他须要支持 iOS 和 Android 两个生态,以及支持各类低端机和低版本系统,因此须要咱们解决各类碎片化设备和系统兼容问题。业界不多像 MNN 同样在超过 200 款设备上运行,而且支持业务规模化应用。
  • 性能极致 手淘有像人脸,搜索推荐等各类实时业务场景,以及须要覆盖中低端机的诉求,迫使咱们作极致的性能优化,这样才能很好的支持业务。
  • 开源开放 前面说的咱们在几百种设备运行,各类中低端机以及系统兼容适配,业务规模化应用,这些经验积累都沉淀到 MNN 里面开源给业界,确实业界也没有一个这方便作的特别好,但愿可以给你们有所帮助。

最后,咱们的愿景是期待能和你们一块儿打造功能完善,性能极致,简单易用的端侧推理引擎,而且可以在行业中得到普遍应用。


本文做者:吕承飞(吕行) 

阅读原文

本文为云栖社区原创内容,未经容许不得转载。

相关文章
相关标签/搜索