将客户模型部署到批处理终结点
如果要在不使用 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 创建批量部署。