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

MNN 是一个轻量级深度神经网络推理引擎。

仓库地址:https://github.com/alibaba/MNN

截止目前20190506 发布了测试版beta0.1.1

 


介绍

MNN是轻量级深度神经网络推理引擎。可在设备上加载模型并做推理。目前,MNN已经应用在超过20个阿里的app中,比如淘宝、天猫、优酷等等,覆盖直播,短视频,搜索推荐,通过图片搜索产品,互动市场,股权配置,安全管控以及其他场景。此外,MNN也用于嵌入式设备,如IOT物联网设备。


特性

轻量级

  • 针对设备进行了优化,没有依赖,容易部署到移动设备和各种嵌入式设备;
  • iOS平台:armv7+arm64平台的静态库大小约为5MB, 链接可执行程序后大小增加约620KB,metalib文件大约600KB;
  • Android 平台:core so(核心库文件)大小约400KB, OpenCL so(OpenCL库文件)大约400KB, Vulkan so(Vulkan库文件)文件约400KB;

多功能

  • 支持Tensorflow,Caffe,ONNX框架,支持常规神经网络,如CNN,RNN,GAN;
  • 支持 86种Tensorflow ops,34种Caffe ops; MNN ops中71个用于CPU,55个用于Metal,29个用于OpenCL, 31个用于Vulkan;
  • 支持iOS 8.0+,Android 4.3+和 具有POSIX接口的嵌入式设备;
  • 支持多设备上的混合计算。当前支持CPU和GPU。GPU op插件可被动态加载,用来取代默认(CPU)op 实现;

 

:Metal 是一种低层次的渲染应用程序编程接口,提供了软件所需的最低层,保证软件可以运行在不同的图形芯片上。Metal 提升了 A7 与 A8 处理器效能,让其性能完全发挥。

高性能

  • 其中的核心计算使用了大量优化的汇编代码实现,充分利用了ARM CPU;
  • 对于iOS, 可以打开GPU加速(Metal),这比苹果原生CoreML要快;
  • 对于Android, 可用OpenCL、Vulkan和OpenGL,并且针对主流GPUs(Adreno和Mali)进行了深度调优;
  • 卷积和转置卷积( transposition convolution)算法高效且稳定。Winograd卷积算法被广泛用于更好的对称卷积,如3x3 ->7x7;
  • 为新架构ARM v8.2做了额外优化,支持半精度计算;

使用方便

  • 高效的图像处理模块,无需libyuv和opencv即可加速彷射变换和颜色空间变化;
  • 在整个工作流中提供回调,以提取数据或精确控制执行;
  • 提供选项在CPU和GPU上选择推理分支和并行分支;

架构

 MNN可分成两部分:Converter和Interpreter. (即转换部分和解析部分)

Converter前端图优化构成。

前端负责支持不同的训练框架(如Tensorflow,Caffe,ONNX);MNN当前支持Tensorflow, Tensorflow Lite, Caffe和 ONNX(PyTorch/MXNet) ;

图优化 通过操作算子融合,操作算子替换,布局调整来优化网络图结构;

Interpreter引擎 后端构成。

引擎负责加载模型和有序导入计算图;

后端包括内存分配和Op在各个计算单元上的实现;

在引擎和后端上,MNN应用了许多优化方案,包括在卷积和反卷积上用Winograd算法,使用Strassen算法应用与矩阵乘法,低精度计算,Neon指令集优化,手写汇编,多线程优化,内存重复使用,异构计算等



快速开始


对比


如何自定义

 

 

本文就写到这,后续使用中会做详细文章介绍~感谢开源精神!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章