オンライン エンドポイントを使用して機械学習モデルをデプロイおよびスコア付けする
[アーティクル] 09/03/2024
16 人の共同作成者
フィードバック
この記事の内容
適用対象: Azure CLI ml extension v2 (現行) Python SDK azure-ai-ml v2 (現行)
この記事では、リアルタイム推論で使うためにモデルをオンライン エンドポイントにデプロイする方法について説明します。 まずローカル コンピューターにモデルをデプロイして、発生するエラーをデバッグします。 次に、Azure でそのモデルをデプロイしてテストし、デプロイ ログを表示し、サービス レベル アグリーメント (SLA) を監視します。 この記事の終わりまでに、リアルタイム推論に使用できるスケーラブルな HTTPS/REST エンドポイントが用意されています。
オンライン エンドポイントは、リアルタイムの推論に使用されるエンドポイントです。 オンライン エンドポイントには、2 つの種類があります。マネージド オンライン エンドポイント と Kubernetes オンライン エンドポイント です。 エンドポイントの詳細、およびマネージド オンライン エンドポイントと Kubernetes オンライン エンドポイントの違いについては、Azure Machine Learning のエンドポイントの概要 に関する記事をご覧ください。
マネージド オンライン エンドポイントは、ターンキー方式で機械学習モデルを展開するのに役立ちます。 マネージド オンライン エンドポイントは、スケーラブルでフル マネージドの方法で Azure の強力な CPU および GPU マシンと動作します。 マネージド オンライン エンドポイントは、モデルの提供、スケーリング、セキュリティ保護、監視を行います。基になるインフラストラクチャの設定と管理のオーバーヘッドがなくなります。
このドキュメントの主な例では、デプロイにマネージド オンライン エンドポイントを使用します。 代わりに Kubernetes を使用する場合は、マネージド オンライン エンドポイントに関する説明に沿って本ドキュメント内に記載されている注記を参照してください。
前提条件
適用対象: Azure CLI ml 拡張機能 v2 (現行)
この記事の手順に従う前に、次の前提条件が満たされていることをご確認ください。
Azure ロールベースのアクセス制御 (Azure RBAC) は、Azure Machine Learning の操作に対するアクセスを許可するために使用されます。 この記事の手順を実行するには、ユーザー アカウントに、Azure Machine Learning ワークスペースの所有者 か共同作成者 ロール、または Microsoft.MachineLearningServices/workspaces/onlineEndpoints/*
を許可するカスタム ロールを割り当てる必要があります。 スタジオを使ってオンライン エンドポイントやデプロイを作成するか管理する場合は、リソース グループ所有者からのアクセス許可 "Microsoft.Resources/deployments/write" がさらに必要になります。 詳細については、「Azure Machine Learning ワークスペースへのアクセスの管理 」を参照してください。
(省略可能) ロ―カルでデプロイするには、ローカル コンピューターに Docker エンジン をインストールする必要があります。 問題のデバッグを容易にするため、このオプションを "強くお勧めします "。
適用対象 : Python SDK azure-ai-ml v2 (現行)
この記事の手順に従う前に、次の前提条件が満たされていることをご確認ください。
Azure ロールベースのアクセス制御 (Azure RBAC) は、Azure Machine Learning の操作に対するアクセスを許可するために使用されます。 この記事の手順を実行するには、ユーザー アカウントに、Azure Machine Learning ワークスペースの所有者 か共同作成者 ロール、または Microsoft.MachineLearningServices/workspaces/onlineEndpoints/*
を許可するカスタム ロールを割り当てる必要があります。 詳細については、「Azure Machine Learning ワークスペースへのアクセスの管理 」を参照してください。
(省略可能) ロ―カルでデプロイするには、ローカル コンピューターに Docker エンジン をインストールする必要があります。 問題のデバッグを容易にするため、このオプションを "強くお勧めします "。
この記事の手順に従う前に、次の前提条件が満たされていることをご確認ください。
Azure サブスクリプション。 Azure サブスクリプションをお持ちでない場合は、開始する前に無料アカウントを作成してください。 無料版または有料版の Azure Machine Learning をお試しください。
Azure Machine Learning ワークスペースとコンピューティング インスタンス。 これらのリソースを所有しておらず、それらを作成する必要がある場合は、クイック スタート: ワークスペース リソースの作成 に関する記事の手順に従ってください。
Azure ロールベースのアクセス制御 (Azure RBAC) は、Azure Machine Learning の操作に対するアクセスを許可するために使用されます。 この記事の手順を実行するには、ユーザー アカウントに、Azure Machine Learning ワークスペースの所有者 か共同作成者 ロール、または Microsoft.MachineLearningServices/workspaces/onlineEndpoints/*
を許可するカスタム ロールを割り当てる必要があります。 詳細については、「Azure Machine Learning ワークスペースへのアクセスの管理 」を参照してください。
注意
これらの手順では Azure CLI と機械学習のための CLI 拡張機能が使用されますが、これらが主な目的ではありません。 これらは、Azure にテンプレートを渡し、テンプレートのデプロイの状態を確認するユーティリティとして、より頻繁に使用されます。
この記事の手順に従う前に、次の前提条件が満たされていることをご確認ください。
Azure ロールベースのアクセス制御 (Azure RBAC) は、Azure Machine Learning の操作に対するアクセスを許可するために使用されます。 この記事の手順を実行するには、ユーザー アカウントに、Azure Machine Learning ワークスペースの所有者 か共同作成者 ロール、または Microsoft.MachineLearningServices/workspaces/onlineEndpoints/*
を許可するカスタム ロールを割り当てる必要があります。 詳細については、「Azure Machine Learning ワークスペースへのアクセスの管理 」を参照してください。
デプロイ用に十分な仮想マシン (VM) クォータが割り当てられていることを確認してください。 Azure Machine Learning では、一部の VM SKU で、アップグレードを実行するためにコンピューティング リソースの 20% が予約されます。 たとえば、1 つのデプロイで 10 個のインスタンスを要求する場合は、VM SKU のコア数ごとに 12 個分のクォータが必要です。 この追加分のコンピューティング リソースを考慮していないと、エラーが発生します。 一部の VM SKU は、この追加クォータの予約の対象外です。 クォータ割り当てについて詳しくは、「デプロイのための仮想マシン クォータの割り当て 」をご覧ください。
または、Azure Machine Learning の共有クォータ プールからのクォータを期間限定で使うこともできます。 Azure Machine Learning には共有クォータ プールが用意されており、さまざまなリージョンのユーザーが、可用性に応じて、そのクォータにアクセスして限られた時間だけテストを実行できます。
スタジオを使ってモデル カタログから Llama-2、Phi、Nemotron、Mistral、Dolly、Deci-DeciLM モデルをマネージド オンライン エンドポイントにデプロイした場合、Azure Machine Learning では、テストを実行できるように、少しの間、その共有クォータ プールにアクセスできます。 共有クォータ プールについて詳しくは、「Azure Machine Learning の共有クォータ 」をご覧ください。
システムを準備する
環境変数の設定
まだ Azure CLI の既定値を設定していない場合は、既定の設定を保存する必要があります。 サブスクリプション、ワークスペース、およびリソース グループの値を複数回渡さないようにするには、次のコードを実行します。
az account set --subscription <subscription ID>
az configure --defaults workspace=<Azure Machine Learning workspace name> group=<resource group>
examples リポジトリをクローンします
このアーティクルに従って、まずサンプル リポジトリ (azureml-examples) を複製します。 その後、次のコードを実行してリポジトリの cli/
ディレクトリに移動します。
git clone --depth 1 https://github.com/Azure/azureml-examples
cd azureml-examples
cd cli
ヒント
--depth 1
を使用すると、リポジトリに対する最新のコミットだけが複製されるので、操作の完了にかかる時間を短縮できます。
このチュートリアルのコマンドは、cli
ディレクトリ内のファイル deploy-local-endpoint.sh
と deploy-managed-online-endpoint.sh
に入っています。また、YAML 構成ファイルは endpoints/online/managed/sample/
サブディレクトリ内にあります。
注意
Kubernetes オンライン エンドポイントの YAML 構成ファイルは、endpoints/online/kubernetes/
サブディレクトリにあります。
examples リポジトリをクローンします
トレーニングの例を実行するには、最初に例のリポジトリ (azureml-examples) をクローンして、azureml-examples/sdk/python/endpoints/online/managed
ディレクトリに移動します。
git clone --depth 1 https://github.com/Azure/azureml-examples
cd azureml-examples/sdk/python/endpoints/online/managed
ヒント
--depth 1
を使用すると、リポジトリに対する最新のコミットだけが複製されるので、操作の完了にかかる時間を短縮できます。
この記事の情報は、online-endpoints-simple-deployment.ipynb ノートブックに基づいています。 それにはこの記事と同じ内容が含まれていますが、コードの順序は若干異なります。
Azure Machine Learning ワークスペースに接続する
ワークスペース は、Azure Machine Learning の最上位のリソースで、Azure Machine Learning を使用するときに作成するすべての成果物を操作するための一元的な場所を提供します。 このセクションでは、デプロイ タスクを実行するワークスペースに接続します。 手順に沿って進めるために、online-endpoints-simple-deployment.ipynb
ノートブックを開いてください。
必要なライブラリをインポートします。
# import required libraries
from azure.ai.ml import MLClient
from azure.ai.ml.entities import (
ManagedOnlineEndpoint,
ManagedOnlineDeployment,
Model,
Environment,
CodeConfiguration
)
from azure.identity import DefaultAzureCredential
注意
Kubernetes オンライン エンドポイントを使用している場合は、KubernetesOnlineEndpoint
クラスとKubernetesOnlineDeployment
クラスをazure.ai.ml.entities
ライブラリからインポートします。
ワークスペースの詳細を構成し、ワークスペースへのハンドルを取得します。
ワークスペースに接続するには、識別子パラメーター (サブスクリプション、リソース グループ、ワークスペース名) が必要です。 これらの詳細を azure.ai.ml
の MLClient
で使って、必要な Azure Machine Learning ワークスペースへのハンドルを取得します。 次の例では、既定の Azure 認証 を使用しています。
# enter details of your Azure Machine Learning workspace
subscription_id = "<SUBSCRIPTION_ID>"
resource_group = "<RESOURCE_GROUP>"
workspace = "<AZUREML_WORKSPACE_NAME>"
# get a handle to the workspace
ml_client = MLClient(
DefaultAzureCredential(), subscription_id, resource_group, workspace
)
ローカル コンピューターに Git をインストール済みの場合は、手順に従ってサンプル リポジトリを複製できます。 それ以外の場合は、手順に従ってサンプル リポジトリからファイルをダウンロードします。
examples リポジトリをクローンします
この記事に沿って進めるには、まずサンプル リポジトリ (azureml-examples) を複製し、次に azureml-examples/cli/endpoints/online/model-1
ディレクトリに移動します。
git clone --depth 1 https://github.com/Azure/azureml-examples
cd azureml-examples/cli/endpoints/online/model-1
ヒント
--depth 1
を使用すると、リポジトリに対する最新のコミットだけが複製されるので、操作の完了にかかる時間を短縮できます。
サンプル リポジトリからファイルをダウンロードする
サンプル リポジトリを複製した場合は、ローカル コンピューターにこのサンプル用のファイルのコピーが既にあるので、次のセクションに進むことができます。 リポジトリを複製していない場合は、ローカル コンピューターにダウンロードできます。
https://github.com/Azure/azureml-examples/ にアクセスします。
ページの [<> Code] (コード) ボタンに移動し、[Local] (ローカル) タブから [Download ZIP] (ZIP のダウンロード) を選択します。
フォルダー /cli/endpoints/online/model-1/model
とファイル /cli/endpoints/online/model-1/onlinescoring/score.py
を見つけます。
環境変数の設定
この記事の例で使用するため、次の環境変数を設定します。 これらの値を Azure サブスクリプション ID、ワークスペースが配置されている Azure リージョン、ワークスペースが含まれているリソース グループ、ワークスペース名に置き換えます。
export SUBSCRIPTION_ID="your Azure subscription ID"
export LOCATION="Azure region where your workspace is located"
export RESOURCE_GROUP="Azure resource group that contains your workspace"
export WORKSPACE="Azure Machine Learning workspace name"
いくつかのテンプレートの例では、ワークスペースの Azure BLOB ストアにファイルをアップロードする必要があります。 次の手順では、ワークスペースに対してクエリを実行し、この情報を例で使用する環境変数に格納します。
アクセス トークンを取得します。
TOKEN=$(az account get-access-token --query accessToken -o tsv)
REST API バージョンを設定します。
API_VERSION="2022-05-01"
ストレージ情報を取得します。
# Get values for storage account
response=$(curl --location --request GET "https://management.azure.com/subscriptions/$SUBSCRIPTION_ID/resourceGroups/$RESOURCE_GROUP/providers/Microsoft.MachineLearningServices/workspaces/$WORKSPACE/datastores?api-version=$API_VERSION&isDefault=true" \
--header "Authorization: Bearer $TOKEN")
AZUREML_DEFAULT_DATASTORE=$(echo $response | jq -r '.value[0].name')
AZUREML_DEFAULT_CONTAINER=$(echo $response | jq -r '.value[0].properties.containerName')
export AZURE_STORAGE_ACCOUNT=$(echo $response | jq -r '.value[0].properties.accountName')
examples リポジトリをクローンします
このアーティクルに従って、まずサンプル リポジトリ (azureml-examples) を複製します。 その後、次のコードを実行してサンプル ディレクトリに移動します。
git clone --depth 1 https://github.com/Azure/azureml-examples
cd azureml-examples
ヒント
--depth 1
を使用すると、リポジトリに対する最新のコミットだけが複製されるので、操作の完了にかかる時間を短縮できます。
エンドポイントを定義する
オンライン エンドポイントを定義するには、エンドポイント名 と認証モード を指定します。 マネージド オンライン エンドポイントについて詳しくは、「オンライン エンドポイント 」をご覧ください。
エンドポイント名を設定する
エンドポイント名を設定するには、次のコマンドを実行します。 YOUR_ENDPOINT_NAME
を Azure リージョンでの一意の名前に置き換えます。 名前付け規則の詳細については、「エンドポイントの制限 」を参照してください。
Linux の場合は、次のコマンドを実行します。
export ENDPOINT_NAME="<YOUR_ENDPOINT_NAME>"
次のスニペットは、endpoints/online/managed/sample/endpoint.yml ファイルを示しています。
$schema: https://azuremlschemas.azureedge.net/latest/managedOnlineEndpoint.schema.json
name: my-endpoint
auth_mode: key
エンドポイント YAML 形式のリファレンスを次の表で説明します。 これらの属性の指定方法については、オンライン エンドポイント YAML リファレンス に関する記事を参照してください。 マネージド エンドポイントに関する制限については、オンライン エンドポイントの制限 に関する記事を参照してください。
Key
説明
$schema
(省略可能) YAML スキーマ。 上記のコード スニペットをブラウザーで表示すると、YAML ファイルで使用可能なすべてのオプションを確認できます。
name
エンドポイントの名前。
auth_mode
キーベースの認証に key
を使用します。 Azure Machine Learning のトークン ベースの認証に aml_token
を使用します。 Microsoft Entra トークンベースの認証 (プレビュー) の場合は aad_token
を使います。 認証の詳細については、オンライン エンドポイントのクライアントを認証する に関する記事を参照してください。
まずオンライン エンドポイントの名前を定義し、次にエンドポイントを構成します。
エンドポイント名は、Azure リージョン内で一意である必要があります。 名前付け規則の詳細については、「エンドポイントの制限 」を参照してください。
# Define an endpoint name
endpoint_name = "my-endpoint"
# Example way to define a random name
import datetime
endpoint_name = "endpt-" + datetime.datetime.now().strftime("%m%d%H%M%f")
# create an online endpoint
endpoint = ManagedOnlineEndpoint(
name = endpoint_name,
description="this is a sample endpoint",
auth_mode="key"
)
前のコードでは、キーベースの認証の key
を使っています。 Azure Machine Learning トークン ベースの認証を使用するには、aml_token
を使用します。 Microsoft Entra トークン ベースの認証 (プレビュー) を使うには、aad_token
を使います。 認証の詳細については、オンライン エンドポイントのクライアントを認証する に関する記事を参照してください。
スタジオから Azure にデプロイする場合は、エンドポイントと、それに追加するデプロイを作成します。 その時点で、エンドポイントとデプロイの名前を指定するようにダイアログが表示されます。
エンドポイント名を設定する
エンドポイント名を設定するには、次のコマンドを実行します。 YOUR_ENDPOINT_NAME
を Azure リージョンでの一意の名前に置き換えます。 名前付け規則の詳細については、「エンドポイントの制限 」を参照してください。
Linux の場合は、次のコマンドを実行します。
export ENDPOINT_NAME=endpoint-`echo $RANDOM`
エンドポイントとデプロイを定義するために、この記事では Azure Resource Manager テンプレート online-endpoint.json と online-endpoint-deployment.json を使用します。 オンライン エンドポイントとデプロイの定義にテンプレートを使用するには、「Azure へのデプロイ 」セクションを参照してください。
デプロイを定義する
デプロイは、実際の推論を実行するモデルをホストするのに必要なリソースのセットです。 この例では、回帰を実行する scikit-learn モデルをデプロイし、スコアリング スクリプト score.py を使って、指定された入力要求に基づいてそのモデルを実行します。
デプロイの主な属性については、「オンライン デプロイ 」をご覧ください。
デプロイ構成では、デプロイするモデルの場所が使われます。
次のスニペットは、デプロイを構成するのに必要なすべての入力が指定された endpoints/online/managed/sample/blue-deployment.yml ファイルを示しています。
blue-deployment.yml
$schema: https://azuremlschemas.azureedge.net/latest/managedOnlineDeployment.schema.json
name: blue
endpoint_name: my-endpoint
model:
path: ../../model-1/model/
code_configuration:
code: ../../model-1/onlinescoring/
scoring_script: score.py
environment:
conda_file: ../../model-1/environment/conda.yaml
image: mcr.microsoft.com/azureml/openmpi4.1.0-ubuntu20.04:latest
instance_type: Standard_DS3_v2
instance_count: 1
blue-deployment.yml ファイルで、次のデプロイ属性が指定されています。
model
- path
(ファイルのアップロード元) を使って、モデルのプロパティをインラインで指定します。 CLI によって自動的にモデル ファイルがアップロードされ、自動生成された名前でモデルが登録されます。
environment
- ファイルのアップロード元を含むインライン定義を使って、CLI によって自動的に conda.yaml
ファイルがアップロードされ、環境が登録されます。 後で、環境を構築するために、デプロイで基本イメージに image
(この例では、その mcr.microsoft.com/azureml/openmpi4.1.0-ubuntu20.04:latest
) が使われ、conda_file
の依存関係がその基本イメージの上にインストールされます。
code_configuration
- デプロイ中に、開発環境からローカル ファイル (スコアリング モデル用の Python ソースなど) がアップロードされます。
YAML スキーマの詳細については、オンライン エンドポイント YAML リファレンス に関するドキュメントを参照してください。
Note
コンピューティング先としてマネージド オンライン エンドポイントではなく Kubernetes エンドポイントを使うには:
Azure Machine Learning スタジオ を使用して、Kubernetes クラスターを作成し、Azure Machine Learning ワークスペースにコンピューティング先としてアタッチします。
Kubernetes をターゲットにするには、マネージド エンドポイント YAML ではなく、エンドポイント YAML を使います。 YAML を編集して compute
の値を登録済みコンピューティング先の名前に変更する必要があります。 Kubernetes デプロイに適用できる追加プロパティがある、この deployment.yaml を使うことができます。
マネージド オンライン エンドポイントに関してこの記事で使われているすべてのコマンドは、Kubernetes エンドポイントにも適用されます。ただし、次の機能は Kubernetes エンドポイントには適用されません。
デプロイを構成するには、次のようにします。
model = Model(path="../model-1/model/sklearn_regression_model.pkl")
env = Environment(
conda_file="../model-1/environment/conda.yaml",
image="mcr.microsoft.com/azureml/openmpi4.1.0-ubuntu20.04:latest",
)
blue_deployment = ManagedOnlineDeployment(
name="blue",
endpoint_name=endpoint_name,
model=model,
environment=env,
code_configuration=CodeConfiguration(
code="../model-1/onlinescoring", scoring_script="score.py"
),
instance_type="Standard_DS3_v2",
instance_count=1,
)
Model
- path
(ファイルのアップロード元) を使って、モデルのプロパティをインラインで指定します。 SDK によって自動的にモデル ファイルがアップロードされ、自動生成された名前でモデルが登録されます。
Environment
- ファイルのアップロード元を含むインライン定義を使って、SDK によって自動的に conda.yaml
ファイルがアップロードされ、環境が登録されます。 後で、環境を構築するために、デプロイで基本イメージに image
(この例では、その mcr.microsoft.com/azureml/openmpi4.1.0-ubuntu20.04:latest
) が使われ、conda_file
の依存関係がその基本イメージの上にインストールされます。
CodeConfiguration
- デプロイ中に、開発環境からローカル ファイル (スコアリング モデル用の Python ソースなど) がアップロードされます。
オンライン デプロイ定義について詳しくは、「OnlineDeployment クラス 」をご覧ください。
Azure にデプロイする場合は、エンドポイントと、それに追加するデプロイを作成します。 その時点で、エンドポイントとデプロイの名前を指定するようにダイアログが表示されます。
スコアリング スクリプトを理解する
ヒント
オンライン エンドポイントのスコアリング スクリプトの形式は、前のバージョンの CLI や Python SDK で使用されている形式と同じです。
code_configuration.scoring_script
で指定されているスコアリング スクリプトには、init()
関数と run()
関数が含まれている必要があります。
スコアリング スクリプトには、init()
関数と run()
関数が含まれている必要があります。
スコアリング スクリプトには、init()
関数と run()
関数が含まれている必要があります。
スコアリング スクリプトには、init()
関数と run()
関数が含まれている必要があります。 この記事では、score.py ファイル を使います。
デプロイのためにテンプレートを使用している場合は、まず Azure BLOB ストアにスコアリング ファイルをアップロードしてから、それを登録する必要があります。
次のコードでは、Azure CLI コマンド az storage blob upload-batch
を使ってスコアリング ファイルをアップロードしています。
az storage blob upload-batch -d $AZUREML_DEFAULT_CONTAINER/score -s cli/endpoints/online/model-1/onlinescoring --account-name $AZURE_STORAGE_ACCOUNT
次のコードでは、テンプレートを使ってそのコードを登録しています。
az deployment group create -g $RESOURCE_GROUP \
--template-file arm-templates/code-version.json \
--parameters \
workspaceName=$WORKSPACE \
codeAssetName="score-sklearn" \
codeUri="https://$AZURE_STORAGE_ACCOUNT.blob.core.windows.net/$AZUREML_DEFAULT_CONTAINER/score"
この例では、score.py ファイル : score.py を使用します
import os
import logging
import json
import numpy
import joblib
def init():
"""
This function is called when the container is initialized/started, typically after create/update of the deployment.
You can write the logic here to perform init operations like caching the model in memory
"""
global model
# AZUREML_MODEL_DIR is an environment variable created during deployment.
# It is the path to the model folder (./azureml-models/$MODEL_NAME/$VERSION)
# Please provide your model's folder name if there is one
model_path = os.path.join(
os.getenv("AZUREML_MODEL_DIR"), "model/sklearn_regression_model.pkl"
)
# deserialize the model file back into a sklearn model
model = joblib.load(model_path)
logging.info("Init complete")
def run(raw_data):
"""
This function is called for every invocation of the endpoint to perform the actual scoring/prediction.
In the example we extract the data from the json input and call the scikit-learn model's predict()
method and return the result back
"""
logging.info("model 1: request received")
data = json.loads(raw_data)["data"]
data = numpy.array(data)
result = model.predict(data)
logging.info("Request processed")
return result.tolist()
init()
関数は、コンテナーが初期化または起動された時に呼び出されます。 初期化は、通常、デプロイが作成または更新された直後に実行されます。 init
関数は、モデルをメモリにキャッシュするなど (この score.py ファイル内で示されている)、グローバルな初期化操作のロジックを記述する場所です。
run()
関数は、エンドポイントが呼び出されるたびに呼び出され、実際のスコアリングと予測を実行します。 この score.py ファイル内では、run()
関数で、 JSON 入力からデータを抽出し、scikit-learn モデルの predict()
メソッドを呼び出してから、予測結果を返しています。
ローカル エンドポイントを使ってデプロイしローカルでデバッグする
Azure にデプロイする前にローカルでエンドポイントをテスト実行してコードと構成を検証しデバッグすることをお勧めします 。 Azure CLI と Python SDK ではローカルのエンドポイントとデプロイがサポートされていますが、Azure Machine Learning スタジオと ARM テンプレートではサポートされていません。
ローカルにデプロイするには、Docker エンジン をインストールして実行する必要があります。 通常、Docker エンジンは、コンピューターの起動時に起動します。 起動しない場合は、Docker エンジンをトラブルシューティング します。
Azure にデプロイする前にオンライン エンドポイントをローカルでデバッグする方法について詳しくは、「オンライン エンドポイントのデバッグ 」をご覧ください。
モデルをローカルにデプロイする
最初にエンドポイントを作成します。 必要に応じて、ローカル エンドポイントの場合は、この手順をスキップして直接デプロイを作成し (次の手順)、これにより必要なメタデータを作成します。 モデルをローカル環境にデプロイすると、開発とテストに役立ちます。
az ml online-endpoint create --local -n $ENDPOINT_NAME -f endpoints/online/managed/sample/endpoint.yml
ml_client.online_endpoints.begin_create_or_update(endpoint, local=True)
スタジオでは、ローカル エンドポイントはサポートされていません。 エンドポイントをローカルでテストするための手順については、[Azure CLI] または [Python] タブを参照してください。
このテンプレートは、ローカル エンドポイントをサポートしていません。 エンドポイントをローカルでテストするための手順については、[Azure CLI] または [Python] タブを参照してください。
ここで、エンドポイントの下に blue
という名前のデプロイを作成します。
az ml online-deployment create --local -n blue --endpoint $ENDPOINT_NAME -f endpoints/online/managed/sample/blue-deployment.yml
--local
フラグは、エンドポイントを Docker 環境にデプロイするよう CLI に命令するものです。
ml_client.online_deployments.begin_create_or_update(
deployment=blue_deployment, local=True
)
local=True
フラグは、エンドポイントを Docker 環境にデプロイするよう SDK に指示します。
スタジオでは、ローカル エンドポイントはサポートされていません。 エンドポイントをローカルでテストするための手順については、[Azure CLI] または [Python] タブを参照してください。
このテンプレートは、ローカル エンドポイントをサポートしていません。 エンドポイントをローカルでテストするための手順については、[Azure CLI] または [Python] タブを参照してください。
ローカル デプロイが成功したかどうかを確認する
デプロイ状態を調べて、エラーなしでモデルがデプロイされたかどうかを確認します。
az ml online-endpoint show -n $ENDPOINT_NAME --local
出力は次の JSON のようになります。 provisioning_state
は Succeeded
です。
{
"auth_mode": "key",
"location": "local",
"name": "docs-endpoint",
"properties": {},
"provisioning_state": "Succeeded",
"scoring_uri": "http://localhost:49158/score",
"tags": {},
"traffic": {}
}
ml_client.online_endpoints.get(name=endpoint_name, local=True)
このメソッドからは、ManagedOnlineEndpoint
エンティティ が返されます。 provisioning_state
は Succeeded
です。
ManagedOnlineEndpoint({'public_network_access': None, 'provisioning_state': 'Succeeded', 'scoring_uri': 'http://localhost:49158/score', 'swagger_uri': None, 'name': 'endpt-10061534497697', 'description': 'this is a sample endpoint', 'tags': {}, 'properties': {}, 'id': None, 'Resource__source_path': None, 'base_path': '/path/to/your/working/directory', 'creation_context': None, 'serialize': <msrest.serialization.Serializer object at 0x7ffb781bccd0>, 'auth_mode': 'key', 'location': 'local', 'identity': None, 'traffic': {}, 'mirror_traffic': {}, 'kind': None})
スタジオでは、ローカル エンドポイントはサポートされていません。 エンドポイントをローカルでテストするための手順については、[Azure CLI] または [Python] タブを参照してください。
このテンプレートは、ローカル エンドポイントをサポートしていません。 エンドポイントをローカルでテストするための手順については、[Azure CLI] または [Python] タブを参照してください。
次の表は、provisioning_state
に指定できる値です。
Value
説明
作成
リソースを作成しています。
更新中
リソースを更新しています。
削除中
リソースは削除中です。
Succeeded
作成/更新操作が成功しました。
Failed
作成/更新/削除操作が失敗しました。
ローカル エンドポイントを呼び出し、モデルを使用してデータをスコアリングする
エンドポイントを呼び出してモデルをスコアリングするには、invoke
コマンドを使い、JSON ファイルに格納されているクエリ パラメーターを渡します。
az ml online-endpoint invoke --local --name $ENDPOINT_NAME --request-file endpoints/online/model-1/sample-request.json
REST クライアント (curl など) を使用する場合は、スコアリング URI が必要です。 スコアリング URI を取得するには、az ml online-endpoint show --local -n $ENDPOINT_NAME
を実行します。 返された値で、scoring_uri
属性を探します。
エンドポイントを呼び出してモデルをスコアリングするには、invoke
コマンドを使い、JSON ファイルに格納されているクエリ パラメーターを渡します。
ml_client.online_endpoints.invoke(
endpoint_name=endpoint_name,
request_file="../model-1/sample-request.json",
local=True,
)
REST クライアント (curl など) を使用する場合は、スコアリング URI が必要です。 スコアリング URI を取得するには、次のコードを実行します。 返された値で、scoring_uri
属性を探します。
endpoint = ml_client.online_endpoints.get(endpoint_name, local=True)
scoring_uri = endpoint.scoring_uri
スタジオでは、ローカル エンドポイントはサポートされていません。 エンドポイントをローカルでテストするための手順については、[Azure CLI] または [Python] タブを参照してください。
このテンプレートは、ローカル エンドポイントをサポートしていません。 エンドポイントをローカルでテストするための手順については、[Azure CLI] または [Python] タブを参照してください。
呼び出し操作からの出力をログで確認する
例の score.py ファイルでは、run()
メソッドがいくつかの出力をコンソールにログしています。
この出力は、get-logs
コマンドを使って確認できます。
az ml online-deployment get-logs --local -n blue --endpoint $ENDPOINT_NAME
この出力は、get_logs
メソッドを使って確認できます。
ml_client.online_deployments.get_logs(
name="blue", endpoint_name=endpoint_name, local=True, lines=50
)
スタジオでは、ローカル エンドポイントはサポートされていません。 エンドポイントをローカルでテストするための手順については、[Azure CLI] または [Python] タブを参照してください。
このテンプレートは、ローカル エンドポイントをサポートしていません。 エンドポイントをローカルでテストするための手順については、[Azure CLI] または [Python] タブを参照してください。
オンライン エンドポイントを Azure にデプロイする
次に、オンライン エンドポイントを Azure にデプロイする 運用環境の場合のベスト プラクティスとして、デプロイで使うモデルと環境を登録することをお勧めします。
モデルと環境を登録する
登録済みの名前とバージョンをデプロイの間に指定できるように、Azure にデプロイする前にモデルと環境を登録することをお勧めします。 資産を登録すると、それらをデプロイ作成のたびにアップロードする必要なく再使用できるようになるため、再現性と追跡可能性が向上します。
Note
Azure へのデプロイとは異なり、ローカル デプロイでは、登録済みのモデルと環境の使用はサポートされていません。 代わりに、ローカル デプロイでは、ローカル モデル ファイルが使われ、ローカル ファイルのみを含む環境が使われます。
Azure へのデプロイの場合は、ローカル資産か登録済み資産 (モデルと環境) のどちらかを使うことができます。 この記事のこの項では、Azure へのデプロイで登録済み資産を使っていますが、代わりにローカル資産を使うこともできます。 ローカル デプロイの場合の使用するローカル ファイルをアップロードするデプロイ構成の例は、「デプロイを構成する 」をご覧ください。
モデルと環境を登録するには、model: azureml:my-model:1
または environment: azureml:my-env:1
という形式を使います。
登録するためには、model
と environment
の YAML 定義を別々の YAML ファイルに抽出し、az ml model create
コマンドと az ml environment create
コマンドを使用します。 これらのコマンドの詳細については、az ml model create -h
と az ml environment create -h
を実行してください。
モデルの YAML 定義を作成します。
$schema: https://azuremlschemas.azureedge.net/latest/model.schema.json
name: my-model
path: ../../model-1/model/
モデルを登録します。
az ml model create -n my-model -v 1 -f ./model.yaml
環境の YAML 定義を作成します。
$schema: https://azuremlschemas.azureedge.net/latest/environment.schema.json
name: my-env
image: mcr.microsoft.com/azureml/openmpi4.1.0-ubuntu20.04:latest
conda_file: ../../model-1/environment/conda.yaml
環境を登録します。
az ml environment create -n my-env -v 1 -f ./environment.yaml
モデルを資産として登録する方法の詳細については、「CLI を使用して、Machine Learning でモデルを資産として登録する 」を参照してください。 環境の作成の詳細については、「CLI および SDK (v2) を使用した Azure Machine Learning 環境の管理 」を参照してください。
モデルを登録する
from azure.ai.ml.entities import Model
from azure.ai.ml.constants import AssetTypes
file_model = Model(
path="../../model-1/model/",
type=AssetTypes.CUSTOM_MODEL,
name="my-model",
description="Model created from local file.",
)
ml_client.models.create_or_update(file_model)
環境を登録します。
from azure.ai.ml.entities import Environment
env_docker_conda = Environment(
image="mcr.microsoft.com/azureml/openmpi4.1.0-ubuntu20.04",
conda_file="../../model-1/environment/conda.yaml",
name="my-env",
description="Environment created from a Docker image plus Conda environment.",
)
ml_client.environments.create_or_update(env_docker_conda)
モデルを資産として登録してデプロイの間にその登録済みの名前とバージョンを指定できるようにする方法については、「SDK を使用して、Machine Learning でモデルを資産として登録する 」をご覧ください。
環境を作成する方法の詳細については、「CLI & SDK (v2) を使用して Azure Machine Learning 環境を管理する 」を参照してください。
モデルを登録する
モデルの登録は、ワークスペース内の論理エンティティであり、単一のモデル ファイル、または複数ファイルのディレクトリを含めることができます。 運用におけるベスト プラクティスとして、モデルと環境を登録することをお勧めします。 この記事にあるエンドポイントとデプロイを作成する前に、モデルを含むモデル フォルダー を登録する必要があります。
サンプル モデルを登録するには、次の手順に従います。
Azure Machine Learning Studio に移動します。
左側のナビゲーション バーで、 [モデル] ページを選択します。
[登録] を選択し、次に [ローカル ファイルから] を選択します。
[Model type] (モデルの種類) で [Unspecified 型] を選択します。
[参照] を選択し、[フォルダーの参照] を選択します。
先ほど複製またはダウンロードしたリポジトリのローカル コピーから、\azureml-examples\cli\endpoints\online\model-1\model
フォルダーを選択します。 ダイアログが表示されたら、[アップロード] を選択し、アップロードが完了するまで待ちます。
フォルダーのアップロードが完了したら、[次へ] を選択します。
モデルのフレンドリ名 を入力します。 この記事の手順では、モデルの名前が model-1
であることを前提としています。
[次へ] 、[登録] の順に選び、登録を完了します。
登録済みモデルの操作の詳細については、モデルの登録と操作 に関する記事を参照してください。
環境を作成して登録する
左側のナビゲーション バーで、[エンドポイント] ページを選択します。
[作成] を選択します
[設定] ページで、環境の名前 (my-env
など) を指定します。
[環境ソースの選択] で、[オプションの Conda ファイルとともに既存の Docker イメージを使用する] を選択します。
[次へ] を選択して [カスタマイズ] ページに進みます。
前に複製またはダウンロードしたリポジトリのローカル コピーから \azureml-examples\cli\endpoints\online\model-1\environment\conda.yaml
ファイルの内容をコピーします。
その内容をテキスト ボックスに貼り付けます。
[確認] ページが表示されるまで [次へ] を選択します。
[作成] を選択します。
スタジオで環境を作成する方法について詳しくは、「環境の作成 」をご覧ください。
テンプレートを使用してモデルを登録するには、まず Azure BLOB ストアにモデル ファイルをアップロードする必要があります。 次の例では、az storage blob upload-batch
コマンドを使用して、ワークスペースの既定のストレージにファイルをアップロードします。
az storage blob upload-batch -d $AZUREML_DEFAULT_CONTAINER/model -s cli/endpoints/online/model-1/model --account-name $AZURE_STORAGE_ACCOUNT
ファイルをアップロードしたら、テンプレートを使用してモデルの登録を作成します。 次の例では、modelUri
パラメーターにモデルへのパスが含まれています。
az deployment group create -g $RESOURCE_GROUP \
--template-file arm-templates/model-version.json \
--parameters \
workspaceName=$WORKSPACE \
modelAssetName="sklearn" \
modelUri="azureml://subscriptions/$SUBSCRIPTION_ID/resourceGroups/$RESOURCE_GROUP/workspaces/$WORKSPACE/datastores/$AZUREML_DEFAULT_DATASTORE/paths/model/sklearn_regression_model.pkl"
環境の一部は、モデルをホストするために必要なモデルの依存関係を指定する conda ファイルです。 次の例は、conda ファイルの内容を環境変数に読み取る方法を示しています。
CONDA_FILE=$(cat cli/endpoints/online/model-1/environment/conda.yaml)
次の例は、テンプレートを使用して環境を登録する方法を示しています。 前の手順の conda ファイルの内容が condaFile
パラメーターを使用してテンプレートに渡されます。
ENV_VERSION=$RANDOM
az deployment group create -g $RESOURCE_GROUP \
--template-file arm-templates/environment-version.json \
--parameters \
workspaceName=$WORKSPACE \
environmentAssetName=sklearn-env \
environmentAssetVersion=$ENV_VERSION \
dockerImage=mcr.microsoft.com/azureml/openmpi3.1.2-ubuntu18.04:20210727.v1 \
condaFile="$CONDA_FILE"
デプロイ構成では、デプロイする登録済みモデルと、登録済み環境が使われます。
デプロイ定義で登録済み資産 (モデルと環境) を使います。 次のスニペットでは、デプロイを構成するのに必要な入力内容がすべて指定されている endpoints/online/managed/sample/blue-deployment-with-registered-assets.yml
ファイルを示しています。
blue-deployment-with-registered-assets.yml
$schema: https://azuremlschemas.azureedge.net/latest/managedOnlineDeployment.schema.json
name: blue
endpoint_name: my-endpoint
model: azureml:my-model:1
code_configuration:
code: ../../model-1/onlinescoring/
scoring_script: score.py
environment: azureml:my-env:1
instance_type: Standard_DS3_v2
instance_count: 1
デプロイを構成するには、登録済みのモデルと環境を使います。
model = "azureml:my-model:1"
env = "azureml:my-env:1"
blue_deployment_with_registered_assets = ManagedOnlineDeployment(
name="blue",
endpoint_name=endpoint_name,
model=model,
environment=env,
code_configuration=CodeConfiguration(
code="../model-1/onlinescoring", scoring_script="score.py"
),
instance_type="Standard_DS3_v2",
instance_count=1,
)
スタジオからデプロイする場合は、エンドポイントと、それに追加するデプロイを作成します。 その時点で、エンドポイントとデプロイの名前を指定するようにダイアログが表示されます。
CPU と GPU の異なるインスタンス タイプおよびイメージを使用する
ローカル デプロイの場合も Azure へのデプロイの場合も、デプロイ定義で、CPU または GPU のインスタンス種類とイメージを指定できます。
blue-deployment-with-registered-assets.yml ファイル内のデプロイ定義では、汎用型の Standard_DS3_v2
インスタンスと非 GPU Docker イメージ mcr.microsoft.com/azureml/openmpi4.1.0-ubuntu20.04:latest
が使われています。 GPU コンピューティングの場合は、GPU コンピューティング タイプの SKU と GPU の Docker イメージを選択します。
サポートされる汎用タイプと GPU インスタンス タイプについては、マネージド オンライン エンドポイントでサポートされる VM SKU に関するページを参照してください。 Azure Machine Learning CPU と GPU の基本イメージの一覧については、「Azure Machine Learning 基本イメージ 」を参照してください。
ローカル デプロイの場合も Azure へのデプロイの場合も、デプロイ構成で、CPU または GPU のインスタンス種類とイメージを指定できます。
先ほどは、汎用型の Standard_DS3_v2
インスタンスと非 GPU Docker イメージmcr.microsoft.com/azureml/openmpi4.1.0-ubuntu20.04:latest
を使ったデプロイを構成しました。 GPU コンピューティングの場合は、GPU コンピューティング タイプの SKU と GPU の Docker イメージを選択します。
サポートされる汎用タイプと GPU インスタンス タイプについては、マネージド オンライン エンドポイントでサポートされる VM SKU に関するページを参照してください。 Azure Machine Learning CPU と GPU の基本イメージの一覧については、「Azure Machine Learning 基本イメージ 」を参照してください。
上記の環境の登録では、dockerImage
パラメーターを使用して environment-version.json
テンプレートに値を渡すことによって、非 GPU Docker イメージ mcr.microsoft.com/azureml/openmpi3.1.2-ubuntu18.04
を指定しています。 GPU コンピューティングの場合は、(dockerImage
パラメーターを使用して) GPU Docker イメージの値をテンプレートに指定し、(skuName
パラメーターを使用して) GPU コンピューティング タイプ SKU を online-endpoint-deployment.json
テンプレートに指定します。
サポートされる汎用タイプと GPU インスタンス タイプについては、マネージド オンライン エンドポイントでサポートされる VM SKU に関するページを参照してください。 Azure Machine Learning CPU と GPU の基本イメージの一覧については、「Azure Machine Learning 基本イメージ 」を参照してください。
次に、オンライン エンドポイントを Azure にデプロイする
Deploy to Azure (Azure へのデプロイ)
Azure クラウドにエンドポイントを作成します。
az ml online-endpoint create --name $ENDPOINT_NAME -f endpoints/online/managed/sample/endpoint.yml
エンドポイントの下に blue
という名前のデプロイを作成します。
az ml online-deployment create --name blue --endpoint $ENDPOINT_NAME -f endpoints/online/managed/sample/blue-deployment-with-registered-assets.yml --all-traffic
デプロイ作成では、基になる環境やイメージを初めて構築しているかどうかによって、最長で 15 分かかる可能性があります。 同じ環境を使う後続のデプロイは、より迅速に処理されます。
ヒント
CLI コンソールをブロックしたくない場合は、コマンドに --no-wait
フラグを追加してください。 ただし、このオプションを使うと、デプロイ状態が対話的に表示されなくなります。
重要
デプロイの作成に使われるコード az ml online-deployment create
で --all-traffic
フラグを指定すると、新規作成されたブルー デプロイにエンドポイント トラフィックの 100% が割り当てられるようになります。 これは開発環境とテスト環境では役立ちますが、運用環境では、明示的なコマンドによって新しいデプロイにトラフィックをルーティングする必要がある場合があります。 たとえば、az ml online-endpoint update -n $ENDPOINT_NAME --traffic "blue=100"
のようにします。
エンドポイントを作成します。
前に定義した endpoint
と前に作成した MLClient
を使って、ワークスペースにエンドポイントを作成できるようになりました。 このコマンドでは、エンドポイントの作成を開始し、エンドポイントの作成が続行されている間に確認応答を返します。
ml_client.online_endpoints.begin_create_or_update(endpoint)
デプロイを作成します。
前に定義した blue_deployment_with_registered_assets
と前に作成した MLClient
を使って、ワークスペースにデプロイを作成できるようになりました。 このコマンドでは、デプロイの作成を開始し、デプロイの作成が続行されている間に確認応答を返します。
ml_client.online_deployments.begin_create_or_update(blue_deployment_with_registered_assets)
ヒント
Python コンソールをブロックしないようにする場合は、パラメーターにフラグ no_wait=True
を追加できます。 ただし、このオプションを使うと、デプロイ状態が対話的に表示されなくなります。
# blue deployment takes 100 traffic
endpoint.traffic = {"blue": 100}
ml_client.online_endpoints.begin_create_or_update(endpoint)
マネージド オンライン エンドポイントとデプロイを作成する
スタジオを使用して、マネージド オンライン エンドポイント をブラウザーで直接作成します。 スタジオでマネージド オンライン エンドポイントを作成する場合は、初期デプロイを定義する必要があります。 空のマネージド オンライン エンドポイントを作成することはできません。
スタジオでマネージド オンライン エンドポイントを作成する方法の 1 つは、[モデル] ページからの作成です。 この方法は、既存のマネージド オンライン デプロイにモデルを追加するための簡単な方法でもあります。 以前に「モデルと環境を登録する 」の項で登録した model-1
という名前のモデルをデプロイするには、次のようにします。
Azure Machine Learning Studio に移動します。
左側のナビゲーション バーで、 [モデル] ページを選択します。
モデル名の横にある円にチェックを付けて、model-1
という名前のモデルを選択します。
[デプロイ] >[リアルタイム エンドポイント] を選択します。
このアクションによって開いたウィンドウで、エンドポイントに関する詳細を指定できます。
Azure リージョンでの一意のエンドポイント名 を入力します。 名前付け規則の詳細については、「エンドポイントの制限 」を参照してください。
既定の選択内容 (コンピューティングの種類が [マネージド] ) のままにします。
既定の選択内容 (認証の種類が [キーベースの認証] ) のままにします。 認証の詳細については、オンライン エンドポイントのクライアントを認証する に関する記事を参照してください。
[デプロイメント] ページが表示されるまで、[次へ] を選択します。 ここでは、Application Insights の診断 を [有効] に切り替えて、後でスタジオでエンドポイントのアクティビティのグラフを表示し、Application Insights を使用してメトリックとログを分析できるようにします。
[次へ] を選択して、[コード + 環境] ページに進みます。 ここでは、次のオプションを選択します。
推論用のスコアリング スクリプトを選択: 前に複製またはダウンロードしたリポジトリから \azureml-examples\cli\endpoints\online\model-1\onlinescoring\score.py
ファイルを参照して選択します。
[環境の選択] セクション: [カスタム環境] を選択してから、前に作成したmy-env:1 環境を選択します。
デプロイの作成を求めるプロンプトが表示されるまで、[次へ] を選び、既定値をそのまま使用します。
デプロイの設定をレビューして、[作成] ボタンを選択します。
あるいは、スタジオの [エンドポイント] ページでマネージド オンライン エンドポイントを作成することもできます。
Azure Machine Learning Studio に移動します。
左側のナビゲーション バーで、 [エンドポイント] ページを選択します。
[+ 作成] を選択します。
このアクションにより、モデルを選択しエンドポイントとデプロイに関する詳細を指定するためのウィンドウが開かれます。 前に説明したとおりにエンドポイントとデプロイの設定を入力してから、デプロイを作成 します。
テンプレートを使ってオンライン エンドポイントを作成するには:
az deployment group create -g $RESOURCE_GROUP \
--template-file arm-templates/online-endpoint.json \
--parameters \
workspaceName=$WORKSPACE \
onlineEndpointName=$ENDPOINT_NAME \
identityType=SystemAssigned \
authMode=AMLToken \
location=$LOCATION
エンドポイントが作成された後に、エンドポイントにモデルをデプロイします。
resourceScope="/subscriptions/$SUBSCRIPTION_ID/resourceGroups/$RESOURCE_GROUP/providers/Microsoft.MachineLearningServices"
az deployment group create -g $RESOURCE_GROUP \
--template-file arm-templates/online-endpoint-deployment.json \
--parameters \
workspaceName=$WORKSPACE \
location=$LOCATION \
onlineEndpointName=$ENDPOINT_NAME \
onlineDeploymentName=blue \
codeId="$resourceScope/workspaces/$WORKSPACE/codes/score-sklearn/versions/1" \
scoringScript=score.py \
environmentId="$resourceScope/workspaces/$WORKSPACE/environments/sklearn-env/versions/$ENV_VERSION" \
model="$resourceScope/workspaces/$WORKSPACE/models/sklearn/versions/1" \
endpointComputeType=Managed \
skuName=Standard_F2s_v2 \
skuCapacity=1
デプロイでのエラーをデバッグするには、「オンライン エンドポイントのデプロイとスコアリングのトラブルシューティング 」をご覧ください。
エンドポイントの状態を確認する
show
コマンドを使って、エンドポイントとデプロイについて provisioning_state
に情報を表示します。
az ml online-endpoint show -n $ENDPOINT_NAME
list
コマンドを使って、ワークスペース内のすべてのエンドポイントを表形式で一覧表示します。
az ml online-endpoint list --output table
エンドポイントの状態を調べて、エラーなしでモデルがデプロイされたかどうかを確認します。
ml_client.online_endpoints.get(name=endpoint_name)
list
メソッドを使って、ワークスペース内のすべてのエンドポイントを表形式で一覧表示します。
for endpoint in ml_client.online_endpoints.list():
print(endpoint.name)
このメソッドは、ManagedOnlineEndpoint
エンティティのリスト (列挙子) を返します。
その他の情報を取得するには、さらに パラメーター を指定します。 たとえば、エンドポイントの一覧をテーブルのように出力します。
print("Kind\tLocation\tName")
print("-------\t----------\t------------------------")
for endpoint in ml_client.online_endpoints.list():
print(f"{endpoint.kind}\t{endpoint.location}\t{endpoint.name}")
マネージド オンライン エンドポイントを表示する
すべてのマネージド オンライン エンドポイントを [エンドポイント] ページで確認できます。 エンドポイントの [詳細] ページに移動し、エンドポイント URI、状態、テスト ツール、アクティビティ モニター、デプロイ ログ、サンプル使用コードなどの重要な情報を見つけます。
左側のナビゲーション バーで、 [エンドポイント] を選択します。 ここでは、ワークスペース内のすべてのエンドポイントのリストを確認できます。
(省略可能) マネージド コンピューティングの種類のみを表示するために、 [コンピューティングの種類] に対してフィルター を作成します。
エンドポイント名を選択して、エンドポイントの [詳細] ページを表示します。
ヒント
テンプレートは、リソースのデプロイに役立ちますが、リソースの一覧表示、表示、または呼び出しには使用できません。 これらの操作を実行するには、Azure CLI、Python SDK、またはスタジオを使用します。 次のコードでは、Azure CLI を使用しています。
show
コマンドを使って、エンドポイントとデプロイについて provisioning_state
に情報を表示します。
az ml online-endpoint show -n $ENDPOINT_NAME
list
コマンドを使って、ワークスペース内のすべてのエンドポイントを表形式で一覧表示します。
az ml online-endpoint list --output table
オンライン デプロイの状態を確認する
ログを調べて、モデルがエラーなしでデプロイされたかどうかを確認します。
コンテナーからのログ出力を表示するには、次の CLI コマンドを使用します。
az ml online-deployment get-logs --name blue --endpoint $ENDPOINT_NAME
既定では、ログは推論サーバー コンテナーからプルされます。 ストレージ初期化子コンテナーのログを表示するには、--container storage-initializer
フラグを追加します。 デプロイのログについて詳しくは、「コンテナー ログを取得する 」をご覧ください。
get_logs
メソッドを使ってログ出力を表示できます。
ml_client.online_deployments.get_logs(
name="blue", endpoint_name=endpoint_name, lines=50
)
既定では、ログは推論サーバー コンテナーからプルされます。 ストレージ初期化子コンテナーのログを表示するには、container_type="storage-initializer"
オプションを追加します。 デプロイのログについて詳しくは、「コンテナー ログを取得する 」をご覧ください。
ml_client.online_deployments.get_logs(
name="blue", endpoint_name=endpoint_name, lines=50, container_type="storage-initializer"
)
ログ出力を表示するには、エンドポイントのページから [ログ] タブを選択します。 エンドポイントに複数のデプロイがある場合は、ドロップダウンを使用して、ログを表示するデプロイを選択します。
既定では、ログは推論サーバーからプルされます。 ストレージ初期化子コンテナーのログを表示するには、Azure CLI または Python SDK を使用します (詳細については、各タブを参照してください)。 ストレージ初期化子コンテナーからのログでは、コードとモデル データがコンテナーに正常にダウンロードされたかどうかに関する情報が提供されます。 デプロイのログについて詳しくは、「コンテナー ログを取得する 」をご覧ください。
ヒント
テンプレートは、リソースのデプロイに役立ちますが、リソースの一覧表示、表示、または呼び出しには使用できません。 これらの操作を実行するには、Azure CLI、Python SDK、またはスタジオを使用します。 次のコードでは、Azure CLI を使用しています。
コンテナーからのログ出力を表示するには、次の CLI コマンドを使用します。
az ml online-deployment get-logs --name blue --endpoint $ENDPOINT_NAME
既定では、ログは推論サーバー コンテナーからプルされます。 ストレージ初期化子コンテナーのログを表示するには、--container storage-initializer
フラグを追加します。 デプロイのログについて詳しくは、「コンテナー ログを取得する 」をご覧ください。
エンドポイントを呼び出し、モデルを使用してデータをスコアリングする
invoke
コマンドか任意の REST クライアントを使ってエンドポイントを呼び出しデータをスコアリングします。
az ml online-endpoint invoke --name $ENDPOINT_NAME --request-file endpoints/online/model-1/sample-request.json
エンドポイントに対する認証に使うキーを取得します。
ヒント
認証キーを取得できる Microsoft Entra セキュリティ プリンシパルは、Microsoft.MachineLearningServices/workspaces/onlineEndpoints/token/action
と Microsoft.MachineLearningServices/workspaces/onlineEndpoints/listkeys/action
を許可するカスタム ロールにそれを割り当てることで制御できます。 ワークスペースに対する認可の管理について詳しくは、「Azure Machine Learning ワークスペースへのアクセスの管理 」をご覧ください。
ENDPOINT_KEY=$(az ml online-endpoint get-credentials -n $ENDPOINT_NAME -o tsv --query primaryKey)
curl を使ってデータをスコアリングします。
SCORING_URI=$(az ml online-endpoint show -n $ENDPOINT_NAME -o tsv --query scoring_uri)
curl --request POST "$SCORING_URI" --header "Authorization: Bearer $ENDPOINT_KEY" --header 'Content-Type: application/json' --data @endpoints/online/model-1/sample-request.json
show
コマンドと get-credentials
コマンドを使って認証資格情報を取得していることに注目してください。 また、--query
フラグを使って必要な属性のみをフィルターしていることに注目してください。 --query
フラグについて詳しくは、Azure CLI コマンドの出力に対するクエリ に関する記事をご覧ください。
起動ログを表示するには、再度 get-logs
を実行します。
先ほど作成した MLClient
を使用して、エンドポイントへのハンドルを取得します。 エンドポイントは、その後、次のパラメーターを指定して invoke
コマンドを使って呼び出すことができます。
endpoint_name
- エンドポイントの名前
request_file
- 要求データを含むファイル
deployment_name
- エンドポイント内のテストする特定のデプロイの名前
json ファイルを使ってサンプル要求を送信します。
# test the blue deployment with some sample data
ml_client.online_endpoints.invoke(
endpoint_name=endpoint_name,
deployment_name="blue",
request_file="../model-1/sample-request.json",
)
エンドポイントの詳細ページの [テスト] タブを使用して、マネージド オンライン デプロイをテストします。 サンプル入力を入力し、結果を表示します。
エンドポイントの詳細ページの [テスト] タブを選択します。
ドロップダウンを使用して、テストするデプロイを選択します。
入力サンプル を入力します。
[Test] を選択します。
ヒント
テンプレートは、リソースのデプロイに役立ちますが、リソースの一覧表示、表示、または呼び出しには使用できません。 これらの操作を実行するには、Azure CLI、Python SDK、またはスタジオを使用します。 次のコードでは、Azure CLI を使用しています。
invoke
コマンドか任意の REST クライアントを使ってエンドポイントを呼び出しデータをスコアリングします。
az ml online-endpoint invoke --name $ENDPOINT_NAME --request-file cli/endpoints/online/model-1/sample-request.json
(省略可能) デプロイを更新する
コード、モデル、または環境を更新する場合は、YAML ファイルを更新し、次に az ml online-endpoint update
コマンドを実行します。
注意
単一の update
コマンドでインスタンス数 (デプロイをスケーリングするため) と他のモデル設定 (コード、モデル、環境など) を更新する場合、最初にスケーリング操作が実行され、その後に他の更新が適用されます。 運用環境では、これらの操作を個別に実行することをお勧めします。
update
の動作を理解するには:
ファイル online/model-1/onlinescoring/score.py を開きます。
init()
関数の最後の行を変更します。logging.info("Init complete")
の後に、logging.info("Updated successfully")
を追加してください。
ファイルを保存します。
次のコマンドを実行します。
az ml online-deployment update -n blue --endpoint $ENDPOINT_NAME -f endpoints/online/managed/sample/blue-deployment-with-registered-assets.yml
注意
YAML を使用した更新は宣言型です。 つまり YAML の変更は、基になる Azure Resource Manager リソース (エンドポイントとデプロイ) に反映されます。 この宣言型アプローチによって GitOps が促進されます。つまり、エンドポイントとデプロイに対する "すべて " の変更は YAML を経由することになります (instance_count
も含む)。
ヒント
--set
パラメーターなどの汎用更新パラメーター を CLI の update
コマンドで使用すると、YAML 内の属性をオーバーライドしたり、"あるいは" 特定の属性を YAML ファイルに渡さずに設定したりできます。 個別の属性に対する --set
の使用は、特に開発およびテストのシナリオで利便性を発揮します。 たとえば、最初のデプロイの instance_count
値をスケールアップするのであれば、--set instance_count=2
フラグを使用できます。 ただし、YAML が更新されないため、この手法に GitOps を促進する効果はありません。
YAML ファイルの指定は必須ではありません。 たとえば、特定のデプロイに対して異なるコンカレンシー設定をテストする場合は、az ml online-deployment update -n blue -e my-endpoint --set request_settings.max_concurrent_requests_per_instance=4 environment_variables.WORKER_COUNT=4
などを試すことができます。 これにより、既存のすべての構成は保持され、指定されたパラメーターのみが更新されます。
エンドポイントの作成時または更新時に実行される init()
関数に変更を加えたため、Updated successfully
というメッセージがログに記録されます。 次を実行してログを取得します。
az ml online-deployment get-logs --name blue --endpoint $ENDPOINT_NAME
update
コマンドは、ローカル デプロイでも動作します。 同じ az ml online-deployment update
コマンドを --local
フラグと共に使用します。
コード、モデル、または環境を更新する場合は、構成を更新してから、MLClient
の online_deployments.begin_create_or_update
メソッドを実行してデプロイを作成または更新します 。
注意
単一の begin_create_or_update
メソッドでインスタンス数 (デプロイをスケーリングするため) と他のモデル設定 (コード、モデル、環境など) を更新する場合、最初にスケーリング操作が実行され、その後に他の更新が適用されます。 運用環境では、これらの操作を個別に実行することをお勧めします。
begin_create_or_update
の動作を理解するには:
ファイル online/model-1/onlinescoring/score.py を開きます。
init()
関数の最後の行を変更します。logging.info("Init complete")
の後に、logging.info("Updated successfully")
を追加してください。
ファイルを保存します。
メソッドを実行します。
ml_client.online_deployments.begin_create_or_update(blue_deployment_with_registered_assets)
エンドポイントの作成時または更新時に実行される init()
関数に変更を加えたため、Updated successfully
というメッセージがログに記録されます。 次を実行してログを取得します。
ml_client.online_deployments.get_logs(
name="blue", endpoint_name=endpoint_name, lines=50
)
begin_create_or_update
メソッドは、ローカルデプロイでも動作します。 同じメソッドと local=True
フラグを使います。
現在、スタジオでは、デプロイのインスタンス数に対してのみ更新を行うことができます。 個々のデプロイを、インスタンス数を調整してスケールアップまたはスケールダウンするには、次の手順に従います。
エンドポイントの [詳細] ページを開き、更新するデプロイのカードを見つけます。
デプロイの名前の横にある編集アイコン (鉛筆アイコン) を選択します。
デプロイに関連付けられているインスタンス数を更新します。 [Deployment scale type] (デプロイ スケールの種類) には [規定値] または [ターゲット使用率] のどちらかを選択できます。
[既定値] を選択した場合は、[インスタンス数] の数値も指定できます。
[ターゲット使用率] を選択した場合は、デプロイの自動スケーリング時にパラメーターに使用する値を指定できます。
[更新] を選択して、デプロイのインスタンス数の更新を完了します。
現在、ARM テンプレートを使用してデプロイを更新するオプションはありません。
Note
この項で示すデプロイの更新は、インプレース ローリング更新の例です。
マネージド オンライン エンドポイントの場合、デプロイは一度に 20% のノードずつ新しい構成に更新されます。 つまり、デプロイに 10 個のノードがある場合は、一度に 2 つのノードが更新されます。
Kubernetes オンライン エンドポイントの場合は、デプロイ インスタンスが新しい構成で新規作成され前のデプロイ インスタンスが削除されるということが繰り返されます。
運用環境で使用する場合は、ブルーグリーン デプロイ を検討することをお勧めします。これは、Web サービスを更新するためのより安全な代替手段を提供します。
自動スケールでは、アプリケーションの負荷を処理するために適切な量のリソースが自動的に実行されます。 マネージド オンライン エンドポイントでは、Azure Monitor 自動スケーリング機能との統合によって、自動スケーリングをサポートします。 自動スケールを構成するには、「オンライン エンドポイントを自動スケーリングする方法 」をご覧ください。
(省略可能) Azure Monitor を使用して SLA を監視する
メトリックを表示し、SLA に基づいてアラートを設定するには、オンライン エンドポイントの監視 に関するページの手順を実行します。
(省略可能) Log Analytics と統合する
CLI の get-logs
コマンドまたは SDK の get_logs
メソッドで取得できるのは、自動的に選ばれたインスタンスからのログの最後の数百行だけです。 一方、Log Analytics は、ログを永続的に保存して分析する手段となります。 ログの使用の詳細については、「オンライン エンドポイントを監視する 」を参照してください。
エンドポイントとデプロイを削除する
エンドポイントと、その基にあるデプロイすべてを削除します。
az ml online-endpoint delete --name $ENDPOINT_NAME --yes --no-wait
エンドポイントと、その基にあるデプロイすべてを削除します。
ml_client.online_endpoints.begin_delete(name=endpoint_name)
エンドポイントとデプロイを使用する予定がない場合は、削除してください。 エンドポイントを削除すると、その基にあるデプロイもすべて削除されます。
Azure Machine Learning Studio に移動します。
左側のナビゲーション バーで、 [エンドポイント] ページを選択します。
モデル名の横にある円をチェックして、エンドポイントを選択します。
[削除] を選択します。
あるいは、エンドポイントの詳細ページ で [削除] アイコンを選択して、マネージド オンライン エンドポイントを直接削除することもできます。
エンドポイントと、その基にあるデプロイすべてを削除します。
az ml online-endpoint delete --name $ENDPOINT_NAME --yes --no-wait
関連するコンテンツ