當您遇到多模型部署時存在差異化運行時環境需求,或者需要最佳化模型推理效率、控制資源分派的問題時,可以使用模型服務網格自訂模型運行時,通過精細配置運行環境,確保每個模型都能在最適宜的條件下執行,提升服務品質、降低成本,並簡化複雜模型的營運管理工作。本文介紹如何使用ModelMesh Serving自訂模型運行時。
前提條件
已添加叢集到ASM執行個體,且ASM執行個體版本為1.18.0.134及以上。
功能介紹
ModelMesh預設整合了以下模型伺服器運行環境。
模型伺服器 | 開發公司/社區 | 適用架構 | 功能特點 |
Triton Inference Server | NVIDIA | TensorFlow、PyTorch、TensorRT、ONNX等 | 高效能、可擴充、低延遲推理服務,提供管理和監控工具。 |
MLServer | Seldon | SKLearn、XGBoost、LightGBM等 | 統一介面和架構,支援多種架構和進階功能。 |
OpenVINO Model Server | Intel | OpenVINO、ONNX等 | 利用英特爾硬體加速技術,支援多種架構。 |
TorchServe | PyTorch社區 | PyTorch(包含eager模式) | 輕量級、可擴充的PyTorch模型伺服器。 |
如果以上模型伺服器無法滿足您的特定要求,例如需要處理推理的自訂邏輯,或者您的模型所需的架構不在上述支援列表中,可以自訂服務運行時來進行擴充支撐。
步驟一:自訂服務運行時
命名空間範圍的ServingRuntime和叢集範圍的ClusterServingRuntime定義為一個或多個特定模型格式提供服務的Pod模板。它們包括了運行時的容器鏡像、支援的模型格式列表等關鍵資訊。運行時的其他配置可以通過Spec中的環境變數傳遞。
ServingRuntime CRD具有較好的靈活性和可擴充性。您可以自訂可重用的運行時,而無需修改ModelMesh控制器代碼或控制器命名空間中的其他資源。您可以輕鬆構建一個自訂運行時,以支援您所需的架構。
要建立自訂的Serving Runtime,您可以構建一個支援所需架構的新容器鏡像,然後建立一個使用該鏡像的ServingRuntime資源。如果所需運行時的架構使用Python綁定,則特別容易實現。您可以使用MLServer的擴充點來添加額外的架構。MLServer提供了一種服務介面,ModelMesh Serving則作為將其整合為ServingRuntime的橋樑。
構建基於Python的自訂Serving Runtime的步驟如下。
實現一個繼承自MLServer的MLModel類。
MLServer可以通過添加MLModel類的實現進行擴充,主要包括
load()
和predict()
兩個函數。您可以根據具體需求,在load()
函數中載入您的模型,並在predict()
函數中執行預測操作。您也可以通過MLServer文檔查看MLModel類的實現樣本。將模型類和依賴項打包到一個容器鏡像中。
實現模型類之後,您需要將其依賴項(包括MLServer)打包到一個支援ServingRuntime資源的鏡像中。MLServer提供了一個有用的輔助程式,可以使用
mlserver build
命令來構建鏡像。具體操作,請參見Building a custom image。使用該鏡像建立新的ServingRuntime資源。
使用以下內容,建立一個新的ServingRuntime資源,並將其指向您剛建立的鏡像。
欄位
說明
{{CUSTOM-RUNTIME-NAME}}
運行時的名稱,例如my-model-server-0.x。
{{MODEL-FORMAT-NAMES}}
該運行時將支援的模型格式列表,例如支援模型自訂格式my-model。在部署該格式的模型時,ModelMesh會尋找這些格式並找到合適的運行時環境。
{{CUSTOM-IMAGE-NAME}}
步驟2建立的鏡像。
執行以下命令,建立ServingRuntime資源。
kubectl apply -f ${實際YAML名稱}.yaml
建立完成後,您可以在ModelMesh部署中看到新的自訂運行時。
步驟二:部署模型
為了使用新建立的運行時部署模型,您需要建立一個InferenceService資源來提供模型服務。該資源是 KServe和ModelMesh用於管理模型的主要介面,代表了模型在推理中的邏輯端點。
使用以下內容,建立一個InferenceService資源來提供模型服務。
在YAML中,InferenceService命名為
my-model-sample
,並聲明其模型格式為my-model
,與之前建立的樣本自訂運行時使用相同的格式。同時,還傳遞了一個可選欄位runtime
,明確告訴ModelMesh使用my-model-server-0.x運行時來部署此模型。最後,storage
欄位指向模型所在的位置,本樣本使用ModelMesh Serving的快速入門手冊部署的localMinIO執行個體。執行以下命令,部署InferenceService資源。
kubectl apply -f ${實際YAML名稱}.yaml