当前位置: 首页 > 科技观察

阿里开源!轻量级深度学习设备端推理引擎MNN

时间:2023-03-20 22:24:56 科技观察

近日,阿里正式开源了轻量级深度学习设备端推理引擎“MNN”。AI科学家贾扬清评论道:“与Tensorflow、Caffe2等同时涵盖训练和推理的通用框架相比,MNN更注重推理的加速和优化,解决了模型部署阶段的效率问题.高效实现模型背后的业务。这与服务端TensorRT等推理引擎的思路不谋而合。在大规模机器学习应用中,考虑到大规模模型部署,机器推理端的计算量学习往往是训练端计算量的十倍以上,因此推理端的优化尤为重要。”MNN背后的技术框架是如何设计的?你对未来有什么规划?今天一起来了解更多。1.什么是MNN?MNN是一个轻量级的深度学习端到端推理引擎,其核心解决的是深度学习问题运行在端侧推理上的神经网络模型,涵盖了深度神经网络模型的优化、转换和推理,目前MNN已经应用于手道、手猫、优酷、聚划算、UC、飞猪、腾讯等20余款APP。千牛,涵盖直播、短视频、搜索推荐、商品图片搜索、互动营销、权益分发、安全风控等场景,每天稳定运行数亿次。此外,还有应用在菜鸟自提柜等物联网设备中,2018年双十一购物节,MNN在天猫晚会的笑脸红包、扫一扫、猜星游戏等场景中得到了应用。端侧推理引擎MNN项目已经开源在Github上,地址如下:https://github.com/alibaba/MNN2,MNN优势MNN负责加载网络模型,推理和预测返回相关结果,整个推理过程可以分为模型的加载和解析,计算图的调度,异构后端的高效运行。MNN具有通用性、轻量级、高性能、易用性等特点:通用性:支持Tensorflow、Caffe、ONNX等主流模型格式,以及CNN、RNN、GAN等常用网络;supports86TensorflowOpsand34CaffeOps;每个计算设备支持的MNNOps数量:CPU71,Metal55,OpenCL40,Vulkan35;支持iOS8.0+、Android4.3+及POSIX接口的嵌入式设备;支持异构设备的混合计算,目前支持CPU和GPU,可以动态导入GPUOp插件替代CPUOp的实现;轻量级:针对端侧设备特性进行深度定制和裁剪,无任何依赖,可轻松部署到移动设备和各种嵌入式设备中;在iOS平台上,armv7+arm64静态库大小约为5MB,链接生成的可执行文件大小约为620KB,metallib文件大小约为600KB;性能:不依赖任何第三方计算库,依靠大量手写汇编实现核心运算,充分发挥ARMCPU的计算能力;iOS设备可开启GPU加速(Metal),支持iOS8.0及以上,常见机型比苹果原生CoreML更快;Android提供了OpenCL、Vulkan、OpenGL三套解决方案,尽可能满足设备的需求,并针对主流GPU(Adreno和Mali)做了深度调优;卷积和转置卷积算法高效且稳定。任何形状的卷积都可以高效运行。广泛使用Winograd卷积算法,高效实现3x3->7x7等对称卷积;额外针对ARMv8.2的新架构进行了优化,新设备可以利用半精度计算的特性进一步提速;易于使用:完整的文档和示例;有一个高效的图像处理模块,涵盖了常见的变形、转换等需求。一般不需要引入libyuv或者opencv库来处理图像;支持回调机制,方便提取数据或控制运行方向;支持运行网络模型中的部分路径,或指定CPU3.MNN核心介绍3.1模块设计如上图所示,MNN可以分为两部分:Converter和Interpreter。Converter由Frontends和GraphOptimize组成。前者负责支持不同的训练框架。MNN目前支持Tensorflow(Lite)、Caffe和ONNX;后者通过算子融合、算子替换、布局调整等方式优化图。解释器由引擎和后端组成。前者负责计算图的模型加载和调度;后者包括每个计算设备下的内存分配和Op实现。在Engine和Backends,MNN应用了多种优化方案,包括在卷积和反卷积中应用Winograd算法,在矩阵乘法中应用Strassen算法,低精度计算,Neon优化,手写汇编,多线程优化,内存Multiplexing,异构计算等3.2性能对比采用mobileNet、SqueezeNet和业务常用的主流开源框架进行对比。结果如下图所示:与NCNN、Mace、TensorflowLite、Caffe2相比,MNN有20%以上的优势。其实我们更专注于内部使用的业务模型的优化,以及人脸检测等模型的深度优化。iPhone6可以实现5ms左右的单帧检测。注:截至2019年3月1日,Mace、TensorflowLite和Caffe2均使用GitHub代码库的master分支;由于编译问题,NCNN使用20181228Release预编译库。4.MNN开源历史4.1为什么要做side-to-sidereasoning?随着手机计算能力的不断提升和深度学习的快速发展,特别是小网络模型的不断成熟,原本在云端进行的推理和预测可以迁移到端。终端智能是指在终端侧部署和运行AI算法。与服务端智能相比,终端智能具有低延迟、数据隐私、节省云端资源等优势。目前,终端智能化正逐渐成为一种趋势。从行业的角度来看,它已经在AI相机、视效等场景中发挥了巨大的价值。手机淘宝作为电子商务的超级APP,业务形态丰富。拍立淘、直播短视频、互动营销、试妆、个性化推荐搜索等业务场景都有端到端的智能诉求。结合端到端的智能能力,可以为用户带来全新的交互体验,助力业务创新突破。一般来说,端侧深度学习的应用可以分为以下几个阶段:模型训练阶段主要解决模型训练,利用标注数据训练相应的模型文件。为设备端设计模型时,需要考虑模型的大小和计算量;在模型压缩阶段,主要优化模型尺寸,可以通过剪枝、量化等方式降低模型尺寸,以便在设备上使用;模型部署阶段,主要实现模型部署,包括模型管理部署、运维监控等;设备端推理阶段主要完成模型推理,即加载模型,完成与推理相关的所有计算;由上可见,设备端推理引擎是设备智能应用的核心模块。在有限计算能力和有限内存的约束下,高效利用资源快速完成推理。可以说,推理引擎在设备端的实现,直接决定了算法模型能否在设备端运行,业务能否上线。所以,我们需要一个device-to-side推理引擎,一个优秀的device-to-side推理引擎。4.2为什么开源MNN?2017年初,在开始引擎开发之前,我们重点研究系统方案和开源方案,从通用性、轻量级、高性能、安全性等方面进行了深入分析。CoreML是Apple的系统框架,MLKit和NNAPI是Android的系统框架,系统框架最大的优势就是轻量级——在包大小上比较大方。最大的缺点是通用性。CoreML需要iOS11+,MLKit和NNAPI需要Android8.1+。可以覆盖的机型非常有限,难以支持嵌入式设备的使用场景。另外,系统框架支持的网络类型和Op类型较少,可扩展性较差。设备的计算能力没有得到充分利用,模型安全性存在问题。综上所述,系统框架不是一个好的选择。开源方案中,TensorflowLite尚未发布,Caffe相对成熟但不是针对端侧场景设计开发,NCNN刚刚发布,还不够成熟。总的来说,我们无法针对不同的训练框架和不同的部署环境找到一套简单、高效、安全的端到端推理引擎。因此,我们希望针对不同的业务算法场景、不同的训练框架、不同的部署环境,提供一个简单、高效、安全的端侧推理引擎MNN。可以抹平Android和iOS之间的差异、碎片化设备之间的差异、不同训练框架之间的差异,实现端侧的快速部署和运行,可以灵活的添加OP和异构设备的深度表现如CPU/GPU根据业务模型优化。随着时间的推移,NCNN、TensorflowLite、Mace、Anakin等逐渐升级开源,给我们很好的投入和借鉴。我们随着业务需求不断迭代优化,经历了双十一的考验,已经比较成熟完善,所以开源给社区,希望能为应用和物联网开发者贡献自己的力量。5.应用场景目前,MNN已经集成在淘宝、猫客、优酷、聚划算、UC、飞猪、千牛等20+团APP中。应用于鉴权、试妆、搜索推荐等场景,每天稳定运行数亿次。2018年双十一购物节,猫湾笑脸红包、扫星猜星等场景也使用了MNN。拍立淘是手机淘宝中一款图片搜索识别产品。自2014年上线以来,经过不断的迭代开发,已经成长为拥有超过1000万个UV的应用。该技术也在迭代更新中。从最早的云端识别拍照上传图片,发展到现在的物体识别在端切图,然后上传到云端进行识别,有效提升了用户体验,节省了服务器端的计算成本。对于一些简单的物体分类,万物识别和logo识别,也已经支持直接通过端上的模型进行实时识别。微笑红包是2018年双十一猫夜首秀,这款游戏基于实时人脸检测和表情识别能力。实时人脸检测算法实现了传统触控交互玩法向自然交互玩法的跨越,为用户带来全新的用户体验。集物福是2019年春节期间的一项活动,也是手机淘宝首次以扫年货的方式加入这项活动。通过扫一扫商品识别能力识别红色年货,除了福卡,还可以获得羽绒被、五粮液、茅台、帝王蟹等实物奖励,成为下金蛋的“母鸡”。6.我们计划每两个月发布一个稳定版本的Roadmap。目前计划如下:模型优化:改进Convertergraph优化改进对量化的支持,增加对稀疏的支持调度优化:增加模型flops统计针对设备硬件特性的动态调度运行策略计算优化:现有后端持续优化(CPU/OpenGL/OpenCL/Vulkan/Metal)优化Armv8.2Backend,支持量化模型使用NNAPI,增加NPUBackend应用快速矩阵乘法,Winograd算法优化性能其他:文档和示例改进测试,benchmark相关工具支持更多Ops