MNN通用端侧深度学习预测框架介绍

最近端侧的AI模型应用越来越广泛,在端侧的模型应用会面对很多的问题,比如模型适配性和机型适配性,还有计算性能方面的问题。是否有某种框架可以解决这些端侧AI模型遇到的问题,Google、苹果等公司都有相关的工作。今天介绍下MNN框架,由阿里巴巴开源的一款专注于端侧深度学习模型预测框架。

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

MNN核心解决的问题

首先看下MNN的核心功能架构图:

image.png

MNN主要解决了三方面的问题:

  1. Model compatibility:模型多样性的兼容问题,比如来自TensorFlow、PyTorch、Caffe的模型全部兼容,甚至ONNX格式的模型也兼容

  2. Resource limitation:在端侧为了更好地解决性能问题,MNN做了很多框架层面的优化问题

  3. Device diversity:手机端不同品牌的手机系统兼容性一直是嵌入式开发的痛点,作者当年创业做手机应用的时候就被这个问题折磨很久。MNN框架不光适配了Android、IOS等系统,更对不同硬件环境的手机进行了适配,比如对手机侧的CPU、GPU分别作了一定适配。

MNN技术架构

接下来看下MNN技术架构图:

image.png

MNN的整体技术架构分为两个大模块:

  • Offline conversion:离线的模型转换模块,在这个模块需要把不同格式的模型进行格式转换,生成MNN可以接受的格式。另外还需要做计算图优化和模型压缩,是得模型的体检减小

  • On-device Inference:在线模型预测模块,在在线预测模块提供3个优化策略,分别是pre-inference、operator-level optimization和backend abstraction

MNN在线预测模块技术详解

 

接下来就MNN的On-device Inference的三个技术模块pre-inference、operator-level optimization和backend abstraction分别作介绍。

(1)pre-inference

pre-inference可以分为两个部分,分别是computation scheme selection和preparation-execution decoupling。pre-inference本质上就是在基本可以确定要预测的数据量级的情况下做提前的准备。

computation scheme selection指的是将计算量适配到合理的计算资源以及算法层面,他举一个例子,卷积网络可以有两种算法实现,针对不同场景选择更合适的算法是一种提效手段。另外

preparation-execution decoupling指的是提前规划好需要使用的内存资源,这样就可以节约现申请内存带来的时间消耗。

(2)operator-level optimization

operator-level optimization指的就是预测阶段使用的神经网络的一些op在MNN框架层面的优化,更多的是一些数学层面的推理,就不详细介绍了。

(3)backend abstraction

backend abstraction指的是一些针对GPU、TPU、CPU硬件和OpenGL、OpenCL、Vulkan软件层面的优化。backend abstraction的宗旨就是把最合适的计算放到最合适的硬件或者软件环境中进行,比如卷积放到CPU上执行,然后ReLU可以放到GPU上去执行。

总结一下

 

MNN是一个很好地端侧模型应用框架,基本把端侧的模型应用的脏活累活都解决了,在AIEdge的时代,MNN占据了一个绝佳的流量入口,后续MNN应该有更多的应用,可能很快我们熟知的各种APP中就会陆续出现MNN的身影。

猜你喜欢

转载自blog.csdn.net/gshengod/article/details/114711209