目前社區已經有多個移動端深度學習推理框架,如:NCNN、MNN... 這些推理引擎都給社區的用戶帶來了在移動端上部署深度學習非常多的便利,但是他們也都有一個共性問題:隨著不斷地迭代以及性能優化,運行時庫會逐漸的增大,特別是在不同算子 fuse 的時候,會導致非常多的長尾算子,這就會增大我們 App 或者 SDK 的體積,
為了解決這個問題,由 MegEngine 團隊開源的 MegCC 創新使用模型預編譯的方案,生成模型推理必要的代碼,去除掉了和模型推理無關的代碼,因此極大程度上減少了推理引擎的體積,主要方法是:
將傳統框架運行時的必要步驟:計算圖優化、Kernel 選擇、記憶體分配都移到編譯時,從而最大程度上減少了 Runtime 時的二進制體積大小,并根據模型資訊做進一步的性能優化,
該方案有以下優點:
- 隨著框架的迭代將不會使得推理引擎的體積增大
- 很多的算子融合可以在編譯時根據模型資訊生成對應的 code
- 模型編譯時可以獲得整個計算圖的資訊,這樣可以進一步進行極致的性能優化
- 可以吸收社區在代碼生成方面的經驗用于為 MegCC 生成 code
不同于傳統推理框架,MegCC 是一個真真實實的深度學習模型編譯器,具備極其輕量的 Runtime 二進制體積,高性能,方便移植,極低記憶體使用以及快啟動等核心特點,用戶可在 MLIR 上進行計算圖優化,記憶體規劃,最后通過預先寫好的 code 模版進行代碼生成,目前,MegCC 已支持 Arm64,Armv7,x86,risc-v 以及單片機平臺,
GitHub 開源地址:https://github.com/MegEngine/MegCCgithub.com/MegEngine/MegCC
使用方法及效果
使用 MegCC 完成模型部署只需要完成以下 3 步:
- 模型編譯:編譯 MegEngine 模型,生成運行這個模型對應的 Kernel 以及優化之后的模型,
- Runtime編譯:這個階段會將 Runtime 和上一步中生成的 Kernel 一起編譯成一個靜態庫,
- 集成到應用中:呼叫上一步編譯的靜態庫的介面進行推理,
以 YOLOX 模型為例,運行效果如下圖:

從圖中可見,MegCC 生成的推理程式在保證推理性能良好(模型測速結果為 670ms)的情況下,其大小可以達到** 95KB**,
詳細操作檔案:MegCC/how-to-use-chinese.md at main · MegEngine/MegCC
手把手操作教程:挑戰 100KB 可執行程式高性能推理 YOLOX 模型
未來計劃
目前 MegCC 僅支持 MegEngine 模型作為輸入,其他模型格式可以考慮轉換到 ONNX,然后通過 mgeconvert 進行模型格式轉換,
預計在未來 2 個月內,MegCC 將支持更多的模型格式編譯,同時實作以下進階功能:
- 支持ONNX模型作為輸入
- 做更多的Kernel fusion
- 支持更多的后端設備
大家在使用 MegCC 程序中有任何問題,歡迎隨時提 issue 告訴我們,也歡迎提 PR 幫助 MegCC 變得更好,
精彩預告
在 2022 年 11 月 19 日,DataFunSummit2022:AI 基礎軟體架構峰會“深度學習框架論壇”,曠視科技 MegEngine 端側推理負責人陳其友將帶來《MegCC 用模型編譯的方式實作超輕量端上高性能推理》主題演講,從目前端上推理的現狀分析,到創新使用模型預編譯方案的 MegCC 詳解,帶你領略新一代 AI 模型編譯器 MegCC 的魅力,
演講提綱:
- 概述目前端上推理的現狀,主要是推理引擎體積方面的情況
- 介紹 MegCC 的編譯器方案
- 分享「超輕量、高性能、擴展性強」等特性的實作思路
- 總結 MegCC 的現狀、優勢以及未來的計劃
了解更多活動詳情及報名方式,請移步:
重磅!AI基礎軟體架構峰會來襲,演算法能力的新躍遷!
精彩不容錯過,與您相約線上直播~
附
GitHub:MegEngine 曠視天元 (歡迎 star~
Gitee:MegEngine/MegEngine
MegEngine 官網:MegEngine-深度學習,簡單開發
歡迎加入 MegEngine 技術交流 QQ 群:1029741705
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/534142.html
標籤:其他
上一篇:Open Cascade 中的 AIS_InteractiveContext、V3d_Viewer 與 V3d_View 之間的關系
下一篇:get、post、狀態碼型別
