MNN通用端侧深度学习预测框架介绍
最近端側的AI模型應用越來越廣泛,在端側的模型應用會面對很多的問題,比如模型適配性和機型適配性,還有計算性能方面的問題。是否有某種框架可以解決這些端側AI模型遇到的問題,Google、蘋果等公司都有相關的工作。今天介紹下MNN框架,由阿里巴巴開源的一款專注于端側深度學習模型預測框架。
項目開源地址:https://github.com/alibaba/MNN
MNN核心解決的問題
首先看下MNN的核心功能架構圖:
?
MNN主要解決了三方面的問題:
Model compatibility:模型多樣性的兼容問題,比如來自TensorFlow、PyTorch、Caffe的模型全部兼容,甚至ONNX格式的模型也兼容
Resource limitation:在端側為了更好地解決性能問題,MNN做了很多框架層面的優化問題
Device diversity:手機端不同品牌的手機系統兼容性一直是嵌入式開發的痛點,作者當年創業做手機應用的時候就被這個問題折磨很久。MNN框架不光適配了Android、IOS等系統,更對不同硬件環境的手機進行了適配,比如對手機側的CPU、GPU分別作了一定適配。
MNN技術架構
接下來看下MNN技術架構圖:
MNN的整體技術架構分為兩個大模塊:
-
Offline conversion:離線的模型轉換模塊,在這個模塊需要把不同格式的模型進行格式轉換,生成MNN可以接受的格式。另外還需要做計算圖優化和模型壓縮,是得模型的體檢減小
-
On-device Inference:在線模型預測模塊,在在線預測模塊提供3個優化策略,分別是pre-inference、operator-level optimization和backend abstraction
MNN在線預測模塊技術詳解
?
接下來就MNN的On-device Inference的三個技術模塊pre-inference、operator-level optimization和backend abstraction分別作介紹。
(1)pre-inference
pre-inference可以分為兩個部分,分別是computation scheme selection和preparation-execution decoupling。pre-inference本質上就是在基本可以確定要預測的數據量級的情況下做提前的準備。
computation scheme selection指的是將計算量適配到合理的計算資源以及算法層面,他舉一個例子,卷積網絡可以有兩種算法實現,針對不同場景選擇更合適的算法是一種提效手段。另外
preparation-execution decoupling指的是提前規劃好需要使用的內存資源,這樣就可以節約現申請內存帶來的時間消耗。
(2)operator-level optimization
operator-level optimization指的就是預測階段使用的神經網絡的一些op在MNN框架層面的優化,更多的是一些數學層面的推理,就不詳細介紹了。
(3)backend abstraction
backend abstraction指的是一些針對GPU、TPU、CPU硬件和OpenGL、OpenCL、Vulkan軟件層面的優化。backend abstraction的宗旨就是把最合適的計算放到最合適的硬件或者軟件環境中進行,比如卷積放到CPU上執行,然后ReLU可以放到GPU上去執行。
總結一下
?
MNN是一個很好地端側模型應用框架,基本把端側的模型應用的臟活累活都解決了,在AIEdge的時代,MNN占據了一個絕佳的流量入口,后續MNN應該有更多的應用,可能很快我們熟知的各種APP中就會陸續出現MNN的身影。
?
《新程序員》:云原生和全面數字化實踐50位技術專家共同創作,文字、視頻、音頻交互閱讀總結
以上是生活随笔為你收集整理的MNN通用端侧深度学习预测框架介绍的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 手机端部署的超分机器学习模型-MobiS
- 下一篇: 深度学习分布式策略优化、显存优化、通信优