• Log in
Anwen  Share and Create
  • Book
  • Movies
  • Music
  • SF
  • Goodlink
  • Asks
  • Eyeopen
  • Create

阿里巴巴开源轻量级深度神经网络推理引擎MNN

Sharer: 机器之心 May 7, 2019 at 6:33 am
Link Share :https://www.jiqizhixin.com/articles/2019-05-07-8 - via RSS

导读:在移动端进行深度神经网络推理,可以使用腾讯开源的ncnn,或者小米开源的Mace,还有百度家的Paddle- Mobile,他们可以帮助开发者在无需过多了解移动端CPU和GPU优化的情况下,快速部署充分利用硬件加速的应用。

刚刚,阿里巴巴也开源了一款工具MNN----Mobile Neural Network 轻量级的深度神经网络推理引擎,并且已经在阿里巴巴内部经过线上部署验证,值得大家参考!

简介

MNN是一个轻量级的深度神经网络推理引擎,在端侧加载深度神经网络模型进行推理预测。目前,MNN已经在阿里巴巴的手机淘宝、手机天猫、优酷等20多个App中使用,覆盖直播、短视频、搜索推荐、商品图像搜索、互动营销、权益发放、安全风控等场景。此外,IoT等场景下也有若干应用。

整体特点

轻量性

  • 针对端侧设备特点深度定制和裁剪,无任何依赖,可以方便地部署到移动设备和各种嵌入式设备中。

  • iOS平台:armv7+arm64静态库大小5MB左右,链接生成可执行文件增加大小620KB左右,metallib文件600KB左右。

  • Android平台:so大小400KB左右,OpenCL库400KB左右,Vulkan库400KB左右。

通用性

  • 支持Tensorflow、Caffe、ONNX等主流模型文件格式,支持CNN、RNN、GAN等常用网络。

  • 支持86个TensorflowOp、34个CaffeOp;各计算设备支持的MNN Op数:CPU 71个,Metal 55个,OpenCL 29个,Vulkan 31个。

  • 支持iOS 8.0+、Android 4.3+和具有POSIX接口的嵌入式设备。

  • 支持异构设备混合计算,目前支持CPU和GPU,可以动态导入GPU Op插件,替代CPU Op的实现。

高性能

  • 不依赖任何第三方计算库,依靠大量手写汇编实现核心运算,充分发挥ARM CPU的算力。

  • iOS设备上可以开启GPU加速(Metal),常用模型上快于苹果原生的CoreML。

  • Android上提供了OpenCL、Vulkan、OpenGL三套方案,尽可能多地满足设备需求,针对主流GPU(Adreno和Mali)做了深度调优。

  • 卷积、转置卷积算法高效稳定,对于任意形状的卷积均能高效运行,广泛运用了 Winograd 卷积算法,对3x3 -> 7x7之类的对称卷积有高效的实现。

  • 针对ARM v8.2的新架构额外作了优化,新设备可利用半精度计算的特性进一步提速。

易用性

  • 有高效的图像处理模块,覆盖常见的形变、转换等需求,一般情况下,无需额外引入libyuv或opencv库处理图像。

  • 支持回调机制,可以在网络运行中插入回调,提取数据或者控制运行走向。

  • 支持只运行网络中的一部分,或者指定CPU和GPU间并行运行。

架构设计

MNN可以分为Converter和Interpreter两部分。

Converter由Frontends和Graph Optimize构成。前者负责支持不同的训练框架,MNN当前支持Tensorflow(Lite)、Caffe和ONNX(PyTorch/MXNet的模型可先转为ONNX模型再转到MNN);后者通过算子融合、算子替代、布局调整等方式优化图。

Interpreter由Engine和Backends构成。前者负责模型的加载、计算图的调度;后者包含各计算设备下的内存分配、Op实现。在Engine和Backends中,MNN应用了多种优化方案,包括在卷积和反卷积中应用Winograd算法、在矩阵乘法中应用Strassen算法、低精度计算、Neon优化、手写汇编、多线程优化、内存复用、异构计算等。

Benchmark性能测试结果记录

2019-2-18

华为 P10

Build Flags: ABI=arm64-v8a OpenMP=ON Vulkan=ON OpenCL=ON
MNN benchmark
Forward type: **CPU**
Warming up...
--------> Benchmarking... loop = 10
[ - ] vgg16.mnn                 max =  499.545ms  min =  410.570ms  avg =  445.868ms
[ - ] SqueezeNetV1.0.mnn        max =   49.437ms  min =   38.759ms  avg =   43.901ms
[ - ] MobileNetV2_224.mnn       max =   26.139ms  min =   20.400ms  avg =   24.489ms
[ - ] inception-v3.mnn          max =  413.265ms  min =  262.142ms  avg =  306.542ms
[ - ] resnet-v2-50.mnn          max =  240.009ms  min =  152.649ms  avg =  176.075ms
[ - ] mobilenet-v1-1.0.mnn      max =   89.461ms  min =   29.903ms  avg =   41.547ms
MNN benchmark
Forward type: **Vulkan**
Warming up...
--------> Benchmarking... loop = 10
[ - ] vgg16.mnn                 max =  293.156ms  min =  227.952ms  avg =  240.050ms
[ - ] SqueezeNetV1.0.mnn        max =   47.752ms  min =   31.191ms  avg =   37.727ms
[ - ] MobileNetV2_224.mnn       max =   61.352ms  min =   35.874ms  avg =   46.321ms
[ - ] inception-v3.mnn          max =  396.939ms  min =  180.353ms  avg =  349.952ms
[ - ] resnet-v2-50.mnn          max =  214.694ms  min =  100.377ms  avg =  169.003ms
[ - ] mobilenet-v1-1.0.mnn      max =   45.946ms  min =   23.257ms  avg =   33.217ms

小米 Max3

Hardware    : Qualcomm Technologies, Inc SDM636

Build Flags: ABI=arm64-v8a OpenMP=ON Vulkan=ON OpenCL=ON
MNN benchmark
Forward type: **CPU**
Warming up...
--------> Benchmarking... loop = 10
[ - ] vgg16.mnn                 max = 1311.661ms  min = 1248.531ms  avg = 1255.455ms
[ - ] SqueezeNetV1.0.mnn        max =  151.955ms  min =   95.348ms  avg =  101.986ms
[ - ] MobileNetV2_224.mnn       max =   94.336ms  min =   50.987ms  avg =   58.299ms
[ - ] inception-v3.mnn          max =  763.095ms  min =  690.005ms  avg =  698.674ms
[ - ] resnet-v2-50.mnn          max =  453.710ms  min =  389.649ms  avg =  396.409ms
[ - ] mobilenet-v1-1.0.mnn      max =  128.781ms  min =   77.023ms  avg =   83.134ms
MNN benchmark
Forward type: **Vulkan**
Warming up...
--------> Benchmarking... loop = 10
[ - ] vgg16.mnn                 max =  783.093ms  min =  730.928ms  avg =  736.894ms
[ - ] SqueezeNetV1.0.mnn        max =   96.435ms  min =   61.809ms  avg =   65.574ms
[ - ] MobileNetV2_224.mnn       max =   71.107ms  min =   43.912ms  avg =   46.925ms
[ - ] inception-v3.mnn          max =  436.363ms  min =  386.338ms  avg =  391.818ms
[ - ] resnet-v2-50.mnn          max =  303.728ms  min =  262.706ms  avg =  267.613ms
[ - ] mobilenet-v1-1.0.mnn      max =   89.119ms  min =   56.216ms  avg =   59.725ms

开源地址:

https://github.com/alibaba/MNN

作者暂无likerid, 赞赏暂由本网站代持,当作者有likerid后会全部转账给作者(我们会尽力而为)。

Tips: Until now, everytime you want to store your article, we will help you store it in Filecoin network. In the future, you can store it in Filecoin network using your own filecoin.


Support author:
Author's Filecoin address:
Or you can use Likecoin to support author:
tags:科技

0 0

2012-2018 Anwen All of our posts are default licensed under CC BY 4.0 About Help Changelog Telegram
Today Quote: 资讯是民主社会的流通货币。 -- 杰弗逊