MLflow モデルをバッチ エンドポイントにデプロイする

完了

モデルをバッチ エンドポイントにデプロイする簡単な方法は、MLflow モデルを使用することです。 Azure Machine Learning によって、MLflow モデルのスコア付けスクリプトと環境が自動的に生成されます。

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

MLflow モデルを登録する

スコアリング スクリプトと環境が必要にならないようにするには、バッチ エンドポイントにデプロイする前に、MLflow モデルを Azure Machine Learning ワークスペースに登録する必要があります。

MLflow モデルを登録するには、Model クラスを使用し、MLFLOW_MODELするモデルの種類を指定します。 Python SDK にモデルを登録するには、次のコードを使用します。

from azure.ai.ml.entities import Model
from azure.ai.ml.constants import AssetTypes

model_name = 'mlflow-model'
model = ml_client.models.create_or_update(
    Model(name=model_name, path='./model', type=AssetTypes.MLFLOW_MODEL)
)

この例では、モデル ファイルをローカル パスから取得しています。 ファイルはすべて、modelと呼ばれるローカル フォルダーに格納されます。 フォルダーには、モデルを読み込んで使用する方法を説明する MLmodel ファイルが含まれている必要があります。

ヒント

MLmodel の形式の詳細を確認してください。

MLflow モデルをエンドポイントにデプロイする

MLflow モデルをバッチ エンドポイントにデプロイするには、BatchDeployment クラスを使用します。

モデルをデプロイするときは、バッチ スコアリング ジョブの動作方法を指定する必要があります。 コンピューティング クラスターを使用してスコア付けスクリプト (Azure Machine Learning によって自動的に生成される) を実行する利点は、スコアリング スクリプトを別々のインスタンスで並列に実行できることです。

モデルのデプロイを構成するときに、次の項目を指定できます。

  • instance_count: 予測の生成に使用するコンピューティング ノードの数。
  • max_concurrency_per_instance: コンピューティング ノードあたりの並列スコアリング スクリプトの実行の最大数。
  • mini_batch_size: スコアリング スクリプトの実行ごとに渡されたファイルの数。
  • output_action:予測をどうするか:summary_only または append_row
  • output_file_name: append_rowoutput_action を選択した場合、予測を追加するファイル。

ヒント

Python SDK v2 を使用してバッチデプロイ作成するためのリファレンス ドキュメントを参照してください。

MLflow モデルをバッチ エンドポイントにデプロイするには、次のコードを使用できます。

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",
    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)