新聞動態

                Dynamics

                首頁 >  新聞動態  > 詳情

                MMDeploy模型部署工具箱,打通從算法到應用 “最后一公里”

                OpenMMLab 開源以來,經常會收到社區用戶的靈魂拷問:“OpenMMLab 的算法如何部署?”

                近日,OpenMMLab 推出本年度開源計劃的壓軸項目:模型部署工具箱MMDeploy。

                如今,OpenMMLab 不僅能夠提供高質量、前沿的人工智能算法模型,也將強勢打通從算法模型到應用程序的 “最后一公里”!


                玩轉多元智能化場景

                模型部署是指把機器學習產生的訓練模型部署到各類云、邊、端設備上去,使之高效運行,從而將算法模型應用到現實中的各類任務中去,實現 “AI+” 的智能化轉型。

                OpenMMLab 最新部署工具 MMDeploy 具有以下特點:

                ?全面對接 OpenMMLab 各算法體系,提供算法快速落地的通道;

                ?建立了統一管理、高效運行、多后端支持的模型轉換框架;

                ?實現了高度可擴展的組件式 SDK 開發框架;

                ?擁有靈活、開放、多樣化的輸出,滿足不同用戶的需求。

                目前,MMDeploy 已經支持 5 個算法庫和 5 種后端推理引擎,囊括多種應用場景。


                MMDeploy 所支持算法庫:

                檢測(MMDetection)

                分割(MMSegmentation)

                分類(MMClassification)

                編輯(MMEditing)

                文字識別(MMOCR)

                MMDeploy 所支持后端推理引擎:

                ONNX Runtime

                TensorRT

                OpenPPL

                ncnn

                OpenVINO 


                后續MMDeploy將不斷迭代,支持更多算法庫和后端引擎,也歡迎用戶留言告知所需要的算法庫名稱,開發者們將快馬加鞭滿足社區需求!

                同時更歡迎各推理引擎的開發者一起合作,共同對接 OpenMMLab 的算法生態和硬件推理。


                MMDeploy 整體架構

                MMDeploy 以各算法庫的模型為輸入,把模型轉換成推理后端要求的模型格式,運行在多樣化的設備中。

                圖1.png

                從具體模塊組成看,MMDeploy 包含 2 個核心要素:模型轉換器 ( Model Converter ) 和應用開發工具包(SDK)。


                模型轉換器

                圖2.png

                模型轉換器 ( Model Converter )  負責把各算法庫的 PyTorch 模型轉換成推理后端的模型,并進一步封裝為 SDK 模型。

                模型轉換器的具體步驟為:

                ?把 PyTorch 轉換成 ONNX 模型

                ?對 ONNX 模型進行優化

                ?把 ONNX 模型轉換成后端推理引擎支持的模型格式

                ?(可選)把模型轉換中的 meta 信息和后端模型打包成 SDK 模型

                在傳統部署流水線中,兼容性是最難解決的瓶頸。針對這些問題,MMDeploy 在模型轉換器中添加了模塊重寫、模型分塊和自定義算子這三大功能。

                模塊重寫 有效代碼替換

                針對部分 Python 代碼無法直接轉換成 ONNX 的問題,MMDeploy 使用重寫機制實現了函數、模塊、符號表等三種粒度的代碼替換,有效地適配 ONNX。

                模型分塊 精準切除冗余

                針對部分模型的邏輯過于復雜,在后端里無法支持的問題,MMDeploy 使用了模型分塊機制,能像手術刀一樣精準切除掉模型中難以轉換的部分,把原模型分成多個子模型,分別轉換。這些被去掉的邏輯會在 SDK 中實現。

                自定義算子 擴展引擎能力

                OpenMMLab 實現了一些新算子,這些算子在 ONNX 或者后端中沒有支持。針對這個問題,MMDeploy 把自定義算子在多個后端上進行了實現,擴充了推理引擎的表達能力。


                應用開發工具包 SDK

                圖3.png

                接口層

                SDK 為每種視覺任務均提供一組 C API。目前開放了分類、檢測、分割、超分、文字檢測、文字識別等幾類任務的接口。

                SDK 充分考慮了接口的易用性和友好性。每組接口均只由“創建句柄”“應用句柄”“銷毀數據”和“銷毀句柄”等函數組成。用法簡單、便于集成。

                流水線層

                SDK 把模型推理統一抽象為計算流水線,包括前處理、網絡推理和后處理。對流水線的描述在 SDK Model 的 meta 信息中。使用 Model Converter 轉換模型時,加入 --dump-info 命令即可自動生成。

                不僅是單模型,SDK 同樣可把流水線拓展到多模型推理場景,例如在檢測任務后接入識別任務。

                組件層

                組件層為流水線中的節點提供具體的功能。SDK 定義了3類組件:

                01.設備組件(Device)    對硬件設備以及 runtime 的抽象

                02.模型組件(Model)    支持 SDK Model 不同的文件格式

                03.任務組件(Task)    模型推理過程中,流水線的最小執行單元

                其中任務組件分為:

                ?預處理(preprocess):與 OpenMMLab Transform 算子對齊,比如 Resize、Crop、Pad、Normalize等等。每種算子均提供了 cpu、cuda 兩種實現方式。

                ?網絡推理引擎(net):對推理引擎的封裝。目前,SDK 可以接入5種推理引擎:PPL.NN、TensorRT、ONNX Runtime、ncnn 和 OpenVINO。

                ?后處理(postprocess):對應與 OpenMMLab 各算法庫的后處理功能。

                核心層

                核心層是 SDK 的基石,定義了 SDK 最基礎、最核心的數據結構。

                作為 OpenMMLab 大家庭的部署側全能工具包,MMDeploy 協助開發者們將優質的模型部署到設備上高效運行,架起了模型從研發到落地的橋梁,讓算法在實際生產中發揮出更大價值。

                圖4.png

                項目地址:https://github.com/open-mmlab/mmdeploy 

                Github:https://github.com/open-mmlab/mmdeploy


                comm@pjlab.org.cn

                上海市徐匯區云錦路701號西岸國際人工智能中心37-38層

                滬ICP備2021009351號-1

                        
                        

                              拔萝卜又叫又疼原声视频