相比云侧智能,端智能具有低延时、保护数据隐私、节省云端计算资源等显著优势。
背景
近年来,以深度学习为代表的新一代人工智能技术得到了快速发展和广泛应用,模型训练和模型推断基本都在云侧完成。但随着移动设备算力的提升、模型压缩技术的成熟,模型推断在终端设备运行成为可能,端智能(On-Device AI)应运而生。
端智能是指算法模型在终端设备上运行及其上层应用。其中,终端设备是指以手机为主的各种智能设备,算法模型多数是指深度学习模型。相比云侧智能,端智能具有低延时、保护数据隐私、节省云端计算资源等显著优势。目前手机上的智能摄像、人脸识别、增强现实(AR)特效等端智能应用已经非常普遍。据全球权威IT研究与顾问咨询公司高德纳(Gartner)预计,到2022年,80%的智能手机将内置人工智能技术。
阿里巴巴内部丰富的业务场景为技术创新提供了肥沃的土壤,手机淘宝作为国内规模最大的电商App之一,早在2016年就在拍立淘场景中进行端智能相关应用实践。经过多年探索、实践和沉淀,我们目前已经构建了相对完整的端智能技术体系,并且在拍立淘、直播内容理解、AR商品导购等场景获得规模化应用。据不完全统计,阿里巴巴集团内部已经有超过30个移动App应用了端智能技术,手机淘宝内部应用场景超过25个。
问题和挑战
图1 端智能业务应用流程
端智能在手机App上的应用开发链路如图1所示。首先是问题定义,通过需求分析,识别业务问题并将其拆解为AI算法问题;其次进行数据采集、模型设计、训练、压缩和转换;最后将模型部署到端上,当业务应用时,加载算法模型做推断运行。端智能全链路较长,涉及服务端和移动端、算法开发和移动开发,面临的核心问题和主要挑战如表1所示。
核心问题 | 主要挑战 |
算法模型在端侧高效运行及模型大小问题;算法前后处理库(OpenCV、Numpy等)在端侧缺失问题 | 终端设备和系统碎片化,终端计算、内存等资源有限;训练框架碎片化,模型过大 |
算法研发遇到的全链路问题(压缩、转换、校验、调试、部署、运行),模型快速迭代和运行质量问题 | 算法开发和移动开发协作效率低,算法迭代慢;移动App稳定性要求高,版本发布周期长,修复问题慢 |
算法应用时门槛过高,难以大规模化应用落地 | 端智能应用场景碎片化,业务团队算法人员缺失 |
表1 端智能面临的核心问题和主要挑战
端智能技术体系
图2 端智能技术体系
针对上述问题和挑战,淘系端智能团队经过长期思考和实践,构建了端智能完整技术体系,如图2所示,其设计的基本思想和特点是:
- 跨生态:通过基础层构建深度学习推理引擎等高性能计算库,解决模型运行和前后处理计算问题,覆盖碎片终端硬件和系统生态;
- 全链路:通过系统层平台化建设轻量级的深度神经网络推理引擎MNN(Mobile Neural Network)[2]工作台、MNN运行时和MNN服务端,解决算法模型研发全链路问题,以及运行期算法任务计算、数据和调度问题;
- 低门槛:通过方案层配合算法人员沉淀开箱即用算法集和领域解决方案,降低算法门槛,实现多App、多场景快速复制接入应用。
- 接下来:我们将围绕阿里自研并开源的深度神经网络推理引擎MNN ,深入解读端智能技术体系。
基础层
端智能技术体系的基础层主要包含支持模型运行和前后处理的一系列计算库,目前在终端运行的算法模型主要以深度模型为主,因此解决深度模型在终端设备高效运行的问题尤为重要,为此我们自研并开源了端侧推理引擎MNN,如图3所示。
图3 端侧推理引擎MNN全景图
推理引擎面临的挑战
推理引擎的本质是为了实现异构模型在异构的设备和系统上最高效地运行,主要面临以下两方面的挑战。
环境碎片:(1)网络模型碎片化,存在卷积神经网络(Convolutional Neural Networks,CNN)、循环神经网络(Recurrent Neural Network,RNN)、生成式对抗网络(Generative Adversarial Networks,GAN)等不同结构;(2)训练框架碎片化,存在TensorFlow、PyTorch、PaddlePaddle、MindSpore等多种不同的深度学习框架,产生不同的模型格式;(3)软硬件环境碎片化,存在ARM CPU、GPU、NPU等硬件,同时存在iOS、Android多版本的操作系统。
资源受限:移动设备本身的算力、内存、存储等资源有限,且不具备云侧横向扩展能力。在算力方面,虽然移动设备的算力相比之前已有明显提升,但相比云侧集群算力还存在好几个数量级的差距。比如华为麒麟970 NPU算力有1.92 TFLOPS,而谷歌TPU集群算力已达EFLOPS级别。在内存方面,以iPhone12 Pro为例,运行内存仅有6 GB。在存储方面,目前移动设备的存储大小有64 GB、128 GB、256 GB不等,具体到每个App的存储空间更加有限。
MNN的基本设计思路
针对上述两大挑战,推理引擎的目标就是找到一种技术方案,向上覆盖多种训练框架和模型结构,向下覆盖多种异构设备和操作系统,同时在特定设备上实现极致性能。MNN基本的设计思路如下。
归一化:针对训练框架碎片化,通过模型转换,将不同训练框架的模型格式转换成MNN格式,再进行统一的优化、压缩。针对移动设备碎片化问题,通过几何计算归一化算子实现,提供20多个基础算子,其他算子则通过基础算子组合而成。
差异化:针对硬件CPU/GPU/NPU计算单元、内存等方面的差异性,一方面,几何计算中的基础算子针对异构硬件做差异化极致优化,比如针对各个CPU、GPU后端,手工实现汇编代码,优化矩阵乘、汇编等核心算子,接近对应硬件的理论计算量,获取极致性能;另一方面,通过半自动搜索、自动调优等方式,结合硬件和模型的特性,选择合适的计算方式,从而获得最高效的模型运行方式。
MNN的核心功能模块
MNN的核心功能模块为模型转换、模型压缩、半自动搜索、自动调优和几何计算。
模型转换:是推理引擎的必要模块,关键是如何做到转换的完备性、正确性和易用性。(1)完备性:提供TensorFlow/TFLite/PyTorch/ONNX/Caffe模型转换工具,实现大量训练框架算子;(2)正确性:提供自动校验流程,及时发现转换错误问题;(3)易用性:与可视化工具Netron集成,且支持Windows、Mac系统。
模型压缩:这是降低模型大小和计算量的有力手段,可有效应对移动终端算力、内存、存储等资源受限情况,关键问题是如何做到既降低模型大小又能保证模型精度。经过长期实践,MNN目前支持的模型压缩方案主要是量化和稀疏剪枝的方法。量化分为训练量化算法和离线量化算法。训练量化算法有8比特训练量化和低比特量化,如Overflow-aware量化、权值7比特量化,使得模型在推理的过程中可以更多次地使用高效的硬件乘加指令集而不溢出8比特整数的位宽,在保证模型推理精度、降低内存占用的情况下性能提升30%左右。通过TensorFlow和PyTorch插件提供训练量化算法,支持在这两个训练框架中无缝训练使用。离线量化算法分为KL/ADMM量化、权值量化、EMA量化,相关算法在MNN模型转换工具中有所支持,可以做到转换时压缩。稀疏剪枝算法将模型层间的连接依据一定的规则置零,并对模型进行稀疏编码,从而获得模型体积的降低和性能的提升。按照作用机制,稀疏剪枝分为随机稀疏和分块稀疏,其中分块稀疏可充分利用硬件SIMD指令的并行度,在稀疏度(零值权重比例)为90%时,与稠密计算相比可获得3~4倍的性能加速。
半自动搜索:这是一种在引擎运行时,根据硬件信息和模型结构信息进行动态决策,选取最高效运行方式的技术方案。引擎需要预先完成不同硬件与不同算子的实现方案,并相应地设定损失评估公式。在加载模型时,根据设备硬件信息、模型算子、输入信息,按评估公式计算这些方案的计算性能,选择最优实现。为了支撑引擎运行时具有的半自动搜索能力,MNN提出了名为“预推理”的特殊处理过程,即一次模型推理运行。在预推理过程中,会提前进行算子的计算策略选择和资源分配,基于这些配置,可以提升该模型后续的推断运行性能。将半自动搜索往前再推一步,是MNN在移动端GPU后端中所使用的自动调优(autotuning)优化手段。移动端GPU在内存、运算、调度各方面存在较多不同的优化元素,如矩阵乘计算分块的复用量、局部线程并发量等。与CPU不同的是,这些优化的元素与模型和具体的GPU硬件存在强关联,而无普适的规律,因此,需要在运行时的“预推理”步骤进行自动调优,耗时2~10秒不等,即通过多次试跑自动尝试上述优化元素的组合,自动找出当前硬件最佳的算子实现。
几何计算:MNN所需要支持的硬件后端呈现碎片化和多样性特性。有移动端ARM CPU(ARMv7、ARMv8、ARMv8.2)/GPU(OpenCL、OpenGL、Metal)/海思NPU,服务端x86 CPU(SSE、AVX、AVX2、AVX512)和NVIDIA GPU,而每个硬件后端都需要实现超过100个算子。如何低成本地实现多后端高性能算子是极具挑战的工作。几何计算是一种从根本上解决碎片化环境下算子优化问题的技术方案,其基本思想是:在网络中张量形状已知的前提下,将算子的坐标映射关系固化为一系列数据,进而将众多算子归一化为少量核心算子。
设MNN支持的算子数为N,后端数为B,则实现所有算子所需工作量为O(BN)。几何计算的核心目标是通过算子拆解化归,使用少数核心算子组合实现其余算子,从而将O(BN)工作量降至O(B) +O(N)。具体而言,如图4所示,任意算子实现可拆分为形状计算(即计算输出张量维度,复杂度为O(N))、资源分配(即在相应后端申请内存,复杂度为O(B))以及内容计算(即算子自身逻辑,复杂度为O(BN))。内容计算进一步拆解为复杂度为O(BN)的坐标映射和复杂度为O(B)的基础算子,如Exp、Add、Multiply、MatMul、Conv。几何计算的核心是将坐标映射拆解为算子相关的区域信息计算逻辑(即图示的“几何计算”)和硬件相关的数据搬运逻辑(即图示的“光栅算子”)。光栅算子根据给定的输入输出张量的区域计算逻辑,进行实际的数据搬运,得到输出张量。
图4 几何计算示意图
MNN的特性
深度学习引擎MNN具有通用性、高性能、轻量性、易用性四大特性。
通用性:MNN支持TensorFlow、TFLite、Torchscript、ONNX、Caffe等主流模型格式,并支持CNN、RNN、LSTM、BERT等常用网络结构以及动态形状、控制流等动态模型机制。此外,MNN支持179个TensorFlow算子、71个TFLite算子、85个Torchscript算子、113个ONNX算子、58个Caffe算子,同时支持171个ARM CPU算子、154个OpenCL算子、154个Vulkan算子和153个Metal算子。在异构系统方面,支持iOS 8.0+、Android 4.3+和具有POSIX接口的嵌入式设备,以及PC操作系统(Mac OS、Windows、Linux)。
高性能:MNN支持的异构后端包括ARM CPU(v7/ v8/ v8.2)、移动端 GPU(OpenCL/Vulkan/Metal)、NPU(华为海思NPU、苹果Apple Neural Engine)、x86、CUDA。MNN在各个硬件后端上性能优异,位于业界前列[3, 4]。
轻量性:(1)引擎轻量化方面,在iOS平台上,ARM v7+ARM64 Framework大小为12.8 MB左右,链接生成可执行文件增加1.1 MB左右,metallib文件400 KB左右;Android ARM64平台上,动态库(.so库)大小770 KB左右,OpenCL库180 KB左右。(2)模型轻量化方面,MNN提供由量化和稀疏剪枝算法组成的模型压缩工具箱,其中量化算法可在模型精度基本不下降的情况下将模型大小压缩75%左右,同时相对于浮点运算性能提升约30%;而稀疏剪枝算法可以实现在稀疏度90%时获得3~4倍的性能加速。
易用性:MNN支持C++、Object-C(iOS)、Java(Android)、Python、JS多语言应用程序接口(API)。此外,MNN还提供了完备的文档和工具集(模型转换、模型压缩、模型可视化),具体见MNN开放网站。
系统层
系统层主要通过平台化建设思路,系统性地解决研发期算法任务部署的效率和质量问题,以及运行期算法任务运行时的计算、数据和调度问题。
在研发期,主要存在以下问题。(1)迭代效率:如图1所示,算法人员从训练完模型到真正部署到端侧运行,还涉及模型转换、压缩、真机调试、业务封装、集成发布等工作,中间需要算法、工程和测试人员互相协作,根据实践经验,整个过程往往以月度来计算;(2)任务质量:移动App因其版本发布慢、修复问题困难等特点,对端智能算法任务的稳定性和性能提出更高要求,如果算法人员对移动App研发不熟悉,对工程实践中的稳定性、性能等内容关注不足,将影响任务质量。
在运行期,主要存在以下问题。(1)计算:计算单元需要考虑移动设备天然碎片化和差异化的软硬件生态。端侧运行的算法任务除模型推断运行外,往往存在前后处理计算,涉及图像处理、数值计算等,在若干场景下还需要做端和云之间的计算中继。(2)数据:端侧算法任务计算的中间和最终结果往往需要上传至云端使用,云侧资源数据也需要下载到端侧作为算法任务的输入,因此需要做好数据的上传下达以及为算法提供标准化的数据服务。(3)调度:云-端之间调度,面向海量差异化设备需要提供个性化的部署服务,支持按人群、设备、功能等多维度进行发布;端内多任务间调度,算法任务运行与移动App前台用户操作存在竞争,需要选择合适时机运行,避免影响App前台用户体验。
图5 端智能系统方案
针对上述问题,淘系端智能团队构建了由MNN工作台、MNN运行时和MNN服务端组成的系统方案,如图5所示,基本设计思路是:
- 提供一站式研发平台软件,将算法和工程开发方案解耦,让算法实现独立迭代,同时发布前做模型精度和运行性能质量校验,使算法任务运行质量可控;
- 提供多端一致、端云一致的计算容器,标准化API接口屏蔽底层移动设备硬件和软件差异;
- 提供端云一致的数据中心,数据可视化规范数据内容,API接口标准化规范数据使用;
- 提供端云协同的任务管理模块,支持云端之间任务个性化部署,以及端内任务调度。
MNN工作台主要包括:(1)一站式算法工作平台,支持算法模型训练、压缩、转换、校验、调试、部署全链路流程,其中模型生产链路主要通过本地界面串联服务端训练平台能力实现,模型压缩、转换、校验主要由本地集成的MNN能力实现。(2)三端一致的调试环境,支持iOS、Android、PC(MAC和Windows)三端一致的调试环境,算法人员不仅能够在PC上快速做任务开发,还能在真机上进行Python任务断点调试、变量修改、日志查询等操作,其技术实现主要是在MNN工作台中集成了基于Python虚拟机的跨平台MNN运行时环境。(3)部署质量保障机制,主要包括算法精度保障和设备运行性能保障。其中算法精度保障主要通过构建服务端ARM推理服务,进行大规模数据样本的算法精度验证;设备运行性能保障主要通过发布前在高、中、低端真机验证运行,系统收集耗时、内存等数据指标判断是否符合发布基准条件。
MNN运行时主要包括:(1)计算容器,基于Python虚拟机构建运行时环境,将底层图像处理库、机器学习库、深度学习引擎、数据计算库等基础能力通过标准API体现;(2)数据中心,基于数据分层设计提供标准数据服务,规范化端侧数据埋点、特征处理、数据存储、数据读取流程,实现流程标准化、可管控、可度量;(3)任务中心,提供算法任务管理、运行触发、性能监控、运维熔断等服务,保障算法任务在端侧运行稳定可靠。
MNN服务端主要包括:(1)发布中心,面向海量设备提供个性化的部署服务,同时保障稳定性,做到可灰度、可监控、可回滚,具体包含任务管理、安全发布、监控运维、算法实验等功能;(2)数据中心,面向算法提供标准化、规范化的数据服务,包括数据可视化、数据接入授权、数据使用消费统计等内容;(3)模型中心,面向算法提供模型训练、模型转换、模型压缩、模型评测等服务,是MNN工作台的后台能力中心。
方案层
端智能应用场景碎片化,业务团队中往往缺少算法人员,而模型训练等工作对于工程人员门槛太高,导致应用落地困难。对此,解决思路是把通用的算法能力沉淀下来做成开箱即用的算法集,把在特定场景验证过的端智能应用方案沉淀下来做成解决方案,并且通过系统层MNN工作台统一对所有用户开放。
开箱即用算法集合:淘系算法沉淀PixelAI算法集,累计开发出超过30种功能。比如在人脸相关的功能方面,包含人脸检测、人脸关键点、人脸属性、人脸3D重建、人脸活体检测、人脸比对等基础功能,以及基于基础功能形成了人脸美颜、美型、美妆等上层功能。同时,在图像分割方面,覆盖人像分割、头发分割、指甲分割、商品分割等。在人体和人手方面,覆盖人体姿态估计(2D和3D)、手势检测和动作识别、脚检测跟踪。
特定领域解决方案:淘系技术基于前述MNN工作台、MNN运行时、MNN服务端积累了若干解决方案。当UC浏览器、闲鱼等其他App也有类似需求时,只需对接MNN运行时和服务端,改造各自端侧用户界面(UI)部分和业务服务端系统,大约一周即可完成整体接入使用。部分案例包括(1)白屏检测方案:基于图像理解算法,在端侧对异常实时检测进行页面展示;(2)图像超分方案:基于端侧实时超分算法能力实现低质量图片清晰化,既保证用户体验又节省流量;(3)反欺诈方案:基于端侧高质量光学字符识别(Optical Character Recognition,OCR)算法能力,在聊天场景中进行实时防范,提示欺诈性的文字和对话,帮助用户避免被诈骗。
典型应用场景
端智能技术已经在手淘拍立淘、直播内容理解、AR商品导购等场景具有规模化应用,下面简要介绍端智能在AR商品导购场景中的应用。
用户线上购物时基本通过图文、短视频了解商品信息,相比于线下购物,线上购物一直存在无法试用商品的痛点。基于端侧智能技术,在端上能够做到实时精准的人脸、脚部检测和追踪,结合真实感渲染能力,为用户商品试用提供了技术可能性。
目前,手淘天猫美妆等已构建“AR试”产品矩阵,包括AR试妆、AR试鞋、AR手表和眼镜试戴等15项能力(如图6所示),累计近5000万用户参与,帮助品牌带来明显转化提升,用户停留时长明显增长。“AR试”给消费者带来有趣好玩、具有真实感的购物体验,让用户可以体验商品上身的逼真效果,打造“先试后买”的购物新体验,提高用户购买决策效率。
AR试的基本方案是“端上实时检测+端上实时渲染”,由于产品交互的强实时需求,AR试的技术难点主要是,手淘在超过300种不同手机型号上解决人脸检测、脚检测、手腕检测等算法的实时性问题。针对这个问题,MNN推理引擎进行极致的性能优化,最终实现AR试妆人脸检测算法耗时小于5ms,AR试鞋检测算法耗时10~50 ms,有效保障了产品方案的实时交互体验。
图6 典型应用场景示例
总结与展望
当前,整个手机和移动应用正在经历一次由端智能技术驱动的智能化变革,比如最新发布手机的各类智能拍摄功能,最新发布的苹果iOS 15中也包含了基于端智能的实时翻译,智能推送等功能。淘系技术从2017年开始在端智能方向重点投入,是行业里少有的站在移动应用开发视角,面对移动设备生态碎片、资源有限、发版周期长等问题,探索沉淀了一套端智能技术方案,并在手机淘宝等场景获得规模化应用验证。其基本思想:通过端侧推理引擎MNN解决深度模型在碎片化终端运行问题;通过一站式端智能平台解决算法模型压缩、转换、调试、验证等全链路问题;通过开箱即用算法集和解决方案降低算法门槛解决规模化应用问题。目前也存在一些问题需要后续解决,比如:碎片化训练框架和终端异构设备问题,特别是NPU的碎片化问题突出且缺少标准化;一站式平台解决整个算法链路还不够顺畅,特别是跟训练的串联;规模化应用还有提升空间,特别是杀手级的应用场景还缺失。
展望未来,宏观上可以把移动设备的智能化发展分为三个阶段。阶段一(云上训练+云上推断):在该阶段的离线阶段,移动端上传数据,云侧聚焦海量数据,训练产出模型;而在在线阶段,移动端上传数据,云侧加载模型,推断运行,返回结果。阶段二(云上训练+端上推断):该阶段的离线阶段与阶段一中的训练推断相同,而在线阶段通过模型压缩将模型小型化后部署到端侧运行。阶段三(端云协同学习):整个端和云是高度协同的,云侧有大模型的训练和推断,端侧也有小模型的训练和推断,云和端之间不只是有数据的通信,还有模型间学习梯度的通信。目前移动设备智能化发展正处于第二阶段,端智能技术在其中发挥巨大作用,并向第三阶段演进。相信未来端云结合会更加紧密,通过端云协同终端设备的智能能力将会更强大。
参考文献
- Gartner. Gartner Highlights 10 Uses for AI-Powered Smartphones. https://www.gartner.com/en/newsroom/press-releases/2018-03-20-gartner-highlights-10-uses-for-ai-powered-smartphones. 2018.1.
- Jiang X, Wang H, Chen Y, et al. MNN: A universal and efficient inference engine[C]// Proceedings of the Conference Machine Learning & Systems (MLSys), 2020.
- 淘系技术. MNN推理引擎最新实测,CPU、GPU性能全面领先https://mp.weixin.qq.com/s/ITCNuAX-PO02LbplfRvhBg. 2020.7
- 淘系技术.谈谈MNN GPU性能优化策略. https://mp.weixin.qq.com/s/vv2RZHcinKwPyq5_qzNxTg. 2020.3.
- MNN. www.mnn.zone.
- 淘系技术. MNN CPU性能优化年度小结. https://mp.weixin.qq.com/s/mYphx3JKiOEGtWS-H9P7Dg. 2021.4.
- 淘系技术. 解析购物新体验背后的移动AI+AR技术.https://mp.weixin.qq.com/s/RQ7RO8iTqWyA5SWHQBd5Gg. 2021.1.