MNN是一個(gè)輕量級(jí)的深度神經(jīng)網(wǎng)絡(luò)推理引擎,在端側(cè)加載深度神經(jīng)網(wǎng)絡(luò)模型進(jìn)行推理預(yù)測(cè)。
作者:開心的派大星
首發(fā):微信公眾號(hào):NeuroMem
轉(zhuǎn)自:https://github.com/alibaba/MNN/edit/master/README_CN.md
簡(jiǎn)介
MNN是一個(gè)輕量級(jí)的深度神經(jīng)網(wǎng)絡(luò)推理引擎,在端側(cè)加載深度神經(jīng)網(wǎng)絡(luò)模型進(jìn)行推理預(yù)測(cè)。目前,MNN已經(jīng)在阿里巴巴的手機(jī)淘寶、手機(jī)天貓、優(yōu)酷等20多個(gè)App中使用,覆蓋直播、短視頻、搜索推薦、商品圖像搜索、互動(dòng)營(yíng)銷、權(quán)益發(fā)放、安全風(fēng)控等場(chǎng)景。此外,IoT等場(chǎng)景下也有若干應(yīng)用。
整體特點(diǎn)
輕量性
- 針對(duì)端側(cè)設(shè)備特點(diǎn)深度定制和裁剪,無任何依賴,可以方便地部署到移動(dòng)設(shè)備和各種嵌入式設(shè)備中。
- iOS平臺(tái):armv7+arm64靜態(tài)庫(kù)大小5MB左右,鏈接生成可執(zhí)行文件增加大小620KB左右,metallib文件600KB左右。
- Android平臺(tái):so大小400KB左右,OpenCL庫(kù)400KB左右,Vulkan庫(kù)400KB左右。
通用性
-
支持
Tensorflow、Caffe、ONNX等主流模型文件格式,支持CNN、RNN、GAN等常用網(wǎng)絡(luò)。 -
支持86個(gè)
TensorflowOp、34個(gè)CaffeOp;各計(jì)算設(shè)備支持的MNN Op數(shù):CPU 71個(gè),Metal 55個(gè),OpenCL 29個(gè),Vulkan 31個(gè)。 - 支持iOS 8.0+、Android 4.3+和具有POSIX接口的嵌入式設(shè)備。
- 支持異構(gòu)設(shè)備混合計(jì)算,目前支持CPU和GPU,可以動(dòng)態(tài)導(dǎo)入GPU Op插件,替代CPU Op的實(shí)現(xiàn)。
高性能
- 不依賴任何第三方計(jì)算庫(kù),依靠大量手寫匯編實(shí)現(xiàn)核心運(yùn)算,充分發(fā)揮ARM CPU的算力。
- iOS設(shè)備上可以開啟GPU加速(Metal),常用模型上快于蘋果原生的CoreML。
-
Android上提供了
OpenCL、Vulkan、OpenGL三套方案,盡可能多地滿足設(shè)備需求,針對(duì)主流GPU(Adreno和Mali)做了深度調(diào)優(yōu)。 - 卷積、轉(zhuǎn)置卷積算法高效穩(wěn)定,對(duì)于任意形狀的卷積均能高效運(yùn)行,廣泛運(yùn)用了 Winograd 卷積算法,對(duì)3x3 -> 7x7之類的對(duì)稱卷積有高效的實(shí)現(xiàn)。
- 針對(duì)ARM v8.2的新架構(gòu)額外作了優(yōu)化,新設(shè)備可利用半精度計(jì)算的特性進(jìn)一步提速。
易用性
- 有高效的圖像處理模塊,覆蓋常見的形變、轉(zhuǎn)換等需求,一般情況下,無需額外引入libyuv或opencv庫(kù)處理圖像。
- 支持回調(diào)機(jī)制,可以在網(wǎng)絡(luò)運(yùn)行中插入回調(diào),提取數(shù)據(jù)或者控制運(yùn)行走向。
- 支持只運(yùn)行網(wǎng)絡(luò)中的一部分,或者指定CPU和GPU間并行運(yùn)行。
架構(gòu)設(shè)計(jì)
MNN可以分為Converter和Interpreter兩部分。
Converter由Frontends和Graph Optimize構(gòu)成。前者負(fù)責(zé)支持不同的訓(xùn)練框架,MNN當(dāng)前支持Tensorflow(Lite)、Caffe和ONNX(PyTorch/MXNet的模型可先轉(zhuǎn)為ONNX模型再轉(zhuǎn)到MNN);后者通過算子融合、算子替代、布局調(diào)整等方式優(yōu)化圖。
Interpreter由Engine和Backends構(gòu)成。前者負(fù)責(zé)模型的加載、計(jì)算圖的調(diào)度;后者包含各計(jì)算設(shè)備下的內(nèi)存分配、Op實(shí)現(xiàn)。在Engine和Backends中,MNN應(yīng)用了多種優(yōu)化方案,包括在卷積和反卷積中應(yīng)用Winograd算法、在矩陣乘法中應(yīng)用Strassen算法、低精度計(jì)算、Neon優(yōu)化、手寫匯編、多線程優(yōu)化、內(nèi)存復(fù)用、異構(gòu)計(jì)算等。
開始使用
工具
如何修改
如何使用Python
交流與反饋
License
Apache 2.0
致謝
MNN參與人員:淘寶技術(shù)部、搜索工程團(tuán)隊(duì)、達(dá)摩院團(tuán)隊(duì)、優(yōu)酷等集團(tuán)員工。
MNN參考、借鑒了下列項(xiàng)目:
- Caffe
- flatbuffer
- gemmlowp
- Google Vulkan demo
- Halide
- Mace
- ONNX
- protobuffer
- skia
- Tensorflow
- ncnn
- paddle-mobile
- stb
- rapidjson
推薦閱讀
歡迎關(guān)注公眾號(hào),關(guān)注模型壓縮、低比特量化、移動(dòng)端推理加速優(yōu)化、部署。
審核編輯:符乾江
-
神經(jīng)網(wǎng)絡(luò)
+關(guān)注
關(guān)注
42文章
4838瀏覽量
107758 -
人工智能
+關(guān)注
關(guān)注
1817文章
50098瀏覽量
265328
發(fā)布評(píng)論請(qǐng)先 登錄
面向嵌入式部署的神經(jīng)網(wǎng)絡(luò)優(yōu)化:模型壓縮深度解析
神經(jīng)網(wǎng)絡(luò)的初步認(rèn)識(shí)
NMSIS神經(jīng)網(wǎng)絡(luò)庫(kù)使用介紹
構(gòu)建CNN網(wǎng)絡(luò)模型并優(yōu)化的一般化建議
在Ubuntu20.04系統(tǒng)中訓(xùn)練神經(jīng)網(wǎng)絡(luò)模型的一些經(jīng)驗(yàn)
液態(tài)神經(jīng)網(wǎng)絡(luò)(LNN):時(shí)間連續(xù)性與動(dòng)態(tài)適應(yīng)性的神經(jīng)網(wǎng)絡(luò)
神經(jīng)網(wǎng)絡(luò)的并行計(jì)算與加速技術(shù)
如何在機(jī)器視覺中部署深度學(xué)習(xí)神經(jīng)網(wǎng)絡(luò)
基于米爾瑞芯微RK3576開發(fā)板部署運(yùn)行TinyMaix:超輕量級(jí)推理框架
如何在RK3576開發(fā)板上運(yùn)行TinyMaix :超輕量級(jí)推理框架--基于米爾MYD-LR3576開發(fā)板
淺談阿里輕量級(jí)的深度神經(jīng)網(wǎng)絡(luò)推理引擎MNN
評(píng)論