使用模型服務部署 Python 程式代碼
本文說明如何使用模型服務來部署 Python 程式代碼。
MLflow 的 Python 函 pyfunc
式提供彈性來部署任何 Python 程式代碼或任何 Python 模型。 以下是您可能想要使用指南的範例案例。
- 您的模型需要前置處理,才能將輸入傳遞至模型的預測函式。
- MLflow 不支援您的模型架構。
- 您的應用程式需要模型的原始輸出進行後續處理,才能取用。
- 模型本身具有個別要求分支邏輯。
- 您想要將完全自定義程式碼部署為模型。
建構自定義 MLflow Python 函式模型
MLflow 可讓您使用 自定義 Python 模型格式來記錄 Python 程式代碼。
使用 MLflow 封裝任意 Python 程式代碼時,有兩個必要的函式:
load_context
- 只需要載入一次模型才能運作的任何專案,都應該在此函式中定義。 這十分重要,因此系統會將函式期間predict
載入的成品數目降到最低,進而加速推斷。predict
- 此函式會容納每次發出輸入要求時執行的所有邏輯。
記錄 Python 函式模型
即使您使用自定義程式代碼撰寫模型,還是可以使用您組織的共用程式碼模組。 code_path
使用 參數時,模型的作者可以記錄載入路徑的完整程式代碼參考,並且可從其他自定義pyfunc
模型使用。
例如,如果模型是以下列項目記錄:
mlflow.pyfunc.log_model(CustomModel(), "model", code_path = ["preprocessing_utils/"])
從 preprocessing_utils
的程式代碼可在模型的載入內容中使用。 以下是使用此程式代碼的範例模型。
class CustomModel(mlflow.pyfunc.PythonModel):
def load_context(self, context):
self.model = torch.load(context.artifacts["model-weights"])
from preprocessing_utils.my_custom_tokenizer import CustomTokenizer
self.tokenizer = CustomTokenizer(context.artifacts["tokenizer_cache"])
def format_inputs(self, model_input):
# insert some code that formats your inputs
pass
def format_outputs(self, outputs):
predictions = (torch.sigmoid(outputs)).data.numpy()
return predictions
def predict(self, context, model_input):
model_input = self.format_inputs(model_input)
outputs = self.model.predict(model_input)
return self.format_outputs(outputs)
為您的模型提供服務
記錄自定義 pyfunc
模型之後,您可以將它註冊到 Unity 目錄或工作區登錄,並將模型服務至 模型服務端點。
筆記本範例
下列筆記本範例示範如何在查詢模型的原始輸出需要後續處理以供取用時,自定義模型輸出。