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

栏目: 数据库 · 发布时间: 6年前

内容简介:导读:在移动端进行深度神经网络推理,可以使用腾讯开源的ncnn,或者小米开源的Mace,还有百度家的Paddle-Mobile,他们可以帮助开发者在无需过多了解移动端CPU和GPU优化的情况下,快速部署充分利用硬件加速的应用。刚刚,阿里巴巴也开源了一款工具MNN——Mobile Neural Network 轻量级的深度神经网络推理引擎,并且已经在阿里巴巴内部经过线上部署验证,值得大家参考!

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

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

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

简介

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

整体特点

轻量性

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

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

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

通用性

  • 支持 TensorflowCaffeONNX 等主流模型文件格式,支持 CNNRNNGAN 等常用网络。

  • 支持86个 Tensorflow Op、34个 Caffe Op;各计算设备支持的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上提供了 OpenCLVulkanOpenGL 三套方案,尽可能多地满足设备需求,针对主流GPU( AdrenoMali )做了深度调优。

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

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

易用性

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

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

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

架构设计

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

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


以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

Java Concurrency in Practice

Java Concurrency in Practice

Brian Goetz、Tim Peierls、Joshua Bloch、Joseph Bowbeer、David Holmes、Doug Lea / Addison-Wesley Professional / 2006-5-19 / USD 59.99

This book covers: Basic concepts of concurrency and thread safety Techniques for building and composing thread-safe classes Using the concurrency building blocks in java.util.concurrent Pe......一起来看看 《Java Concurrency in Practice》 这本书的介绍吧!

在线进制转换器
在线进制转换器

各进制数互转换器

UNIX 时间戳转换
UNIX 时间戳转换

UNIX 时间戳转换

HEX HSV 转换工具
HEX HSV 转换工具

HEX HSV 互换工具