オンライン エンドポイントを自動スケーリングする

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

自動スケールでは、アプリケーションの負荷を処理するために適切な量のリソースが自動的に実行されます。 オンライン エンドポイントは、Azure Monitor 自動スケーリング機能との統合によって、自動スケールをサポートします。

Azure Monitor 自動スケーリング機能では、豊富なルール セットがサポートされています。 メトリックベースのスケーリング (たとえば、CPU 使用率 >70%)、スケジュールに基づくスケーリング (たとえば、営業時間のピーク時のルールのスケーリング)、またはその組み合わせを構成できます。 詳細については、「Microsoft Azure の自動スケールの概要」を参照してください。

必要に応じてインスタンスを追加または削除する自動スケーリングの図

現在、自動スケールは、Azure CLI、REST、ARM、またはブラウザー ベースの Azure portal を使用して管理できます。 Python SDK などの他の Azure Machine Learning SDK によって、今後サポートが追加される予定です。

前提条件

自動スケール プロファイルの定義

エンドポイントに対して自動スケールを有効にするには、最初に自動スケール プロファイルを定義します。 このプロファイルでは、スケール セット容量の既定値、最小値、および最大値が定義されます。 次の例では、既定容量と最小容量を 2 つの VM インスタンスとして設定し、最大容量を 5 に設定します。

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

次のスニペットでは、エンドポイントとデプロイの名前を設定します。

# set your existing endpoint name
ENDPOINT_NAME=your-endpoint-name
DEPLOYMENT_NAME=blue

次に、デプロイとエンドポイントの 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`

次のスニペットでは、自動スケーリング プロファイルを作成します。

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

注意

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

メトリックを使用してスケールアウトするルールを作成する

一般的なスケールアウト ルールは、平均 CPU 負荷が高い場合に VM インスタンスの数を増やすというルールです。 次の例では、5 分間の CPU 平均負荷が 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 インスタンスが割り当てられます。

注意

CLI 構文の詳細については、az monitor autoscale を参照してください。

メトリックを使用してスケールインするルールを作成する

負荷が軽い場合、スケールインのルールを使用することで、VM インスタンスの数を減らすことができます。 次の例では、CPU 負荷が 5 分間 30% 未満の場合、下限 2 まで、1 つのノードを解放します。

適用対象: 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

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

特定の日または特定の時間にのみ適用されるルールを作成することもできます。 この例では、週末のノード数が 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 (現行)

# 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

次の手順

Azure Monitor を使用した自動スケーリングの詳細については、次の記事を参照してください。