[アーティクル] 09/03/2024
6 人の共同作成者
フィードバック
この記事の内容
適用対象: Azure CLI ml extension v2 (現行) Python SDK azure-ai-ml v2 (現行)
このアーティクルでは、中断させることなく、新しいバージョンで運用環境にある機械学習モデルをデプロイする方法について学習します。 ブルーグリーン デプロイ戦略 (安全なロールアウト戦略とも呼ばれます) を使用して、新しいバージョンの Web サービスを運用環境に導入します。 この戦略により、完全にロールアウトする前に、新しいバージョンの Web サービスを少数のユーザーまたは要求にロールアウトできます。
このアーティクルでは、オンライン エンドポイント、つまりオンライン (リアルタイム) 推論に使用されるエンドポイントを使用していることを前提としています。 オンライン エンドポイントには、2 つの種類があります。マネージド オンライン エンドポイント と Kubernetes オンライン エンドポイント です。 エンドポイントの詳細、およびマネージド オンライン エンドポイントと Kubernetes オンライン エンドポイントの違いについては、「Azure Machine Learning エンドポイントとは 」をご覧ください。
このアーティクルの主な例では、デプロイにマネージド オンライン エンドポイントを使用します。 代わりに Kubernetes エンドポイントを使用する場合は、マネージド オンライン エンドポイントに関する説明に沿って本ドキュメント内に記載されている注記を参照してください。
この記事では、次の内容について説明します。
モデルのバージョン 1 を提供するために、オンライン エンドポイントと "blue" という名前のデプロイを定義する
より多くの要求を処理できるよう、ブルーのデプロイをスケーリングする
モデルのバージョン 2 ("グリーン" デプロイと呼ばれます) をエンドポイントにデプロイしますが、ライブ トラフィックなしでデプロイを送信する
グリーン デプロイを別個にテストする
ライブ トラフィックの割合をグリーンのデプロイにミラーリングして検証する
ライブ トラフィックの割合を小さく抑えてライブ トラフィックのごく一部をグリーン デプロイに送信する
すべてのライブ トラフィックをグリーン デプロイに送信する
使用されなくなった v1 ブルー デプロイを削除する
前提条件
この記事の手順に従う前に、次の前提条件が満たされていることをご確認ください。
Azure ロールベースのアクセス制御 (Azure RBAC) は、Azure Machine Learning の操作に対するアクセスを許可するために使用されます。 この記事の手順を実行するには、ユーザー アカウントに、Azure Machine Learning ワークスペースの所有者 か共同作成者 ロール、または Microsoft.MachineLearningServices/workspaces/onlineEndpoints/*
を許可するカスタム ロールを割り当てる必要があります。 詳細については、「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 の既定値を設定していない場合は、既定の設定を保存する必要があります。 サブスクリプション、ワークスペース、およびリソース グループの値を複数回渡さないようにするには、次のコードを実行します。
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-safe-rollout-online-endpoints.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-safe-rollout.ipynb ノートブックに基づいています。 それにはこの記事と同じ内容が含まれていますが、コードの順序は若干異なります。
Azure Machine Learning ワークスペースに接続する
ワークスペース は、Azure Machine Learning の最上位のリソースで、Azure Machine Learning を使用するときに作成するすべての成果物を操作するための一元的な場所を提供します。 このセクションでは、デプロイ タスクを実行するワークスペースに接続します。 手順に沿って進めるために、online-endpoints-safe-rollout.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 AML workspace
subscription_id = "<SUBSCRIPTION_ID>"
resource_group = "<RESOURCE_GROUP>"
workspace = "<AML_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 のダウンロード) を選択します。
最初のモデル model-1
のモデル フォルダー /cli/endpoints/online/model-1/model
とスコアリング スクリプト /cli/endpoints/online/model-1/onlinescoring/score.py
を見つけます。
2 つ目のモデル model-2
のモデル フォルダー /cli/endpoints/online/model-2/model
とスコアリング スクリプト /cli/endpoints/online/model-2/onlinescoring/score.py
を見つけます。
エンドポイントとデプロイを定義する
オンライン エンドポイントは、オンライン (リアルタイム) の推論に使用されます。 オンライン エンドポイントには、クライアントからデータを受信して、リアルタイムで応答を返信できる準備が整ったデプロイが含まれています。
エンドポイントを定義する
次の表は、エンドポイントを定義する際に指定する主な属性を一覧表示しています。
属性
内容
名前
必須。 エンドポイントの名前。 Azure リージョンで一意である必要があります。 名前付け規則の詳細については、「エンドポイントの制限 」を参照してください。
認証モード
エンドポイントの認証方法。 キーベースの認証 key
と Azure Machine Learning トークンベースの認証 aml_token
のどちらかを選択します。 キーには有効期限がありませんが、トークンには有効期限があります。 認証の詳細については、オンライン エンドポイントの認証 に関する記事を参照してください。
説明
エンドポイントの説明。
タグ
エンドポイントのタグのディクショナリ。
トラフィック
デプロイ間でトラフィックをルーティングする方法に関するルール。 トラフィックをキーと値のペアのディクショナリとして表します。キーはデプロイ名を表し、値はそのデプロイへのトラフィックの割合を表します。 トラフィックは、エンドポイントにデプロイが作成されている場合にのみ設定できます。 デプロイの作成後は、オンライン エンドポイントのトラフィックを更新することもできます。 ミラーリングされたトラフィックの使用方法の詳細については、「新しいデプロイにライブ トラフィックのごく一部を割り当てる 」を参照してください。
トラフィックのミラーリング
デプロイにミラーリングするライブ トラフィックの割合。 ミラーリングされたトラフィックの使用方法の詳細については、「ミラーリングされたトラフィックを使ってデプロイをテストする 」を参照してください。
エンドポイントの作成時に指定できる属性の完全なリストについては、「CLI (v2) オンライン エンドポイント YAML スキーマ 」または SDK (v2) の ManagedOnlineEndpoint クラス に関する記事を参照してください。
デプロイを定義する
デプロイ は、実際の推論を実行するモデルをホストするのに必要なリソースのセットです。 次の表は、デプロイを定義する際に指定する主な属性について説明しています。
属性
内容
名前
必須。 デプロイの名前。
エンドポイント名
必須。 デプロイの作成先となるエンドポイントの名前。
モデル
デプロイに使用するモデル。 この値は、ワークスペース内の既存のバージョン管理されたモデルへの参照またはインライン モデルの仕様のいずれかです。 この例では、回帰を行う scikit-learn モデルを使用します。
コード パス
モデルのスコアリングに使用されるすべての Python ソース コードが格納されている、ローカル開発環境上のディレクトリへのパス。 入れ子になったディレクトリとパッケージを使用できます。
スコアリング スクリプト
指定された入力要求に対してモデルを実行する Python コード。 この値には、ソース コード ディレクトリ内のスコアリング ファイルへの相対パスを指定できます。 スコアリング スクリプトは、デプロイされた Web サービスに送信されたデータを受け取り、それをモデルに渡します。 その後、スクリプトはモデルを実行して、その応答をクライアントに返します。 スコアリング スクリプトはモデルに固有のものであり、モデルが入力として期待し、出力として返すデータを理解する必要があります。 この例では、score.py ファイルがあります。 この Python コードには、init()
関数と run()
関数が含まれている必要があります。 init()
関数は、モデルの作成または更新後に呼び出されます (たとえば、モデルをメモリにキャッシュするために使用できます)。 run()
関数は、実際のスコアリングおよび予測を実行するために、エンドポイントが呼び出されるたびに呼び出されます。
環境
必須。 モデルとコードをホスティングする環境。 この値は、ワークスペース内の既存のバージョン管理された環境への参照、またはインライン環境仕様のいずれかになります。 この環境には、Conda の依存関係を持つ Docker イメージ、Dockerfile、または登録済みの環境を使用できます。
インスタンスの種類
必須。 デプロイに使用する VM サイズ。 サポートされているサイズの一覧については、マネージド オンライン エンドポイント SKU の一覧 に関するページを参照してください。
インスタンス数
必須です。 デプロイに使用するインスタンスの数。 想定されるワークロードに基づく値を指定します。 高可用性を実現するために、この値を少なくとも 3
に設定することをお勧めします。 アップグレードを実行するために 20% 余分に予約されています。 詳細については、「オンライン エンドポイントの制限 」をご覧ください。
デプロイの作成時に指定できる属性の完全なリストについては、「CLI (v2) マネージド オンライン デプロイ YAML スキーマ 」または SDK (v2) の ManagedOnlineDeployment クラス に関する記事を参照してください。
オンライン エンドポイントを作成する
最初にエンドポイントの名前を設定してから、構成します。 この記事では、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
を使用します。 最新のトークンを取得するには、az ml online-endpoint get-credentials
コマンドを使用します。
オンライン エンドポイントを作成するには。
エンドポイント名を設定します。
Unix の場合は、次のコマンドを実行します (YOUR_ENDPOINT_NAME
を、一意の名前に置き換えます)。
export ENDPOINT_NAME="<YOUR_ENDPOINT_NAME>"
重要
エンドポイント名は Azure リージョン内で一意である必要があります。 たとえば、Azure westus2
リージョンでは、my-endpoint
という名前のエンドポイントは 1 つしか使用できません。
クラウドにエンドポイントを作成します。
次のコードを実行して、endpoint.yml
ファイルを使用してエンドポイントを構成します。
az ml online-endpoint create --name $ENDPOINT_NAME -f endpoints/online/managed/sample/endpoint.yml
'ブルー' デプロイを作成する
この記事では、endpoints/online/managed/sample/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
という名前のデプロイを作成するには、次のコマンドを実行して、blue-deployment.yml
ファイルを使用して構成します。
az ml online-deployment create --name blue --endpoint-name $ENDPOINT_NAME -f endpoints/online/managed/sample/blue-deployment.yml --all-traffic
重要
az ml online-deployment create
で --all-traffic
フラグを指定すると、エンドポイント トラフィックの 100% が、新しく作成されたブルー デプロイに割り当てられます。
blue-deployment.yaml
ファイルでは、インラインで path
(ファイルのアップロード元) を指定します。 CLI によってファイルが自動的にアップロードされ、モデルと環境が登録されます。 運用環境ではベスト プラクティスとして、モデルと環境を登録し、登録する名前とバージョンを YAML で個別に指定することをお勧めします。 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
を実行してください。
モデルを資産として登録する方法の詳細については、「CLI を使用して、Machine Learning でモデルを資産として登録する 」を参照してください。 環境の作成の詳細については、「CLI および SDK (v2) を使用した Azure Machine Learning 環境の管理 」を参照してください。
オンライン エンドポイントを作成する
マネージド オンライン エンドポイントを作成するには、ManagedOnlineEndpoint
クラスを使用します。 このクラスを使用すると、ユーザーはエンドポイントの主要な要素を構成できます。
エンドポイントを構成します。
# Creating a unique endpoint name with current datetime to avoid conflicts
import random
online_endpoint_name = "endpt-moe-" + str(random.randint(0, 10000))
# create an online endpoint
endpoint = ManagedOnlineEndpoint(
name=online_endpoint_name,
description="this is a sample online endpoint",
auth_mode="key",
tags={"foo": "bar"},
)
注意
Kubernetes オンライン エンドポイントを作成するには、 KubernetesOnlineEndpoint
クラスを使用します。
エンドポイントを作成します。
ml_client.online_endpoints.begin_create_or_update(endpoint).result()
'ブルー' デプロイを作成する
マネージド オンライン エンドポイントのデプロイを作成するには、ManagedOnlineDeployment
クラスを使用します。 このクラスを使用すると、ユーザーはデプロイの主要な要素を構成できます。
次の表は、deployment
の属性について説明しています。
ブルー デプロイを構成します。
# create blue deployment
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",
)
blue_deployment = ManagedOnlineDeployment(
name="blue",
endpoint_name=online_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,
)
この例では、インラインで path
(ファイルのアップロード先) を指定します。 SDK によってファイルが自動的にアップロードされ、モデルと環境が登録されます。 運用環境でのベスト プラクティスとしては、モデルと環境を登録し、登録された名前とバージョンをコードで個別に指定する必要があります。
モデルを資産として登録する方法の詳細については、「SDK を使用して、Machine Learning でモデルを資産として登録する 」を参照してください。
環境の作成の詳細については、「CLI および SDK (v2) を使用した Azure Machine Learning 環境の管理 」を参照してください。
Note
Kubernetes オンライン エンドポイントのデプロイを作成するには、KubernetesOnlineDeployment
クラスを使用します。
デプロイを作成します。
ml_client.online_deployments.begin_create_or_update(blue_deployment).result()
# blue deployment takes 100 traffic
endpoint.traffic = {"blue": 100}
ml_client.online_endpoints.begin_create_or_update(endpoint).result()
Azure Machine Learning スタジオでマネージド オンライン エンドポイントを作成する場合は、エンドポイントの初期デプロイを定義する必要があります。 デプロイを定義する前に、ワークスペースにモデルが登録されている必要があります。 まず、デプロイに使用するモデルを登録します。
モデルを登録する
モデルの登録は、ワークスペース内の論理エンティティです。 このエンティティには、単一のモデル ファイル、または複数ファイルのディレクトリを含めることができます。 運用におけるベスト プラクティスとして、モデルと環境を登録することをお勧めします。 この記事におけるエンドポイントとデプロイの作成時には、モデルを含む model フォルダー が登録済みであることを前提としています。
サンプル モデルを登録するには、次の手順に従います。
Azure Machine Learning Studio に移動します。
左側のナビゲーション バーで、 [モデル] ページを選択します。
[登録] を選択し、次に [ローカル ファイルから] を選択します。
[Model type] (モデルの種類) で [Unspecified 型] を選択します。
[参照] を選択し、[フォルダーの参照] を選択します。
先ほど複製またはダウンロードしたリポジトリのローカル コピーから、\azureml-examples\cli\endpoints\online\model-1\model
フォルダーを選択します。 ダイアログが表示されたら、[アップロード] を選択し、アップロードが完了するまで待ちます。
フォルダーのアップロードが完了したら、[次へ] を選択します。
モデルのフレンドリ名 を入力します。 この記事の手順では、モデルの名前が model-1
であることを前提としています。
[次へ] 、[登録] の順に選び、登録を完了します。
前の手順を繰り返して、先ほど複製またはダウンロードしたリポジトリのローカル コピー内の \azureml-examples\cli\endpoints\online\model-2\model
フォルダーから model-2
を登録します。
登録済みモデルの操作の詳細については、モデルの登録と操作 に関する記事を参照してください。
スタジオで環境を作成する方法の詳細については、「環境の作成 」を参照してください。
マネージド オンライン エンドポイントと "ブルー" デプロイを作成する
Azure Machine Learning スタジオを使用して、マネージド オンライン エンドポイント をブラウザーで直接作成します。 スタジオでマネージド オンライン エンドポイントを作成する場合は、初期デプロイを定義する必要があります。 空のマネージド オンライン エンドポイントを作成することはできません。
スタジオでマネージド オンライン エンドポイントを作成する方法の 1 つは、[モデル] ページからの作成です。 この方法は、既存のマネージド オンライン デプロイにモデルを追加するための簡単な方法でもあります。 以前に「モデルの登録 」セクションで登録した model-1
という名前のモデルをデプロイするには、次のようにします。
Azure Machine Learning Studio に移動します。
左側のナビゲーション バーで、 [モデル] ページを選択します。
モデル名の横にある円にチェックを付けて、model-1
という名前のモデルを選択します。
[デプロイ] >[リアルタイム エンドポイント] を選択します。
このアクションによって開いたウィンドウで、エンドポイントに関する詳細を指定できます。
[エンドポイントの名前] を入力します。
既定の選択 (コンピューティングの種類は [管理] 、認証の種類は [キーベースの認証] ) はそのままにします。
[デプロイメント] ページが表示されるまで、[次へ] を選択します。 ここで、以下のタスクを実行します。
デプロイに "blue" という名前を付けます。
[Enable Application Insights diagnostics and data collection] (Application Insights の診断とデータ収集を有効にする) チェック ボックスをオンにして、後でスタジオでエンドポイントのアクティビティのグラフを表示できるようにします。
[次へ] を選択して、[環境] ページに進みます。 ここでは、次の手順を実行します。
[スコアリング ファイルと依存関係を選択する] ボックスで、先ほど複製またはダウンロードした \azureml-examples\cli\endpoints\online\model-1\onlinescoring\score.py
ファイルを参照して選択します。
環境一覧の上にある検索ボックスに sklearn
を入力して、AzureML-sklearn-0.24 キュレーション環境を選択します。
[次へ] を選択して、[コンピューティング] ページに進みます。 ここでは、仮想マシンについては既定の選択 "Standard_DS3_v2" をそのまま使用し、[インスタンス数] を 1 に変更します。
[次へ] を選択して、ブルー デプロイに対する既定のトラフィック割り当て (100%) を受け入れます。
デプロイの設定をレビューして、[作成] ボタンを選択します。
あるいは、スタジオの [エンドポイント] ページでマネージド オンライン エンドポイントを作成することもできます。
Azure Machine Learning Studio に移動します。
左側のナビゲーション バーで、 [エンドポイント] ページを選択します。
[+ 作成] を選択します。
このアクションにより、エンドポイントとデプロイに関する詳細を指定するためのウィンドウが開きます。 上記の手順 5 から 11 の説明に従って、エンドポイントとデプロイの設定を入力します。デプロイを作成 するダイアログが表示されるまで、既定値をそのまま使用します。
既存のデプロイを確認する
既存のデプロイを確認する方法の 1 つは、特定の入力要求に対してモデルをスコア付けできるようにエンドポイントを呼び出すことです。 CLI または Python SDK を使用してエンドポイントを呼び出すときに、受信トラフィックを受信するデプロイの名前を任意で指定できます。
Note
CLI や Python SDK とは異なり、Azure Machine Learning スタジオではエンドポイントを呼び出すときにデプロイを指定する必要があります。
デプロイ名を使用してエンドポイントを呼び出す
トラフィックを受信するデプロイの名前を使用してエンドポイントを呼び出すと、Azure Machine Learning によってエンドポイントのトラフィックが指定のデプロイに直接ルーティングされ、その出力が返されます。 CLI v2 の場合は --deployment-name
オプション、SDK v2 の場合は deployment_name
オプションを使用して、デプロイを指定できます。
デプロイを指定せずにエンドポイントを呼び出す
トラフィックを受信するデプロイを指定せずにエンドポイントを呼び出すと、Azure Machine Learning では、トラフィック制御設定に基づいてエンドポイントの受信トラフィックがエンドポイント内のデプロイにルーティングされます。
トラフィック制御設定では、受信トラフィックの指定された割合がエンドポイント内の各デプロイに割り当てられます。 たとえばトラフィック ルールで、エンドポイント内の特定のデプロイで受信トラフィックを 40% 受信するように指定している場合、Azure Machine Learning ではエンドポイントのトラフィックの 40% がそのデプロイにルーティングされます。
既存のエンドポイントとデプロイの状態は、次を実行して確認できます。
az ml online-endpoint show --name $ENDPOINT_NAME
az ml online-deployment show --name blue --endpoint $ENDPOINT_NAME
$ENDPOINT_NAME
によって識別されるエンドポイントと、blue
というデプロイが確認できます。
サンプル データを使用してエンドポイントをテストする
エンドポイントは、invoke
コマンドを使用して呼び出すことができます。 json ファイルを使用してサンプル要求を送信します。
az ml online-endpoint invoke --name $ENDPOINT_NAME --request-file endpoints/online/model-1/sample-request.json
状態を確認し、エラーなしでモデルがデプロイされたかどうかを確認します。
ml_client.online_endpoints.get(name=online_endpoint_name)
サンプル データを使用してエンドポイントをテストする
先ほど作成した MLClient
を使用して、エンドポイントへのハンドルを取得します。 エンドポイントは、次のパラメーターを指定した invoke
コマンドを使用して呼び出すことができます。
endpoint_name
- エンドポイントの名前
request_file
- 要求データを含むファイル
deployment_name
- エンドポイント内のテストする特定のデプロイの名前
json ファイルを使用してサンプル要求を送信します。
# test the blue deployment with some sample data
ml_client.online_endpoints.invoke(
endpoint_name=online_endpoint_name,
deployment_name="blue",
request_file="../model-1/sample-request.json",
)
マネージド オンライン エンドポイントを表示する
すべてのマネージド オンライン エンドポイントを [エンドポイント] ページで確認できます。 エンドポイントの [詳細] ページに移動し、エンドポイント URI、状態、テスト ツール、アクティビティ モニター、デプロイ ログ、サンプル使用コードなどの重要な情報を見つけます。
左側のナビゲーション バーで、 [エンドポイント] を選択します。 ここでは、ワークスペース内のすべてのエンドポイントのリストを確認できます。
(省略可能) マネージド コンピューティングの種類のみを表示するために、 [コンピューティングの種類] に対してフィルター を作成します。
エンドポイント名を選択して、エンドポイントの [詳細] ページを表示します。
サンプル データを使用してエンドポイントをテストする
エンドポイントの詳細ページの [テスト] タブを使用して、マネージド オンライン デプロイをテストします。 サンプル入力を入力し、結果を表示します。
エンドポイントの詳細ページの [テスト] タブを選択します。 ブルー デプロイは、ドロップダウン メニューで既に選択されています。
json ファイルからサンプル入力をコピーする
サンプル入力をテスト ボックスに貼り付けます。
[Test] を選択します。
より多くのトラフィックを処理できるように既存のデプロイをスケーリングする
オンライン エンドポイントを使用して機械学習モデルをデプロイおよびスコアリングする に関するページで説明されているデプロイでは、デプロイの yaml ファイルで instance_count
の値を 1
に設定しました。 update
コマンドを使用してスケール アウトできます。
az ml online-deployment update --name blue --endpoint-name $ENDPOINT_NAME --set instance_count=2
Note
上記のコマンドでは、--set
を使用してデプロイ構成をオーバーライドします。 または、yaml ファイルを更新し、--file
入力を使用して update
コマンドに入力 として渡します。
先ほど作成した MLClient
を使用して、デプロイへのハンドルを取得します。 デプロイは、instance_count
を増減することでスケーリングできます。
# scale the deployment
blue_deployment = ml_client.online_deployments.get(
name="blue", endpoint_name=online_endpoint_name
)
blue_deployment.instance_count = 2
ml_client.online_deployments.begin_create_or_update(blue_deployment).result()
エンドポイントの詳細を取得する
# Get the details for online endpoint
endpoint = ml_client.online_endpoints.get(name=online_endpoint_name)
# existing traffic details
print(endpoint.traffic)
# Get the scoring URI
print(endpoint.scoring_uri)
インスタンス数の調整によってデプロイをスケールアップまたはダウンするには、次の手順を使用します。
エンドポイントの [詳細] ページに移動します。 ブルー デプロイのカードを見つけます。
ブルー デプロイのカードのヘッダーにある編集アイコン を選択します。
インスタンス数を 2 に変更します。
[更新] を選択します。
新しいモデルをデプロイする (ただし、まだトラフィックは送らない)
green
という名前の新しいデプロイを作成します。
az ml online-deployment create --name green --endpoint-name $ENDPOINT_NAME -f endpoints/online/managed/sample/green-deployment.yml
green
には、まだ明示的にトラフィックを割り当てていないので、割り当てられたトラフィックはありません。 次のコマンドを使用して確認できます。
az ml online-endpoint show -n $ENDPOINT_NAME --query traffic
新しいデプロイをテストする
green
に割り当てられたトラフィックは 0% ですが、--deployment
の名前を指定して直接呼び出すことができます。
az ml online-endpoint invoke --name $ENDPOINT_NAME --deployment-name green --request-file endpoints/online/model-2/sample-request.json
トラフィック ルールを介さずに、REST クライアントを使用して直接デプロイを呼び出したい場合、azureml-model-deployment: <deployment-name>
という HTTP ヘッダーを設定します。 次のコード スニペットでは、curl
を使用してデプロイを直接呼び出します。 コード スニペットは、Unix/WSL 環境で動作する必要があります。
# get the scoring uri
SCORING_URI=$(az ml online-endpoint show -n $ENDPOINT_NAME -o tsv --query scoring_uri)
# use curl to invoke the endpoint
curl --request POST "$SCORING_URI" --header "Authorization: Bearer $ENDPOINT_KEY" --header 'Content-Type: application/json' --header "azureml-model-deployment: green" --data @endpoints/online/model-2/sample-request.json
マネージド オンライン エンドポイントの新しいデプロイを作成し、デプロイに green
という名前を付けます。
# create green deployment
model2 = Model(path="../model-2/model/sklearn_regression_model.pkl")
env2 = Environment(
conda_file="../model-2/environment/conda.yaml",
image="mcr.microsoft.com/azureml/openmpi4.1.0-ubuntu20.04",
)
green_deployment = ManagedOnlineDeployment(
name="green",
endpoint_name=online_endpoint_name,
model=model2,
environment=env2,
code_configuration=CodeConfiguration(
code="../model-2/onlinescoring", scoring_script="score.py"
),
instance_type="Standard_DS3_v2",
instance_count=1,
)
# use MLClient to create green deployment
ml_client.online_deployments.begin_create_or_update(green_deployment).result()
注意
Kubernetes オンライン エンドポイントのデプロイを作成する場合は、KubernetesOnlineDeployment
クラスを使用し、 Kubernetes クラスターで Kubernetes インスタンスの型 を指定します。
新しいデプロイをテストする
green
には 0% のトラフィックが割り当てられていますが、エンドポイントとデプロイはjson ファイルで引き続き呼び出すことができます。
ml_client.online_endpoints.invoke(
endpoint_name=online_endpoint_name,
deployment_name="green",
request_file="../model-2/sample-request.json",
)
新しいデプロイを作成してマネージド オンライン エンドポイントに追加し、そのデプロイに green
という名前を付けます。
エンドポイントの詳細ページ から以下を行います
エンドポイントの [詳細] ページで、[+ デプロイの追加] ボタンを選択します。
[Deploy a model] (モデルのデプロイ) を選択します。
[次へ] を選択して [モデル] ページに移動し、モデル model-2 を選択します。
[次へ] を選択して [デプロイメント] ページに移動し、次のタスクを実行します。
デプロイに "green" という名前を付けます。
Application Insights の診断とデータ収集を有効にします。
[次へ] を選択して、[環境] ページに進みます。 ここでは、次の手順を実行します。
[スコアリング ファイルと依存関係を選択する] ボックスで、先ほど複製またはダウンロードした \azureml-examples\cli\endpoints\online\model-2\onlinescoring\score.py
ファイルを参照して選択します。
環境一覧の上にある検索ボックスに sklearn
を入力して、AzureML-sklearn-0.24 キュレーション環境を選択します。
[次へ] を選択して、[コンピューティング] ページに進みます。 ここでは、仮想マシンについては既定の選択 "Standard_DS3_v2" をそのまま使用し、[インスタンス数] を 1 に変更します。
[次へ] を選択して、[トラフィック] ページに移動します。 ここでは、デプロイへの既定のトラフィック割り当てをそのまま使用します ("blue" にトラフィックの 100%、"green" にトラフィックの 0%)。
[次へ] を選択して、デプロイの設定を確認します。
[作成] を選択して、デプロイを作成します。
または、 [モデル] ページを使用してデプロイを追加することもできます。
左側のナビゲーション バーで、 [モデル] ページを選択します。
モデル名の横にある円をチェックして、モデルを選択します。
[デプロイ] >[リアルタイム エンドポイント] を選択します。
既存のマネージド オンライン エンドポイントにデプロイすることを選択します。
上記の手順 3 から 9 に従って、グリーン デプロイの作成を完了します。
Note
エンドポイントに新しいデプロイを追加する場合は、[トラフィック] ページでデプロイ間のトラフィックバランスを調整できます。 ただし、この時点では、デプロイへの既定のトラフィック割り当てを保持する必要があります ("blue" へのトラフィックは 100%、"green" へのトラフィックは 0% です)。
新しいデプロイをテストする
green
に割り当てられているトラフィックは 0% ですが、エンドポイントとデプロイを呼び出すことは可能です。 エンドポイントの詳細ページの [テスト] タブを使用して、マネージド オンライン デプロイをテストします。 サンプル入力を入力し、結果を表示します。
エンドポイントの詳細ページの [テスト] タブを選択します。
ドロップダウン メニューからグリーン デプロイを選択します。
json ファイルからサンプル入力をコピーします。
サンプル入力をテスト ボックスに貼り付けます。
[Test] を選択します。
ミラーリングされたトラフィックを使ってデプロイをテストする
green
デプロイをテストしたら、一定割合のライブ トラフィックをそれに "ミラーリング" (またはコピー) できます。 トラフィック ミラーリング (シャドウとも呼ばれます) を行っても、クライアントに返される結果は変わりません。要求は引き続き、100% が blue
デプロイに送られます。 ミラーリングされた一定割合のトラフィックがコピーされ、green
デプロイに送信されるため、クライアントに影響を与えずにメトリックとログを収集できます。 ミラーリングは、クライアントに影響を与えずに新しいデプロイを検証する場合に便利です。 たとえば、ミラーリングを使用して、待ち時間が許容範囲内かどうかを確認したり、HTTP エラーが発生していないかどうかを確認したりできます。 トラフィック ミラーリング/シャドウを使用した新しいデプロイのテストは、シャドウ テスト とも呼ばれます。 ミラーリングされたトラフィックを受信するデプロイ (この場合は green
デプロイ) は、"シャドウ デプロイ" と呼ばれることもあります。
ミラーリングには次の制限事項があります。
ミラーリングは、CLI (v2) (バージョン 2.4.0 以降) と Python SDK (v2) (バージョン 1.0.0 以降) でサポートされています。 以前のバージョンの CLI/SDK を使用してエンドポイントを更新すると、トラフィックのミラーリング設定が失われます。
現在、ミラーリングは、Kubernetes オンライン エンドポイントではサポートされていません。
トラフィックは、エンドポイント内の 1 つのデプロイにのみミラーリングできます。
ミラーリングできるトラフィックの最大割合は 50% です。 この制限は、エンドポイント帯域幅クォータ (既定では 5 Mbps) への影響を軽減するためのものです。割り当てられたクォータを超えると、エンドポイント帯域幅が抑えられます。 帯域幅調整の監視については、「マネージド オンライン エンドポイントを監視する 」を参照してください。
以下の動作にも注意してください。
デプロイは、ライブ トラフィックまたはミラーリングされたトラフィックのどちらかのみ (両方ではない) を受信するように構成できます。
エンドポイントを呼び出すときに、そのデプロイの名前 (シャドウ デプロイも含む) を指定して予測を返すことができます。
受信トラフィックを受信するデプロイの名前を使用してエンドポイントを呼び出すと、Azure Machine Learning によってトラフィックがシャドウ デプロイにミラーリングされません。 デプロイを指定しない場合、Azure Machine Learning は、エンドポイントに送信されたトラフィックからシャドウ デプロイにトラフィックをミラーリングします。
次は、ミラーリングされたトラフィックの 10% を受信するようにグリーン デプロイを設定します。 クライアントは、引き続きブルー デプロイからのみ予測を受け取ります。
次のコマンドは、トラフィックの 10% を green
デプロイにミラーリングします。
az ml online-endpoint update --name $ENDPOINT_NAME --mirror-traffic "green=10"
受信トラフィックを受信するデプロイを指定せずにエンドポイントを複数回呼び出すと、トラフィックのミラーリングをテストできます。
for i in {1..20} ; do
az ml online-endpoint invoke --name $ENDPOINT_NAME --request-file endpoints/online/model-1/sample-request.json
done
デプロイからのログを確認することで、トラフィックの特定の割合が green
のデプロイに送信されたことを確認できます。
az ml online-deployment get-logs --name blue --endpoint $ENDPOINT_NAME
テスト後、ミラー トラフィックを 0 に設定して、ミラーリングを無効にすることができます。
az ml online-endpoint update --name $ENDPOINT_NAME --mirror-traffic "green=0"
次のコマンドは、トラフィックの 10% を green
デプロイにミラーリングします。
endpoint.mirror_traffic = {"green": 10}
ml_client.begin_create_or_update(endpoint).result()
受信トラフィックを受信するデプロイを指定せずにエンドポイントを複数回呼び出すと、トラフィックのミラーリングをテストできます。
# You can test mirror traffic by invoking the endpoint several times
for i in range(20):
ml_client.online_endpoints.invoke(
endpoint_name=online_endpoint_name,
request_file="../model-1/sample-request.json",
)
デプロイからのログを確認することで、トラフィックの特定の割合が green
のデプロイに送信されたことを確認できます。
ml_client.online_deployments.get_logs(
name="green", endpoint_name=online_endpoint_name, lines=50
)
テスト後、ミラー トラフィックを 0 に設定して、ミラーリングを無効にすることができます。
endpoint.mirror_traffic = {"green": 0}
ml_client.begin_create_or_update(endpoint).result()
トラフィックの 10% を green
デプロイにミラーリングするには、次のようにします。
エンドポイントの [詳細] ページで、[トラフィックを更新する] を選択します。
ボタンを [ミラーリングされたトラフィックを有効にする] にスライドさせます。
[Deployment name] (デプロイ名) ドロップダウン メニューで green デプロイを選択します。
トラフィックの割り当ては、規定の 10% のままにします。
[更新] を選択します。
これで、エンドポイントの詳細ページに、green
デプロイへのミラーリングされたトラフィックの割り当てが 10% になっていることが示されます。
ミラーリングされたトラフィックをテストするには、Azure CLI または Python のタブを参照してエンドポイントを複数回呼び出します。 デプロイからのログを確認して、トラフィックの特定の割合が green
デプロイに送信されたことを確認します。 デプロイ ログには、エンドポイントの [Deployment logs] (デプロイ ログ) タブからアクセスできます。メトリックとログを使用して、ミラーリングされたトラフィックのパフォーマンスを監視することもできます。 詳しくは、「オンライン エンドポイントを監視する 」をご覧ください。
テストの後、次のようにミラーリングを無効にできます。
エンドポイントの [詳細] ページで、[トラフィックを更新する] を選択します。
[ミラーリングされたトラフィックを有効にする] の横にあるボタンをもう一度スライドさせて、ミラーリングされたトラフィックを無効にします。
[更新] を選択します。
ライブ トラフィックの小さい割合を新しいデプロイに割り当てる
green
デプロイをテストしたら、それにトラフィックのごく一部を割り当てます。
az ml online-endpoint update --name $ENDPOINT_NAME --traffic "blue=90 green=10"
green
デプロイをテストしたら、それにトラフィックのごく一部を割り当てます。
endpoint.traffic = {"blue": 90, "green": 10}
ml_client.begin_create_or_update(endpoint).result()
green
デプロイをテストしたら、それにトラフィックのごく一部を割り当てます。
エンドポイントの [詳細] ページで、[トラフィックを更新する] を選択します。
グリーン デプロイに 10%、ブルー デプロイに 90% を割り当てることで、デプロイ トラフィックを調整します。
[更新] を選択します。
ヒント
トラフィックの割合の合計が、0% (トラフィックを無効にする場合) または 100% (トラフィックを有効にする場合) のいずれかになる必要があります。
これで、green
デプロイが全ライブ トラフィックの 10% を受け取ります。 クライアントは、blue
と green
の両方のデプロイから予測を受け取ります。
すべてのトラフィックを新しいデプロイに送る
green
デプロイに問題がなければ、すべてのトラフィックをそのデプロイに切り替えます。
az ml online-endpoint update --name $ENDPOINT_NAME --traffic "blue=0 green=100"
green
デプロイに問題がなければ、すべてのトラフィックをそのデプロイに切り替えます。
endpoint.traffic = {"blue": 0, "green": 100}
ml_client.begin_create_or_update(endpoint).result()
green
デプロイに問題がなければ、すべてのトラフィックをそのデプロイに切り替えます。
エンドポイントの [詳細] ページで、[トラフィックを更新する] を選択します。
グリーン デプロイに 100%、ブルー デプロイに 0% を割り当てることで、デプロイ トラフィックを調整します。
[更新] を選択します。
以前のデプロイを削除する
次の手順に従って、マネージド オンライン エンドポイントから個々のデプロイを削除します。 個々のデプロイを削除すると、マネージド オンライン エンドポイント内の他のデプロイに影響します。
az ml online-deployment delete --name blue --endpoint $ENDPOINT_NAME --yes --no-wait
ml_client.online_deployments.begin_delete(
name="blue", endpoint_name=online_endpoint_name
).wait()
Note
ライブ トラフィックが割り当てられているデプロイを削除することはできません。 デプロイを削除する前に、まず、デプロイのトラフィックの割り当ての設定 を 0% にする必要があります。
エンドポイントの [詳細] ページで、ブルー デプロイを見つけます。
デプロイ名の横にある削除アイコン を選択します。
エンドポイントとデプロイを削除する
エンドポイントとデプロイを使用する予定がない場合は、削除してください。 エンドポイントを削除すると、その基礎になっているデプロイもすべて削除されます。
az ml online-endpoint delete --name $ENDPOINT_NAME --yes --no-wait
エンドポイントとデプロイを使用する予定がない場合は、削除してください。 エンドポイントを削除すると、その基礎になっているデプロイもすべて削除されます。
ml_client.online_endpoints.begin_delete(name=online_endpoint_name)
エンドポイントとデプロイを使用する予定がない場合は、削除してください。 エンドポイントを削除すると、その基礎になっているデプロイもすべて削除されます。
Azure Machine Learning Studio に移動します。
左側のナビゲーション バーで、 [エンドポイント] ページを選択します。
モデル名の横にある円をチェックして、エンドポイントを選択します。
[削除] を選択します。
あるいは、エンドポイントの詳細ページで [削除] アイコンを選択して、マネージド オンライン エンドポイントを直接削除することもできます。
関連するコンテンツ