バッチ エンドポイントにスコアリング用のモデルをデプロイする
適用対象:Azure CLI ml extension v2 (現行)Python SDK azure-ai-ml v2 (現行)
バッチ エンドポイントは、大量のデータに対して推論を実行するモデルをデプロイするための便利な方法を提供します。 これらのエンドポイントを使用すると、バッチ スコアリングのモデルをホストするプロセスが単純化され、インフラストラクチャに気を取られることなく、機械学習に専念することができます。
次の場合に、モデルのデプロイにバッチ エンドポイントを使用します。
- 推論の実行に長い時間がかかるコストの高いモデルがある。
- 複数のファイルに分散された大量のデータに対して推論を実行する必要がある。
- 低遅延を必要としない
- 並列処理の恩恵を受けることができる
この記事では、バッチ エンドポイントを使用して、従来の MNIST (Modified National Institute of Standards and Technology) の数字認識問題を解決する機械学習モデルをデプロイします。 その後、デプロイされたモデルは、大量のデータ (この場合はイメージ ファイル) に対してバッチ推論を実行します。 まず、Torch を使用して作成されたモデルのバッチ デプロイを作成します。 このデプロイが、エンドポイントにおける既定のデプロイとなります。 後で、TensorFlow (Keras) で作成されたモードの 2 つ目のデプロイを作成し、2 つ目のデプロイをテストしてから、エンドポイントの既定のデプロイとして設定します。
この記事のコマンドをローカルで実行するために必要なコード サンプルとファイルについては、「サンプル リポジトリを複製する」セクションを参照してください。 コード サンプルとファイルは、azureml-examples リポジトリに含まれています。
前提条件
この記事の手順を実行する前に、次の前提条件が満たされていることをご確認ください。
Azure サブスクリプション。 Azure サブスクリプションをお持ちでない場合は、開始する前に無料アカウントを作成してください。 無料版または有料版の Azure Machine Learning をお試しください。
Azure Machine Learning ワークスペース。 準備できていない場合は、ワークスペースの管理方法に関する記事の手順を使用して作成します。
次のタスクを実行するには、ワークスペースで次のアクセス許可を持っている必要があります。
バッチ エンドポイントおよびデプロイを作成または管理する場合: 所有者ロール、共同作成者のロール、または
Microsoft.MachineLearningServices/workspaces/batchEndpoints/*
を許可するカスタム ロールを使用します。ワークスペース リソース グループに ARM デプロイを作成する場合: 所有者ロール、共同作成者ロール、またはワークスペースがデプロイされているリソース グループで
Microsoft.Resources/deployments/write
を許可するカスタム ロールを使用します。
Azure Machine Learning を使用するには、次のソフトウェアをインストールする必要があります。
適用対象: Azure CLI ml 拡張機能 v2 (現行)
Azure CLI と Azure Machine Learning 用の
ml
拡張機能。az extension add -n ml
examples リポジトリをクローンします
この記事の例は、azureml-examples リポジトリに含まれているコード サンプルを基にしています。 YAML などのファイルをコピーして貼り付けることなくコマンドをローカルで実行するには、最初にリポジトリを複製してから、ディレクトリをそのフォルダーに変更します。
git clone https://github.com/Azure/azureml-examples --depth 1
cd azureml-examples/cli/endpoints/batch/deploy-models/mnist-classifier
システムを準備する
ワークスペースに接続する
まず、作業を行う Azure Machine Learning ワークスペースに接続します。
まだ Azure CLI の既定値を設定していない場合は、既定の設定を保存する必要があります。 サブスクリプション、ワークスペース、リソース グループ、および場所の値を複数回渡さないようにするには、次のコードを実行します。
az account set --subscription <subscription>
az configure --defaults workspace=<workspace> group=<resource-group> location=<location>
コンピューティングを作成する
バッチ エンドポイントはコンピューティング クラスターで実行され、Azure Machine Learning コンピューティング クラスター (AmlCompute) と Kubernetes クラスターの両方をサポートします。 クラスターは共有リソースであるため、1 つのクラスターで 1 つまたは多数のバッチ デプロイ (必要に応じてほかのワークロードと一緒に) をホストすることができます。
次のコードに示されているように、batch-cluster
という名前のコンピューティングを作成します。 必要に応じて調整し、azureml:<your-compute-name>
を使用して自分のコンピューティングを参照できます。
az ml compute create -n batch-cluster --type amlcompute --min-instances 0 --max-instances 5
Note
バッチ エンドポイントが呼び出されてバッチ スコアリング ジョブが送信されるまで、クラスターは 0 ノードのままであるため、この時点ではコンピューティングに課金はされません。 コンピューティング コストの詳細については、AmlCompute のコストの管理と最適化に関する記事を参照してください。
バッチ エンドポイントを作成する
バッチ エンドポイントは、クライアントがバッチ スコアリング ジョブをトリガーするために呼び出すことができる HTTPS エンドポイントです。 バッチ スコアリング ジョブは、複数の入力にスコアリングするジョブです。 バッチ デプロイは、実際のバッチ スコアリング (またはバッチ推論) を行うモデルをホストするコンピューティング リソースのセットです。 1 つのバッチ エンドポイントに複数のバッチ デプロイを割り当てることができます。 バッチ エンドポイントの詳細については、「バッチ エンドポイントとは」を参照してください。
ヒント
バッチ デプロイのうちの 1 つが、エンドポイントの既定のデプロイとして機能します。 エンドポイントが呼び出されると、既定のデプロイが実際のバッチ スコアリングを実行します。 バッチ エンドポイントおよびデプロイの詳細については、バッチ エンドポイントとバッチ デプロイに関する記事を参照してください。
エンドポイントに名前を付けます。 エンドポイントの名前は、エンドポイントの URI に含まれるため、Azure リージョン内で一意である必要があります。 たとえば、
westus2
に存在できるmybatchendpoint
という名前のバッチ エンドポイントは 1 つだけです。バッチ エンドポイントを構成する
次の YAML ファイルは、バッチ エンドポイントを定義します。 このファイルは、バッチ エンドポイントを作成する際に CLI コマンドとともに使用できます。
endpoint.yml
$schema: https://azuremlschemas.azureedge.net/latest/batchEndpoint.schema.json name: mnist-batch description: A batch endpoint for scoring images from the MNIST dataset. tags: type: deep-learning
次の表では、エンドポイントの主要なプロパティについて説明します。 完全なバッチ エンドポイントの YAML スキーマについては、「CLI (v2) バッチ エンドポイントの YAML スキーマ」を参照してください。
Key 説明 name
バッチ エンドポイントの名前。 Azure リージョン レベルで一意である必要があります。 description
バッチ エンドポイントの説明。 このプロパティは省略可能です。 tags
エンドポイントに含めるタグ。 このプロパティは省略可能です。 エンドポイントを作成します。
バッチ デプロイを作成する
モデル デプロイは、実際の推論を実行するモデルをホストするのに必要なリソースのセットです。 バッチ モデル デプロイを作成するには、次の項目が必要です。
- ワークスペースに登録済みのモデル
- モデルをスコアリングするコード
- モデルの依存関係がインストールされている環境
- 事前作成済みのコンピューティングとリソースの設定
まず、デプロイするモデルを登録します。これは、一般的な数字認識問題 (MNIST) 用の Torch モデルです。 バッチ デプロイでは、ワークスペースに登録されているモデルのみをデプロイできます。 デプロイするモデルが既に登録されている場合は、この手順をスキップできます。
ヒント
モデルは、エンドポイントではなくデプロイに関連付けられます。 つまり、エンドポイントが異なるデプロイにデプロイされている限り、同じエンドポイントの下、1 つのエンドポイントを異なるモデル (またはモデル バージョン) で使用することができるということです。
次に、スコアリング スクリプトを作成します。 バッチ デプロイには、指定のモデルの実行方法と入力データの処理方法を示すスコアリング スクリプトが必要です。 バッチ エンドポイントでは、Python で作成されたスクリプトがサポートされます。 今回は、数字が表示された画像ファイルを読み込んで、対応する数字を出力するモデルをデプロイします。 スコアリング スクリプトは次のようになります。
注意
MLflow モデルの場合、このスコアリング スクリプトは Azure Machine Learning によって自動的に生成されるため、必要ありません。 モデルが MLflow モデルの場合は、この手順をスキップできます。 バッチ エンドポイントが MLflow モデルでどのように動作するかの詳細については、「バッチ デプロイで MLflow モデルを使用する」の記事を参照してください。
警告
バッチ エンドポイントの下に自動機械学習 (AutoML) モデルをデプロイする場合、自動 ML が提供するスコアリング スクリプトは、オンライン エンドポイントに対してのみ機能し、バッチ実行用には設計されていないので注意してください。 スコアリング スクリプトを作成する方法については、「バッチ デプロイ用のスコアリング スクリプトを作成する」を参照してください。
deployment-torch/code/batch_driver.py
import os import pandas as pd import torch import torchvision import glob from os.path import basename from mnist_classifier import MnistClassifier from typing import List def init(): global model global device # AZUREML_MODEL_DIR is an environment variable created during deployment # It is the path to the model folder model_path = os.environ["AZUREML_MODEL_DIR"] model_file = glob.glob(f"{model_path}/*/*.pt")[-1] model = MnistClassifier() model.load_state_dict(torch.load(model_file)) model.eval() device = torch.device("cuda:0" if torch.cuda.is_available() else "cpu") def run(mini_batch: List[str]) -> pd.DataFrame: print(f"Executing run method over batch of {len(mini_batch)} files.") results = [] with torch.no_grad(): for image_path in mini_batch: image_data = torchvision.io.read_image(image_path).float() batch_data = image_data.expand(1, -1, -1, -1) input = batch_data.to(device) # perform inference predict_logits = model(input) # Compute probabilities, classes and labels predictions = torch.nn.Softmax(dim=-1)(predict_logits) predicted_prob, predicted_class = torch.max(predictions, axis=-1) results.append( { "file": basename(image_path), "class": predicted_class.numpy()[0], "probability": predicted_prob.numpy()[0], } ) return pd.DataFrame(results)
バッチ デプロイを実行する環境を作成します。 この環境では、バッチ エンドポイントで必要なパッケージ
azureml-core
とazureml-dataset-runtime[fuse]
、およびコードの実行に必要な依存関係を含める必要があります。 この場合、依存関係はconda.yaml
ファイルにキャプチャされています。deployment-torch/environment/conda.yaml
name: mnist-env channels: - conda-forge dependencies: - python=3.8.5 - pip<22.0 - pip: - torch==1.13.0 - torchvision==0.14.0 - pytorch-lightning - pandas - azureml-core - azureml-dataset-runtime[fuse]
重要
パッケージ
azureml-core
とazureml-dataset-runtime[fuse]
はバッチ デプロイに必要であり、環境の依存関係に含める必要があります。次のように環境を指定します。
環境定義は、匿名環境としてデプロイ定義自体に含まれます。 デプロイでは、次の行で確認できます。
environment: name: batch-torch-py38 image: mcr.microsoft.com/azureml/openmpi4.1.0-ubuntu20.04:latest conda_file: environment/conda.yaml
警告
キュレーションされた環境は、バッチ デプロイではサポートされていません。 独自の環境を指定する必要があります。 プロセスを簡略化するために、キュレーションされた環境の基本イメージをいつでも自分のイメージとして使用できます。
[新しい展開の定義を作成する]
deployment-torch/deployment.yml
$schema: https://azuremlschemas.azureedge.net/latest/modelBatchDeployment.schema.json name: mnist-torch-dpl description: A deployment using Torch to solve the MNIST classification dataset. endpoint_name: mnist-batch type: model model: name: mnist-classifier-torch path: model code_configuration: code: code scoring_script: batch_driver.py environment: name: batch-torch-py38 image: mcr.microsoft.com/azureml/openmpi4.1.0-ubuntu20.04:latest conda_file: environment/conda.yaml compute: azureml:batch-cluster resources: instance_count: 1 settings: max_concurrency_per_instance: 2 mini_batch_size: 10 output_action: append_row output_file_name: predictions.csv retry_settings: max_retries: 3 timeout: 30 error_threshold: -1 logging_level: info
次の表では、バッチ デプロイの主要なプロパティについて説明します。 完全なバッチ デプロイの YAML スキーマについては、「CLI (v2) バッチ デプロイの YAML スキーマ」を参照してください。
Key 説明 name
デプロイの名前。 endpoint_name
デプロイを作成するエンドポイントの名前。 model
バッチ スコアリングに使用するモデル。 この例では、 path
を使用してインラインでモデルを定義しています。 この定義により、自動的にモデル ファイルをアップロードし、自動生成された名前とバージョンで登録できるようになります。 その他のオプションについては、モデル スキーマに関する記事を参照してください。 運用シナリオのベスト プラクティスとして、モデルを個別に作成し、ここで参照するようにしてください。 既存のモデルを参照するには、azureml:<model-name>:<model-version>
構文を使用します。code_configuration.code
モデルをスコアリングするためのすべての Python ソース コードを格納するローカル ディレクトリ。 code_configuration.scoring_script
code_configuration.code
ディレクトリ内の Python ファイル。 このファイルには、init()
関数とrun()
関数が記述されている必要があります。init()
関数は、コストのかかる、または一般的な準備を行うときに使用します (たとえば、メモリにモデルを読み込むなど)。init()
は、プロセスの開始時に 1 回だけ呼び出されます。 各エントリをスコアリングするには、run(mini_batch)
を使用します。mini_batch
の値は、ファイル パスのリストです。run()
関数からは、Pandas の DataFrame または配列が返されます。 返された要素はそれぞれ、mini_batch
内で成功した入力要素の 1 回の実行を示します。 スコアリング スクリプトを作成する方法の詳細については、「スコアリング スクリプトについて」を参照してください。environment
モデルをスコアリングする環境。 この例では、 conda_file
とimage
を使用して環境をインラインで定義しています。image
上にconda_file
の依存関係がインストールされます。 環境は、自動生成された名前とバージョンで自動的に登録されます。 その他のオプションについては、環境スキーマに関する記事を参照してください。 運用シナリオのベスト プラクティスとして、環境を別途作成し、ここで参照することをお勧めします。 既存の環境を参照するには、azureml:<environment-name>:<environment-version>
構文を使用します。compute
バッチ スコアリングを実行するコンピューティング。 この例では、最初に作成した batch-cluster
を使用し、azureml:<compute-name>
構文を使用してそれを参照します。resources.instance_count
各バッチ スコアリング ジョブに使用されるインスタンスの数。 settings.max_concurrency_per_instance
インスタンスあたりの scoring_script
の並列実行の最大数。settings.mini_batch_size
scoring_script
が 1 回のrun()
呼び出しで処理できるファイルの数。settings.output_action
出力ファイルで出力を整理する方法。 append_row
を使用すると、run()
で返されたすべての出力結果が、output_file_name
という名前の 1 つのファイルにマージされます。summary_only
を使用すると、出力結果はマージされず、error_threshold
の計算だけが行われます。settings.output_file_name
append_row
output_action
のバッチ スコアリング出力ファイルの名前。settings.retry_settings.max_retries
scoring_script
run()
が失敗した場合の最大再試行回数。settings.retry_settings.timeout
ミニ バッチをスコアリングするための scoring_script
run()
のタイムアウト (秒単位)。settings.error_threshold
無視する必要がある入力ファイルのスコアリング エラーの数。 入力全体でのエラーの数がこの値を超えると、ジョブは終了します。 この例では -1
を使用しています。これは、バッチ スコアリング ジョブを終了することなく、任意の数のエラーが許容されることを示します。settings.logging_level
ログの詳細。 値は詳細度が低い順に WARNING、INFO、DEBUG です。 settings.environment_variables
バッチ スコアリング ジョブごとに設定される環境変数の名前と値のペアの辞書。 デプロイを作成します。
次のコードを実行して、バッチ エンドポイントの下にバッチ デプロイを作成し、それを既定のデプロイとして設定します。
az ml batch-deployment create --file deployment-torch/deployment.yml --endpoint-name $ENDPOINT_NAME --set-default
ヒント
--set-default
は、新しく作成したデプロイをエンドポイントの既定のデプロイとして設定するパラメーターです。 これは、特に最初のデプロイを作成する場合に、エンドポイントの新しい既定のデプロイを作成する便利な方法です。 運用シナリオのベスト プラクティスとして、新しいデプロイを既定として設定せずに作成することをお勧めします。 デプロイが期待どおりに動作することを確認し、後で既定のデプロイを更新します。 このプロセスの実装の詳細については、「新しいモデルをデプロイする」セクションを参照してください。バッチ エンドポイントとデプロイの詳細を確認します。
バッチ エンドポイントを実行して結果にアクセスする
バッチ エンドポイントを呼び出すと、バッチ スコアリング ジョブがトリガーされます。 ジョブ name
は呼び出しの応答から返され、バッチ スコアリングの進行状況を追跡するために使用できます。 バッチ エンドポイントでスコアリングのためにモデルを実行する場合は、入力データへのパスを指定する必要があります。これにより、エンドポイントがスコアリング対象のデータを見つけることができます。 次の例は、Azure Storage アカウントに格納されている MNIST データセットのサンプル データに対して新しいジョブを開始する方法を示しています。
Azure CLI、Azure Machine Learning SDK、または REST エンドポイントを使用して、バッチ エンドポイントを実行して呼び出すことができます。 これらのオプションの詳細については、「バッチ エンドポイントのジョブと入力データを作成する」を参照してください。
Note
並列処理のしくみ
バッチ デプロイでは、作業はファイル レベルで分散されます。つまり、10 ファイルのミニバッチを持つ 100 ファイルを含むフォルダーからは、それぞれ 10 ファイルの 10 バッチが生成されます。 これは、対象となるファイルのサイズに関係なく行われることに注意してください。 ファイルが大きすぎて大きなミニバッチで処理できない場合は、ファイルをより小さなファイルに分割して並列処理の数を増やすか、ミニバッチあたりのファイル数を減らすことをお勧めします。 現時点では、バッチ デプロイでファイルのサイズ配分のばらつきを考慮することはできません。
JOB_NAME=$(az ml batch-endpoint invoke --name $ENDPOINT_NAME --input https://azuremlexampledata.blob.core.windows.net/data/mnist/sample --input-type uri_folder --query name -o tsv)
バッチ エンドポイントでは、さまざまな場所にあるファイルやフォルダーの読み取りがサポートされています。 サポートされているタイプとその指定方法の詳細については、「バッチ エンドポイント ジョブからのデータへのアクセス」を参照してください。
バッチ ジョブ実行の進行状況を監視する
バッチ スコアリング ジョブは、入力のセット全体を処理するために、ある程度時間がかかるのが普通です。
次のコードは、ジョブの状態を確認し、詳細が記載された Azure Machine Learning スタジオへのリンクを出力します。
az ml job show -n $JOB_NAME --web
バッチ スコアリングの結果を確認する
ジョブの出力は、クラウド ストレージに格納されます。これはワークスペースの既定の BLOB ストレージか指定したストレージのいずれかです。 既定値を変更する方法については、「出力の場所を構成する」を参照してください。 次の手順を実行すると、ジョブが完了したときに Azure Storage Explorer でスコアリング結果を表示できます。
次のコードを実行して、Azure Machine Learning スタジオでバッチ スコアリング ジョブを開きます。 ジョブのスタジオ リンクは、
invoke
の応答にもinteractionEndpoints.Studio.endpoint
の値として含まれています。az ml job show -n $JOB_NAME --web
ジョブのグラフで、
batchscoring
ステップを選択します。[出力 + ログ] タブを選択し、 [Show data outputs](データ出力の表示) を選択します。
[Data outputs](データ出力) で、Storage Explorer を開くアイコンを選択します。
Storage Explorer のスコアリング結果は、次のサンプル ページのようになります。
出力の場所を構成する
既定では、バッチ スコアリングの結果が、ワークスペースの既定の BLOB ストアに格納されます。格納先は、ジョブ名 (システムにより生成された GUID) に基づいて命名されたフォルダーです。 スコアリング出力の格納場所は、バッチ エンドポイントを呼び出すときに構成できます。
Azure Machine Learning の登録済みデータストア内でフォルダーを構成するには、output-path
を使用します。 --output-path
の構文は、フォルダーを指定する場合は --input
と同じです。つまり、azureml://datastores/<datastore-name>/paths/<path-on-datastore>/
となります。 新しい出力ファイル名を構成するには、--set output_file_name=<your-file-name>
を使用します。
OUTPUT_FILE_NAME=predictions_`echo $RANDOM`.csv
OUTPUT_PATH="azureml://datastores/workspaceblobstore/paths/$ENDPOINT_NAME"
JOB_NAME=$(az ml batch-endpoint invoke --name $ENDPOINT_NAME --input https://azuremlexampledata.blob.core.windows.net/data/mnist/sample --output-path $OUTPUT_PATH --set output_file_name=$OUTPUT_FILE_NAME --query name -o tsv)
警告
一意の出力場所を使用する必要があります。 出力ファイルが存在する場合、バッチ スコアリング ジョブでエラーが発生します。
重要
入力とは異なり、出力は BLOB ストレージ アカウントで実行される Azure Machine Learning データ ストアにのみ格納できます。
各ジョブごとにデプロイ構成を上書きする
バッチ エンドポイントを呼び出すときに、コンピューティング リソースを最大限に活用し、パフォーマンスを向上させるために、一部の設定を上書きすることができます。 次の設定は、ジョブごとに構成できます。
- インスタンス数: この設定を使用して、コンピューティング クラスターから要求するインスタンスの数を上書きします。 たとえば、データ入力の量が多い場合は、より多くのインスタンスを使用して、エンド ツー エンドのバッチ スコアリングを高速化することができます。
- ミニバッチ サイズ: この設定を使用して、各ミニバッチに含めるファイルの数を上書きします。 ミニ バッチの数は、入力ファイルの合計数とミニバッチ サイズによって決まります。 ミニバッチ サイズが小さいと、生成されるミニ バッチが多くなります。 ミニ バッチは並列で実行できますが、追加のスケジューリングと呼び出しのオーバーヘッドが発生する可能性があります。
- 最大再試行回数、タイムアウト、エラーしきい値など、その他の設定を上書きすることができます。 これらの設定は、さまざまなワークロードを対象にしたエンド ツー エンドのバッチ スコアリング時間に影響を及ぼす可能性があります。
JOB_NAME=$(az ml batch-endpoint invoke --name $ENDPOINT_NAME --input https://azuremlexampledata.blob.core.windows.net/data/mnist/sample --mini-batch-size 20 --instance-count 5 --query name -o tsv)
デプロイをエンドポイントに追加する
バッチ エンドポイントにデプロイを追加した後も、引き続きモデルを改良して、新しいデプロイを追加できます。 ユーザーが新しいモデルを開発して同じエンド ポイントの下にデプロイする間、バッチ エンドポイントは引き続き、既定のデプロイに対応し続けます。 デプロイが相互に影響することはありません。
この例では、同じ MNIST の問題を解決するために、Keras と TensorFlow で構築されたモデルを使用する 2 つ目のデプロイを追加します。
2 つめのデプロイを追加する
バッチ デプロイを実行する環境を作成します。 コードの実行に必要な依存関係を環境に含めます。 また、バッチ デプロイを動作させるために必要なライブラリ
azureml-core
も追加する必要があります。 次の環境定義に、TensorFlow を使用してモデルを実行するために必要なライブラリがあります。環境定義は、匿名環境としてデプロイ定義自体に含まれます。
environment: name: batch-tensorflow-py38 image: mcr.microsoft.com/azureml/openmpi4.1.0-ubuntu20.04:latest conda_file: environment/conda.yaml
使用した conda ファイルは次のようになります。
deployment-keras/environment/conda.yaml
name: tensorflow-env channels: - conda-forge dependencies: - python=3.8.5 - pip - pip: - pandas - tensorflow - pillow - azureml-core - azureml-dataset-runtime[fuse]
モデルのスコアリング スクリプトを作成します。
deployment-keras/code/batch_driver.py
import os import numpy as np import pandas as pd import tensorflow as tf from typing import List from os.path import basename from PIL import Image from tensorflow.keras.models import load_model def init(): global model # AZUREML_MODEL_DIR is an environment variable created during deployment model_path = os.path.join(os.environ["AZUREML_MODEL_DIR"], "model") # load the model model = load_model(model_path) def run(mini_batch: List[str]) -> pd.DataFrame: print(f"Executing run method over batch of {len(mini_batch)} files.") results = [] for image_path in mini_batch: data = Image.open(image_path) data = np.array(data) data_batch = tf.expand_dims(data, axis=0) # perform inference pred = model.predict(data_batch) # Compute probabilities, classes and labels pred_prob = tf.math.reduce_max(tf.math.softmax(pred, axis=-1)).numpy() pred_class = tf.math.argmax(pred, axis=-1).numpy() results.append( { "file": basename(image_path), "class": pred_class[0], "probability": pred_prob, } ) return pd.DataFrame(results)
[新しい展開の定義を作成する]
deployment-keras/deployment.yml
$schema: https://azuremlschemas.azureedge.net/latest/modelBatchDeployment.schema.json name: mnist-keras-dpl description: A deployment using Keras with TensorFlow to solve the MNIST classification dataset. endpoint_name: mnist-batch type: model model: name: mnist-classifier-keras path: model code_configuration: code: code scoring_script: batch_driver.py environment: name: batch-tensorflow-py38 image: mcr.microsoft.com/azureml/openmpi4.1.0-ubuntu20.04:latest conda_file: environment/conda.yaml compute: azureml:batch-cluster resources: instance_count: 1 settings: max_concurrency_per_instance: 2 mini_batch_size: 10 output_action: append_row output_file_name: predictions.csv
デプロイを作成します。
既定以外のバッチ デプロイをテストする
既定以外の新しいデプロイをテストするには、実行するデプロイの名前を把握している必要があります。
DEPLOYMENT_NAME="mnist-keras-dpl"
JOB_NAME=$(az ml batch-endpoint invoke --name $ENDPOINT_NAME --deployment-name $DEPLOYMENT_NAME --input https://azuremlexampledata.blob.core.windows.net/data/mnist/sample --input-type uri_folder --query name -o tsv)
--deployment-name
を使用して実行するデプロイを指定していることに注意してください。 このパラメーターを使用すると、バッチ エンドポイントの既定のデプロイは更新せずに、既定以外のデプロイをinvoke
ことができます。
既定のバッチ デプロイを更新する
エンドポイント内で特定のデプロイを呼び出すこともできますが、通常はエンドポイント自体を呼び出し、使用するデプロイはエンドポイントで決定されるようにします。 エンドポイントを呼び出すユーザーとの契約を変更することなく、既定のデプロイを変更する (その結果として、デプロイを提供するモデルが変更される) ことができます。 既定のデプロイを更新するには、次のコードを使用します。
az ml batch-endpoint update --name $ENDPOINT_NAME --set defaults.deployment_name=$DEPLOYMENT_NAME
エンドポイントとデプロイを削除する
古いバッチ デプロイを今後使用しない場合は、次のコードを実行して削除します。 --yes
は、削除を確認するために使用します。
az ml batch-deployment delete --name mnist-torch-dpl --endpoint-name $ENDPOINT_NAME --yes
次のコードを実行して、バッチ エンドポイントおよびその基礎となるすべてのデプロイを削除します。 バッチ スコアリング ジョブは削除されません。
az ml batch-endpoint delete --name $ENDPOINT_NAME --yes