將自訂模型部署至批次端點

已完成

如果您想要在不使用 MLflow 模型格式的情況下將模型部署到批次端點,您需要建立評分腳本和環境。

若要部署模型,您必須已經建立端點。 然後,您可以將模型部署至端點。

建立評分指令碼

評分腳本是一個檔案,可讀取新數據、載入模型,以及執行評分。

評分程式必須包含兩個函式:

  • init():在程序開始時呼叫一次,因此用於任何昂貴或常見的準備,例如載入模型。
  • run():對每個小批次進行呼叫以執行評分。

方法 run() 應該會傳回 pandas DataFrame 或陣列/清單。

評分腳本可能如下所示:

import os
import mlflow
import pandas as pd


def init():
    global model

    # get the path to the registered model file and load it
    model_path = os.path.join(os.environ["AZUREML_MODEL_DIR"], "model")
    model = mlflow.pyfunc.load(model_path)


def run(mini_batch):
    print(f"run method start: {__file__}, run({len(mini_batch)} files)")
    resultList = []

    for file_path in mini_batch:
        data = pd.read_csv(file_path)
        pred = model.predict(data)

        df = pd.DataFrame(pred, columns=["predictions"])
        df["file"] = os.path.basename(file_path)
        resultList.extend(df.values)

    return resultList

範例腳本中有一些注意事項:

  • AZUREML_MODEL_DIR 是一個環境變數,可用來尋找與模型相關聯的檔案。
  • 使用 global 變數讓新資料評分所需的任何資產可供使用,例如載入的模型。
  • mini_batch 的大小定義於部署設定中。 如果迷你批次中的檔案太大而無法處理,您必須將檔案分割成較小的檔案。
  • 根據預設,預測會寫入一個單一檔案。

小提示

深入瞭解如何 撰寫批次部署的評分腳本

建立環境

部署需要執行評分腳本的執行環境。 您的程式代碼所需的任何相依性都應該包含在環境中。

您可以建立具有 Conda 相依性的 Docker 映像環境,或是使用 Dockerfile 來建立環境。

您還需要新增程式庫 azureml-core,因為這是批次部署運作所必需的。

若要使用基底 Docker 映射建立環境,您可以在檔案中 conda.yaml 定義 Conda 相依性:

name: basic-env-cpu
channels:
  - conda-forge
dependencies:
  - python=3.8
  - pandas
  - pip
  - pip:
      - azureml-core
      - mlflow

然後,若要建立環境,請執行下列程序代碼:

from azure.ai.ml.entities import Environment

env = Environment(
    image="mcr.microsoft.com/azureml/openmpi3.1.2-ubuntu18.04",
    conda_file="./src/conda-env.yml",
    name="deployment-environment",
    description="Environment created from a Docker image plus Conda environment.",
)
ml_client.environments.create_or_update(env)

設定及建立部署

最後,您可以使用BatchDeployment類別來設定和建立部署。

from azure.ai.ml.entities import BatchDeployment, BatchRetrySettings
from azure.ai.ml.constants import BatchDeploymentOutputAction

deployment = BatchDeployment(
    name="forecast-mlflow",
    description="A sales forecaster",
    endpoint_name=endpoint.name,
    model=model,
    compute="aml-cluster",
    code_path="./code",
    scoring_script="score.py",
    environment=env,
    instance_count=2,
    max_concurrency_per_instance=2,
    mini_batch_size=2,
    output_action=BatchDeploymentOutputAction.APPEND_ROW,
    output_file_name="predictions.csv",
    retry_settings=BatchRetrySettings(max_retries=3, timeout=300),
    logging_level="info",
)
ml_client.batch_deployments.begin_create_or_update(deployment)

小提示

探索參考文件,使用 Python SDK v2 建立批次部署