將自訂模型部署至批次端點
如果您想要在不使用 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 建立批次部署。