Azure Machine Learning でのオンライン エンドポイントの自動スケーリング

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

この記事では、メトリックとスケジュールに基づいて自動スケーリングを構成することで、デプロイでのリソースの使用状況を管理する方法について説明します。 自動スケーリング プロセスを使用すると、アプリケーションの負荷を処理するために適切な量のリソースを自動的に実行できます。 Azure Machine Learning のオンライン エンドポイントでは、Azure Monitor の自動スケーリング機能との統合による自動スケーリングがサポートされます。

Azure Monitor の自動スケーリングでは、ルールの条件が満たされたときに 1 つ以上の自動スケーリング アクションをトリガーするルールを設定できます。 メトリックベースのスケーリング (CPU 使用率が 70% を超える場合など)、スケジュールベースのスケーリング (ピーク営業時間のスケーリング ルールなど)、または 2 つの組み合わせを構成できます。 詳細については、「Microsoft Azure の自動スケールの概要」を参照してください。

必要に応じてインスタンスを自動スケーリングで追加および削除する方法を示す図。

現在、自動スケーリングは、Azure CLI、REST API、Azure Resource Manager、Python SDK、またはブラウザー ベースの Azure portal を使用して管理できます。

前提条件

  • デプロイされたエンドポイント。 詳細については、「オンライン エンドポイントを使用して機械学習モデルをデプロイおよびスコア付けする」を参照してください。

  • 自動スケーリングを使用するには、自動スケーリングを管理する ID にロール microsoft.insights/autoscalesettings/write を割り当てる必要があります。 このアクションを許可する組み込みロールまたはカスタム ロールを使用できます。 Azure Machine Learning のロールの管理に関する一般的なガイダンスについては、「ユーザーとロールを管理する」を参照してください。 Azure Monitor からの自動スケーリング設定の詳細については、「Microsoft.Insights autoscalesettings」を参照してください。

  • Python SDK を使用して Azure Monitor サービスを管理するには、次のコマンドを使用して azure-mgmt-monitor パッケージをインストールします。

    pip install azure-mgmt-monitor
    

自動スケーリング プロファイルを定義する

オンライン エンドポイントに対して自動スケーリングを有効にするには、最初に自動スケーリング プロファイルを定義します。 プロファイルは、既定、最小、および最大スケール セットの容量を指定します。 次の例では、既定、最小、および最大スケール容量の仮想マシン (VM) インスタンスの数を設定する方法を示します。

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

まだ Azure CLI の既定値を設定していない場合は、既定の設定を保存する必要があります。 サブスクリプション、ワークスペース、およびリソース グループの値を複数回渡さないようにするには、次のコードを実行します。

az account set --subscription <subscription ID>
az configure --defaults workspace=<Azure Machine Learning workspace name> group=<resource group>
  1. エンドポイントとデプロイの名前を設定します:

    # set your existing endpoint name
    ENDPOINT_NAME=your-endpoint-name
    DEPLOYMENT_NAME=blue
    
  2. デプロイとエンドポイントの Azure Resource Manager ID を取得します:

    # ARM id of the deployment
    DEPLOYMENT_RESOURCE_ID=$(az ml online-deployment show -e $ENDPOINT_NAME -n $DEPLOYMENT_NAME -o tsv --query "id")
    # ARM id of the deployment. todo: change to --query "id"
    ENDPOINT_RESOURCE_ID=$(az ml online-endpoint show -n $ENDPOINT_NAME -o tsv --query "properties.\"azureml.onlineendpointid\"")
    # set a unique name for autoscale settings for this deployment. The below will append a random number to make the name unique.
    AUTOSCALE_SETTINGS_NAME=autoscale-$ENDPOINT_NAME-$DEPLOYMENT_NAME-`echo $RANDOM`
    
  3. 自動スケーリング プロファイルを作成します:

    az monitor autoscale create \
      --name $AUTOSCALE_SETTINGS_NAME \
      --resource $DEPLOYMENT_RESOURCE_ID \
      --min-count 2 --max-count 5 --count 2
    

Note

詳細については、az monitor の自動スケーリング リファレンスを参照してください。

デプロイ メトリックに基づいてスケールアウト ルールを作成する

一般的なスケールアウト ルールは、平均 CPU 負荷が高い場合に VM インスタンスの数を増やすことです。 次の例では、CPU の平均負荷が 5 分間で 70% を超える場合に、さらに 2 つのノード (最大値まで) を割り当てる方法を示します。

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

az monitor autoscale rule create \
  --autoscale-name $AUTOSCALE_SETTINGS_NAME \
  --condition "CpuUtilizationPercentage > 70 avg 5m" \
  --scale out 2

ルールは my-scale-settings プロファイルの一部であり、autoscale-name プロファイルの name 部分と一致します。 引数 condition ルールの値は、"VM インスタンス間の平均 CPU 消費量が 5 分間で 70% を超える" 場合にルールがトリガーされたことを示します。条件が満たされた場合、さらに 2 つの VM インスタンスが割り当てられます。

Note

詳細については、 az monitor 自動スケーリング Azure CLI 構文リファレンスを参照してください。

デプロイ メトリックに基づいてスケールイン ルールを作成する

平均 CPU 負荷が軽い場合、スケールイン ルールによって VM インスタンスの数を減らすことができます。 次の例は、CPU 負荷が 5 分間 30% 未満の場合に、1 つのノードを少なくとも 2 つまで解放する方法を示しています。

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

az monitor autoscale rule create \
  --autoscale-name $AUTOSCALE_SETTINGS_NAME \
  --condition "CpuUtilizationPercentage < 25 avg 5m" \
  --scale in 1

エンドポイント メトリックに基づいてスケール ルールを作成する

前のセクションでは、デプロイ メトリックに基づいてスケールインまたはスケールアウトするルールを作成しました。 デプロイ エンドポイントに適用される規則を作成することもできます。 このセクションでは、要求の待機時間が 5 分間の平均 70 ミリ秒を超える場合に、別のノードを割り当てる方法について説明します。

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

az monitor autoscale rule create \
 --autoscale-name $AUTOSCALE_SETTINGS_NAME \
 --condition "RequestLatency > 70 avg 5m" \
 --scale out 1 \
 --resource $ENDPOINT_RESOURCE_ID

サポートされているメトリックの ID を検索する

コードで他のメトリックを使用して Azure CLI または SDK を使用して自動スケール ルールを設定する場合は、「使用可能なメトリック」のテーブルを参照してください。

スケジュールに基づいてスケール ルールを作成する

特定の日または特定の時間にのみ適用されるルールを作成することもできます。 このセクションでは、週末にノード数を 2 に設定するルールを作成します。

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

az monitor autoscale profile create \
  --name weekend-profile \
  --autoscale-name $AUTOSCALE_SETTINGS_NAME \
  --min-count 2 --count 2 --max-count 2 \
  --recurrence week sat sun --timezone "Pacific Standard Time"

自動スケーリングを有効または無効にする

特定の自動スケーリング プロファイルを有効または無効にできます。

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

az monitor autoscale update \
  --autoscale-name $AUTOSCALE_SETTINGS_NAME \
  --enabled false

リソースを削除する

デプロイを使用しない場合は、次の手順でリソースを削除します。

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

# delete the autoscaling profile
az monitor autoscale delete -n "$AUTOSCALE_SETTINGS_NAME"

# delete the endpoint
az ml online-endpoint delete --name $ENDPOINT_NAME --yes --no-wait