千行百業(yè)智能化落地,MMDeploy 助你一“部”到位

OpenMMLab 開源以來,每天都會收到社區(qū)用戶的靈魂拷問:
”O(jiān)penMMLab 的算法如何部署?“
今天,OpenMMLab 本年度開源計劃的壓軸項目——
模型部署工具箱 MMDeploy?
IS ALL YOU NEED!
(點擊觀看? 一分鐘讀懂 MMDeploy )
從今天起,OpenMMLab 不僅能夠提供高質(zhì)量、前沿的人工智能模型,也將強勢打通從算法模型到應(yīng)用程序這 "最后一公里"!
項目鏈接
https://github.com/open-mmlab/mmdeploy
(趕緊使用起來吧!別忘了點小星星?哦!)

玩轉(zhuǎn)多元智能化場景
模型部署是指把機器學(xué)習(xí)產(chǎn)生的訓(xùn)練模型部署到各類云、邊、端設(shè)備上去,使之高效運行,從而將算法模型實際地應(yīng)用到現(xiàn)實生活中的各類任務(wù)中去,實現(xiàn) AI+ 的智能化轉(zhuǎn)型。
OpenMMLab 最新部署工具 MMDeploy 具有以下特點——
全面對接 OpenMMLab 各算法體系,提供算法快速落地的通道;
建立了統(tǒng)一管理、高效運行、多后端支持的模型轉(zhuǎn)換框架;
實現(xiàn)了高度可擴展的組件式 SDK 開發(fā)框架;
擁有靈活、開放、多樣化的輸出,滿足不同用戶的需求。
目前,我們已經(jīng)支持 5 個算法庫和 5 種后端推理引擎,囊括多種應(yīng)用場景——
MMDeploy 所支持算法庫:
檢測(MMDetection)
分割(MMSegmentation)
分類(MMClassification)
編輯(MMEditing)
文字識別(MMOCR)
MMDeploy 所支持后端推理引擎:
ONNX Runtime
TensorRT
OpenPPL
ncnn
OpenVINO?
后續(xù)我們將不斷迭代,支持更多的算法庫和后端引擎,也歡迎大家留言告訴我們你所需要的算法庫名,開發(fā)者們一定快馬加鞭滿足社區(qū)同學(xué)需求!
同時更歡迎各推理引擎的開發(fā)者一起合作,將 OpenMMLab 繁榮的算法生態(tài)和硬件推理對接起來~
MMDeploy 整體架構(gòu)
MMDeploy 以各算法庫的模型為輸入,把模型轉(zhuǎn)換成推理后端要求的模型格式,運行在多樣的設(shè)備中。

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

模型轉(zhuǎn)換器 ( Model Converter ) ?負責(zé)把各算法庫的 PyTorch 模型轉(zhuǎn)換成推理后端的模型,并進一步封裝為 SDK 模型。
模型轉(zhuǎn)換器的具體步驟為:
把 PyTorch 轉(zhuǎn)換成 ONNX 模型
對 ONNX 模型進行優(yōu)化
把 ONNX 模型轉(zhuǎn)換成后端推理引擎支持的模型格式
(可選)把模型轉(zhuǎn)換中的 meta 信息和后端模型打包成 SDK 模型
在傳統(tǒng)部署流水線中,兼容性是最難以解決的瓶頸。針對這些問題,MMDeploy 在模型轉(zhuǎn)換器中添加了模塊重寫、模型分塊和自定義算子這三大功能。
模塊重寫
有效代碼替換
針對部分 Python 代碼無法直接轉(zhuǎn)換成 ONNX 的問題,MMDeploy 使用重寫機制實現(xiàn)了函數(shù)、模塊、符號表等三種粒度的代碼替換,有效地適配 ONNX。
模型分塊
精準(zhǔn)切除冗余
針對部分模型的邏輯過于復(fù)雜,在后端里無法支持的問題,MMDeploy 使用了模型分塊機制,能像手術(shù)刀一樣精準(zhǔn)切除掉模型中難以轉(zhuǎn)換的部分,把原模型分成多個子模型,分別轉(zhuǎn)換。這些被去掉的邏輯會在 SDK 中實現(xiàn)。
自定義算子
擴展引擎能力
OpenMMLab 實現(xiàn)了一些新算子,這些算子在 ONNX 或者后端中沒有支持。針對這個問題,MMDeploy 把自定義算子在多個后端上進行了實現(xiàn),擴充了推理引擎的表達能力。
應(yīng)用開發(fā)工具包 SDK

接口層
SDK 為每種視覺任務(wù)均提供一組 C API。目前開放了分類、檢測、分割、超分、文字檢測、文字識別等幾類任務(wù)的接口。
SDK 充分考慮了接口的易用性和友好性。每組接口均只由 ‘創(chuàng)建句柄’、‘應(yīng)用句柄’、‘銷毀數(shù)據(jù)’ 和 ‘銷毀句柄’ 等函數(shù)組成。用法簡單、便于集成。
流水線層
SDK 把模型推理統(tǒng)一抽象為計算流水線,包括前處理、網(wǎng)絡(luò)推理和后處理。對流水線的描述在 SDK Model 的 meta 信息中。使用 Model Converter 轉(zhuǎn)換模型時,加入 --dump-info 命令,即可自動生成。
不僅是單模型,SDK 同樣可把流水線拓展到多模型推理場景。比如在檢測任務(wù)后,接入識別任務(wù)。
組件層
組件層為流水線中的節(jié)點提供具體的功能。SDK 定義了3類組件:
設(shè)備組件(Device)
對硬件設(shè)備以及 runtime 的抽象
模型組件(Model)
支持 SDK Model 不同的文件格式
任務(wù)組件(Task)
模型推理過程中,流水線的最小執(zhí)行單元。
其中任務(wù)組件分為:
- 預(yù)處理(preprocess):與 OpenMMLab Transform 算子對齊,比如 Resize、Crop、Pad、Normalize等等。每種算子均提供了 cpu、cuda 兩種實現(xiàn)方式。
- 網(wǎng)絡(luò)推理引擎(net):對推理引擎的封裝。目前,SDK 可以接入5種推理引擎:PPL.NN, TensorRT, ONNX Runtime, NCNN 和 OpenVINO。
- 后處理(postprocess):對應(yīng)與 OpenMMLab 各算法庫的后處理功能。
核心層
核心層是 SDK 的基石,定義了 SDK 最基礎(chǔ)、最核心的數(shù)據(jù)結(jié)構(gòu)。
作為 OpenMMLab 大家庭的部署側(cè)全能工具包,MMDeploy 協(xié)助開發(fā)者們將優(yōu)質(zhì)的模型部署到設(shè)備上高效運行,架起了模型從研發(fā)到落地的橋梁,讓算法在實際生產(chǎn)中發(fā)揮出更大價值。
還等什么?!
千行百業(yè)智能化落地
MMDeploy 助你一“部”到位!
歡迎社區(qū)小伙伴使用,期待?Star、Issue、PR!
歡迎使用
項目地址
https://github.com/open-mmlab/mmdeploy?
快速入門文檔鏈接
英文:
https://github.com/open-mmlab/mmdeploy/blob/master/docs/en/get_started.md
中文:
https://github.com/open-mmlab/mmdeploy/blob/master/docs/zh_cn/get_started.md
