バッチ エンドポイントにカスタム モデルをデプロイする

完了

MLflow モデル形式を使用せずにモデルをバッチ エンドポイントにデプロイする場合は、スコアリング スクリプトと環境を作成する必要があります。

モデルをデプロイするには、エンドポイントが既に作成されている必要があります。 その後、モデルをエンドポイントにデプロイできます。

スコアリング スクリプトを作成する

スコアリング スクリプトは、新しいデータを読み取り、モデルを読み込み、スコアリングを実行するファイルです。

スコアリング スクリプトには、次の 2 つの関数が含まれている必要があります。

  • init(): プロセスの開始時に 1 回呼び出されるため、モデルの読み込みなどのコストや一般的な準備に使用します。
  • 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のサイズは、デプロイ構成で定義されます。 ミニ バッチ内のファイルが大きすぎて処理できない場合は、ファイルをより小さなファイルに分割する必要があります。
  • 既定では、予測は 1 つのファイルに書き込まれます。

ヒント

バッチ デプロイのスコア付けスクリプトを作成する方法の詳細について説明します。

環境を作成する

デプロイには、スコアリング スクリプトを実行する実行環境が必要です。 コードに必要な依存関係は、環境に含める必要があります。

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 を使用してバッチデプロイ作成するためのリファレンス ドキュメントを参照してください。