MNN是一款轻量级高性能推理引擎,由阿里巴巴开源。它加载模型并在设备上进行推理。 目前,MNN已经集成到阿里巴巴旗下淘宝、天猫、优酷等20多个APP中,涵盖直播、短视频抓取、搜索推荐、图片搜索、互动营销、股权分配、 安全风控等场景。 此外,MNN 还用于嵌入式设备,例如 IoT。
介绍
特点
-
轻量
- 针对设备优化,无依赖,可轻松部署到移动设备和各种嵌入式设备。
- iOS平台:armv7+arm64平台静态库大小约5MB,链接可执行文件大小增加约620KB,metallib文件约600KB。
- Android 平台:core so 大小约为 400KB,OpenCL so 约为 400KB,Vulkan so 约为 400KB。
-
通用性
- 支持Tensorflow、Caffe、ONNX,支持CNN、RNN、GAN等常用神经网络。
- 支持 86 个 Tensorflow ops,34 个 Caffe ops; MNN ops: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 的其他优化。
架构
MNN 可以分为两部分:转换器和解释器。
Converter 由 Frontends 和 Graph Optimize 组成。 前者负责支持不同的培训框架。 MNN 目前支持 Tensorflow、Tensorflow Lite、Caffe 和 ONNX(PyTorch/MXNet); 后者通过算子融合、算子替换和布局调整来优化图形。
解释器由引擎和后端组成。 前者负责模型的加载和计算图的调度; 后者包括每个计算设备下的内存分配和Op实现。 在Engine和Backends中,MNN应用了多种优化方案,包括在卷积和反卷积中应用Winograd算法,在矩阵乘法中应用Strassen算法,低精度计算,Neon优化,手写汇编,多线程优化,内存复用, 异构计算等
网友评论