次の方法で共有


オンライン エンドポイントを使用して機械学習モデルをデプロイおよびスコア付けする

適用対象:Azure CLI ml extension v2 (現行)Python SDK azure-ai-ml v2 (現行)

この記事では、リアルタイム推論で使うためにモデルをオンライン エンドポイントにデプロイする方法について説明します。 まずローカル コンピューターにモデルをデプロイして、発生するエラーをデバッグします。 次に、Azure でそのモデルをデプロイしてテストし、デプロイ ログを表示し、サービス レベル アグリーメント (SLA) を監視します。 この記事の最後には、リアルタイム推論に使用できるスケーラブルな HTTPS/REST エンドポイントがあります。

オンライン エンドポイントは、リアルタイムの推論に使用されるエンドポイントです。 オンライン エンドポイントには、マネージド オンライン エンドポイントと Kubernetes オンライン エンドポイントの 2 種類があります。 相違点の詳細については、「 マネージド オンライン エンドポイントと Kubernetes オンライン エンドポイント」を参照してください。

マネージド オンライン エンドポイントは、ターンキー方式で機械学習モデルを展開するのに役立ちます。 マネージド オンライン エンドポイントは、スケーラブルでフル マネージドの方法で Azure の強力な CPU および GPU マシンと動作します。 マネージド オンライン エンドポイントは、モデルの提供、スケーリング、セキュリティ保護、監視を行います。 この支援により、基になるインフラストラクチャの設定と管理の手間から解放されます。

このアーティクルの主な例では、デプロイにマネージド オンライン エンドポイントを使用します。 代わりに Kubernetes を使用する場合は、マネージド オンライン エンドポイントに関する説明に沿って本ドキュメント内に記載されている注記を参照してください。

前提条件

適用対象:Azure CLI ml 拡張機能 v2 (現行)

  • Azure CLI と Azure CLI のml拡張機能(インストールおよび構成済み)。 詳細については、「 CLI のインストールと設定 (v2)」を参照してください。

  • Bash シェルまたは互換性のあるシェル (Linux システム上のシェルや Linux 用 Windows サブシステムなど)。 この記事の Azure CLI の例では、この種類のシェルを使用することを前提としています。

  • Azure Machine Learning ワークスペース。 ワークスペースを作成する手順については、「 設定」を参照してください。

  • Azure ロールベースのアクセス制御 (Azure RBAC) は、Azure Machine Learning の操作へのアクセスを許可するために使用されます。 この記事の手順を実行するには、Azure Machine Learning ワークスペースの所有者ロールまたは共同作成者ロールがユーザー アカウントに割り当てられているか、カスタム ロールで Microsoft.MachineLearningServices/workspaces/onlineEndpoints/*を許可する必要があります。 Azure Machine Learning Studio を使用してオンライン エンドポイントまたはデプロイを作成および管理する場合は、リソース グループの所有者からの追加のアクセス許可 Microsoft.Resources/deployments/write 必要があります。 詳細については、「Azure Machine Learning ワークスペースへのアクセスの管理」を参照してください。

  • (省略可能) ロ―カルでデプロイするには、ローカル コンピューターに Docker エンジンをインストールする必要があります。 このオプション を強くお勧めします 。これにより、問題のデバッグが容易になります。

  • デプロイ用に十分な仮想マシン (VM) クォータが割り当てられていることを確認してください。 Azure Machine Learning では、一部の VM バージョンでアップグレードを実行するために、コンピューティング リソースの% が 20 個予約されています。 たとえば、デプロイで 10 個のインスタンスを要求する場合、VM バージョンのコア数ごとに 12 個のクォータが必要です。 この追加分のコンピューティング リソースを考慮していないと、エラーが発生します。 一部の VM バージョンは、追加のクォータ予約から除外されます。 クォータの割り当ての詳細については、「 デプロイのための仮想マシン クォータの割り当て」を参照してください

  • または、限られた時間、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 リポジトリを複製してから、リポジトリの azureml-examples/cli ディレクトリに変更します。

git clone --depth 1 https://github.com/Azure/azureml-examples
cd azureml-examples/cli

--depth 1を使用して、リポジトリへの最新のコミットのみを複製します。これにより、操作を完了する時間が短縮されます。

このチュートリアルのコマンドは、cli ディレクトリのファイル deploy-local-endpoint.shdeploy-managed-online-endpoint.sh にあります。 YAML 構成ファイルは 、endpoints/online/managed/sample/ サブディレクトリにあります。

注意

Kubernetes オンライン エンドポイントの YAML 構成ファイルは、 endpoints/online/kubernetes/ サブディレクトリにあります。

エンドポイントを定義する

オンライン エンドポイントを定義するには、エンドポイント名と認証モードを指定します。 マネージド オンライン エンドポイントについて詳しくは、「オンライン エンドポイント」をご覧ください。

エンドポイント名を設定する

エンドポイント名を設定するには、次のコマンドを実行します。 <YOUR_ENDPOINT_NAME> を Azure リージョンでの一意の名前に置き換えます。 名前付け規則の詳細については、「 エンドポイントの制限」を参照してください。

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 リファレンスに関する記事を参照してください。 マネージド エンドポイントに関連する制限については、 Azure Machine Learning オンライン エンドポイントとバッチ エンドポイントに関するページを参照してください。

説明
$schema (省略可能) YAML スキーマ。 上記のコード スニペットをブラウザーで表示すると、YAML ファイルで使用可能なすべてのオプションを確認できます。
name エンドポイントの名前。
auth_mode キーベースの認証に key を使用します。
Azure Machine Learning のトークン ベースの認証に aml_token を使用します。
Microsoft Entra トークンベースの認証 (プレビュー) の場合は aad_token を使います。
認証の詳細については、オンライン エンドポイントのクライアントを認証するに関する記事を参照してください。

デプロイを定義する

デプロイは、実際の推論を実行するモデルをホストするのに必要なリソースのセットです。 この例では、回帰を実行する scikit-learn モデルをデプロイし、スコアリング スクリプト score.py を使用して、特定の入力要求でモデルを実行します。

デプロイの主な属性については、「オンライン デプロイ」をご覧ください。

デプロイを構成する

デプロイ構成では、デプロイするモデルの場所が使用されます。

次のスニペットは、デプロイを構成するのに必要なすべての入力が指定された 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-ubuntu22.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 リファレンスに関するドキュメントを参照してください。

注意

コンピューティング先としてマネージド オンライン エンドポイントではなく Kubernetes エンドポイントを使うには:

  1. Azure Machine Learning スタジオを使用して、Kubernetes クラスターを作成し、Azure Machine Learning ワークスペースにコンピューティング先としてアタッチします。
  2. エンドポイント YAML を使用して、マネージド エンドポイント YAML ではなく Kubernetes をターゲットにします。 YAML を編集して compute の値を登録済みコンピューティング先の名前に変更する必要があります。 Kubernetes デプロイに適用される他のプロパティを持つこの deployment.yaml を使用できます。

マネージド オンライン エンドポイントに関してこの記事で使われているすべてのコマンドは、Kubernetes エンドポイントにも適用されます。ただし、次の機能は Kubernetes エンドポイントには適用されません。

スコアリング スクリプトを理解する

オンライン エンドポイントのスコアリング スクリプトの形式は、前のバージョンの CLI や Python SDK で使用されている形式と同じです。

code_configuration.scoring_script で指定されているスコアリング スクリプトには、init() 関数と run() 関数が含まれている必要があります。

この例では、先ほど複製またはダウンロードしたリポジトリの 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 Studio と ARM テンプレートはサポートしていません。

ローカルにデプロイするには、Docker エンジンをインストールして実行する必要があります。 通常、Docker エンジンは、コンピューターの起動時に起動します。 起動しない場合は、Docker エンジンをトラブルシューティングします。

Azure Machine Learning 推論 HTTP サーバー Python パッケージを使用して、Docker エンジンなしでスコアリング スクリプトをローカルでデバッグできます。 推論サーバーを使用したデバッグは、ローカル エンドポイントにデプロイする前にスコアリング スクリプトをデバッグするのに役立ちます。これにより、デプロイ コンテナーの構成の影響を受けずにデバッグできます。

Azure にデプロイする前にオンライン エンドポイントをローカルでデバッグする方法の詳細については、「 オンライン エンドポイントのデバッグ」を参照してください。

モデルをローカルにデプロイする

まず、エンドポイントを作成します。 必要に応じて、ローカル エンドポイントの場合は、この手順をスキップできます。 デプロイを直接作成できます (次の手順を参照)。これにより、必要なメタデータが作成されます。 モデルをローカル環境にデプロイすると、開発とテストに役立ちます。

az ml online-endpoint create --local -n $ENDPOINT_NAME -f endpoints/online/managed/sample/endpoint.yml

ここで、エンドポイントの下に blue という名前のデプロイを作成します。

az ml online-deployment create --local -n blue --endpoint $ENDPOINT_NAME -f endpoints/online/managed/sample/blue-deployment.yml

--local フラグは、エンドポイントを Docker 環境にデプロイするよう CLI に命令するものです。

ヒント

お使いのエンドポイントをローカルでテストおよびデバッグするには、Visual Studio Code を使用します。 詳細については、「Visual Studio Code でオンライン エンドポイントをローカルでデバッグする」を参照してください。

ローカル デプロイが成功したかどうかを確認する

デプロイ状態を調べて、エラーなしでモデルがデプロイされたかどうかを確認します。

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": {}
}

次の表は、provisioning_state に指定できる値です。

価値 説明
Creating リソースを作成しています。
Updating リソースを更新しています。
Deleting リソースは削除中です。
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 属性を探します。

呼び出し操作からの出力をログで確認する

例の score.py ファイルでは、run() メソッドがいくつかの出力をコンソールにログしています。

この出力は、get-logs コマンドを使って確認できます。

az ml online-deployment get-logs --local -n blue --endpoint $ENDPOINT_NAME

オンライン エンドポイントを Azure にデプロイする

次に、オンライン エンドポイントを Azure にデプロイする 運用環境のベスト プラクティスとして、デプロイで使用するモデルと環境を登録することをお勧めします。

モデルと環境を登録する

登録済みの名前とバージョンをデプロイの間に指定できるように、Azure にデプロイする前にモデルと環境を登録することをお勧めします。 資産を登録した後は、デプロイを作成するたびにアップロードしなくても再利用できます。 この方法により、再現性と追跡性が向上します。

Azure へのデプロイとは異なり、ローカル デプロイでは、登録済みのモデルと環境の使用はサポートされていません。 代わりに、ローカル デプロイではローカル モデル ファイルが使用され、ローカル ファイルのみを含む環境が使用されます。

Azure へのデプロイの場合は、ローカル資産か登録済み資産 (モデルと環境) のどちらかを使うことができます。 この記事のこの項では、Azure へのデプロイで登録済み資産を使っていますが、代わりにローカル資産を使うこともできます。 ローカル デプロイの場合の使用するローカル ファイルをアップロードするデプロイ構成の例は、「デプロイを構成する」をご覧ください。

モデルと環境を登録するには、model: azureml:my-model:1 または environment: azureml:my-env:1 という形式を使います。

登録のために、 modelenvironment の YAML 定義を endpoints/online/managed/sample フォルダー内の個別の YAML ファイルに抽出し、 az ml model create コマンドと az ml environment createコマンドを使用できます。 これらのコマンドの詳細については、az ml model create -haz ml environment create -h を実行してください。

  1. モデルの YAML 定義を作成します。 ファイルにmodel.yml名前を けます。

    $schema: https://azuremlschemas.azureedge.net/latest/model.schema.json
    name: my-model
    path: ../../model-1/model/
    
  2. モデルを登録します。

    az ml model create -n my-model -v 1 -f endpoints/online/managed/sample/model.yml
    
  3. 環境の YAML 定義を作成します。 ファイルにenvironment.yml名前を けます。

    $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
    
  4. 環境を登録します。

    az ml environment create -n my-env -v 1 -f endpoints/online/managed/sample/environment.yml
    

モデルを資産として登録する方法の詳細については、「 Azure CLI または Python SDK を使用してモデルを登録する」を参照してください。 環境の作成の詳細については、「 カスタム環境の作成」を参照してください。

重要

デプロイのカスタム環境を定義するときは、 azureml-inference-server-http パッケージが conda ファイルに含まれていることを確認します。 このパッケージは、推論サーバーが正常に機能するために不可欠です。 独自のカスタム環境を作成する方法に慣れていない場合は、 minimal-py-inference ( mlflowを使用しないカスタム モデルの場合) や mlflow-py-inference ( mlflow を使用するモデルの場合) など、キュレーションされた環境のいずれかを使用します。 これらのキュレーションされた環境は、Azure Machine Learning Studio のインスタンスの [ 環境 ] タブにあります。

登録済み資産を使うデプロイを構成する

デプロイ構成では、デプロイする登録済みモデルと登録済みの環境が使用されます。

デプロイ定義で登録済み資産 (モデルと環境) を使います。 次のスニペットは、 エンドポイント/オンライン/マネージド/サンプル/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

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 コンピューティングの種類のバージョンと GPU Docker イメージを選択します。

サポートされている汎用インスタンスと GPU インスタンスの種類については、 マネージド オンライン エンドポイント SKU の一覧を参照してください。 Azure Machine Learning CPU と GPU の基本イメージの一覧については、「Azure Machine Learning 基本イメージ」を参照してください。

注意

マネージド エンドポイントの代わりに Kubernetes をコンピューティング 先として使用するには、「 Kubernetes コンピューティング ターゲットの概要」を参照してください。

次に、オンライン エンドポイントを Azure にデプロイする

Deploy to Azure (Azure へのデプロイ)

  1. Azure クラウドにエンドポイントを作成します。

    az ml online-endpoint create --name $ENDPOINT_NAME -f endpoints/online/managed/sample/endpoint.yml
    
  2. エンドポイントの下に 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 フラグを追加してください。 ただし、このオプションを選択すると、デプロイ状態の対話型表示が停止します。

    デプロイの作成に使われるコード --all-trafficaz ml online-deployment create フラグを指定すると、新規作成されたブルー デプロイにエンドポイント トラフィックの 100% が割り当てられるようになります。 このフラグを使用すると、開発とテストの目的で役立ちますが、運用環境では、明示的なコマンドを使用して新しいデプロイにトラフィックをルーティングできます。 たとえば、 az ml online-endpoint update -n $ENDPOINT_NAME --traffic "blue=100"を使用します。

デプロイでのエラーをデバッグするには、「オンライン エンドポイントのデプロイとスコアリングのトラブルシューティング」をご覧ください。

オンライン エンドポイントの状態を確認する

  1. show コマンドを使って、エンドポイントとデプロイについて provisioning_state に情報を表示します。

    az ml online-endpoint show -n $ENDPOINT_NAME
    
  2. list コマンドを使って、ワークスペース内のすべてのエンドポイントを表形式で一覧表示します。

    az ml online-endpoint list --output table
    

オンライン デプロイの状態を確認する

ログを調べて、モデルがエラーなしでデプロイされたかどうかを確認します。

コンテナーからのログ出力を表示するには、次の CLI コマンドを使用します。

az ml online-deployment get-logs --name blue --endpoint $ENDPOINT_NAME

既定では、ログは推論サーバー コンテナーからプルされます。 ストレージ初期化子コンテナーのログを表示するには、--container storage-initializer フラグを追加します。 デプロイのログについて詳しくは、「コンテナー ログを取得する」をご覧ください。

エンドポイントを呼び出し、モデルを使用してデータをスコアリングする

  1. invoke コマンドか任意の REST クライアントを使ってエンドポイントを呼び出しデータをスコアリングします。

    az ml online-endpoint invoke --name $ENDPOINT_NAME --request-file endpoints/online/model-1/sample-request.json
    
  2. エンドポイントに対する認証に使うキーを取得します。

    認証キーを取得できる Microsoft Entra セキュリティ プリンシパルは、Microsoft.MachineLearningServices/workspaces/onlineEndpoints/token/actionMicrosoft.MachineLearningServices/workspaces/onlineEndpoints/listkeys/action を許可するカスタム ロールにそれを割り当てることで制御できます。 ワークスペースへの承認を管理する方法の詳細については、「 Azure Machine Learning ワークスペースへのアクセスを管理する」を参照してください。

    ENDPOINT_KEY=$(az ml online-endpoint get-credentials -n $ENDPOINT_NAME -o tsv --query primaryKey)
    
  3. 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 コマンドの出力に対するクエリに関する記事をご覧ください。

  4. 起動ログを表示するには、再度 get-logs を実行します。

(省略可能) デプロイを更新する

コード、モデル、または環境を更新する場合は、YAML ファイルを更新します。 az ml online-endpoint update コマンドを実行します。

1 つの update コマンドでインスタンス数を他のモデル設定 (コード、モデル、環境など) と共に更新すると、最初にスケーリング操作が実行されます。 その他の更新プログラムは次に適用されます。 運用環境では、これらの操作を個別に実行することをお勧めします。

update の動作を理解するには:

  1. ファイル online/model-1/onlinescoring/score.py を開きます。

  2. init() 関数の最後の行を変更します。logging.info("Init complete") の後に、logging.info("Updated successfully") を追加してください。

  3. ファイルを保存します。

  4. 次のコマンドを実行します。

    az ml online-deployment update -n blue --endpoint $ENDPOINT_NAME -f endpoints/online/managed/sample/blue-deployment-with-registered-assets.yml
    

    YAML を使用した更新は宣言型です。 つまり、YAML の変更は、基になる 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などを試すことができます。 この方法では、既存のすべての構成が保持されますが、指定されたパラメーターのみが更新されます。

  5. エンドポイントの作成時または更新時に実行される init() 関数を変更したため、メッセージ Updated successfully がログに表示されます。 次を実行してログを取得します。

    az ml online-deployment get-logs --name blue --endpoint $ENDPOINT_NAME
    

update コマンドは、ローカル デプロイでも動作します。 同じ az ml online-deployment update コマンドを --local フラグと共に使用します。

注意

この項で示すデプロイの更新は、インプレース ローリング更新の例です。

  • マネージド オンライン エンドポイントの場合、デプロイは一度に 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