共用方式為


使用模型服務部署 Python 程式代碼

本文說明如何使用 馬賽克 AI 模型服務來部署自定義的 Python 程式代碼。 本文中的範例著重於提供將前置處理和後處理邏輯新增至模型並加以部署的指引。

MLflow 的 Python 函式 pyfunc,提供彈性來部署任何 Python 程式代碼或任何 Python 模型。 以下是您可能想要使用本指南的範例案例 where。

  • 您的模型需要前置處理,才能將輸入傳遞至模型的預測函式。
  • 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 Catalog 或 Workspace Registry,並將模型服務至 模型服務端點

筆記本範例

下列筆記本範例示範如何在查詢模型的原始輸出需要後續處理以供取用時,自定義模型輸出。

使用 MLflow PyFunc 筆記本自訂模型服務輸出

Get 筆記本