忘記密碼
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 以各算法庫的模型為輸入,把模型轉換成推理后端要求的模型格式,運行在多樣化的設備中。
從具體模塊組成看,MMDeploy 包含 2 個核心要素:模型轉換器 ( Model Converter ) 和應用開發工具包(SDK)。
模型轉換器
模型轉換器 ( Model Converter ) 負責把各算法庫的 PyTorch 模型轉換成推理后端的模型,并進一步封裝為 SDK 模型。
模型轉換器的具體步驟為:
?把 PyTorch 轉換成 ONNX 模型
?對 ONNX 模型進行優化
?把 ONNX 模型轉換成后端推理引擎支持的模型格式
?(可選)把模型轉換中的 meta 信息和后端模型打包成 SDK 模型
在傳統部署流水線中,兼容性是最難解決的瓶頸。針對這些問題,MMDeploy 在模型轉換器中添加了模塊重寫、模型分塊和自定義算子這三大功能。
模塊重寫 有效代碼替換
針對部分 Python 代碼無法直接轉換成 ONNX 的問題,MMDeploy 使用重寫機制實現了函數、模塊、符號表等三種粒度的代碼替換,有效地適配 ONNX。
模型分塊 精準切除冗余
針對部分模型的邏輯過于復雜,在后端里無法支持的問題,MMDeploy 使用了模型分塊機制,能像手術刀一樣精準切除掉模型中難以轉換的部分,把原模型分成多個子模型,分別轉換。這些被去掉的邏輯會在 SDK 中實現。
自定義算子 擴展引擎能力
OpenMMLab 實現了一些新算子,這些算子在 ONNX 或者后端中沒有支持。針對這個問題,MMDeploy 把自定義算子在多個后端上進行了實現,擴充了推理引擎的表達能力。
應用開發工具包 SDK
接口層
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 協助開發者們將優質的模型部署到設備上高效運行,架起了模型從研發到落地的橋梁,讓算法在實際生產中發揮出更大價值。