将客户模型部署到批处理终结点

已完成

如果要在不使用 MLflow 模型格式的情况下将模型部署到批处理终结点,则需要创建评分脚本和环境。

若要部署模型,必须已创建终结点。 然后可以将模型部署到终结点。

创建评分脚本

评分脚本是一个文件,用于读取新数据、加载模型和执行评分。

评分脚本必须包含两个函数:

  • init():在进程开始时调用一次,因此用于任何成本高昂或常见的准备工作,例如加载模型。
  • run():为每个微型批处理调用此函数,以执行评分。

run() 方法应返回 pandas 数据帧或数组/列表。

评分脚本可能如下所示:

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 创建批量部署