Freigeben über


Autoskalierung von Onlineendpunkten in Azure Machine Learning

GILT FÜR:Azure CLI ML-Erweiterung v2 (aktuell)Python SDK azure-ai-ml v2 (aktuell)

In diesem Artikel erfahren Sie, wie Sie die Ressourcennutzung in einer Bereitstellung verwalten, indem Sie die Autoskalierung basierend auf Metriken und Zeitplänen konfigurieren. Durch den Prozess der Autoskalierung können Sie automatisch die richtige Menge an Ressourcen ausführen lassen, um die Last Ihrer Anwendung zu bewältigen. Onlineendpunkte in Azure Machine Learning unterstützen die Autoskalierung durch die Integration in die Autoskalierungsfunktion von Azure Monitor.

Mithilfe der Autoskalierung in Azure Monitor können Sie Regeln festlegen, die eine oder mehrere Autoskalierungsaktionen auslösen, wenn die Bedingungen der Regeln erfüllt sind. Sie können metrikbasierte Skalierung (z. B. eine CPU-Auslastung von mehr als 70 %), zeitplanbasierte Skalierung (z. B. Skalierungsregeln für Hauptgeschäftszeiten) oder eine Kombination von beidem konfigurieren. Weitere Informationen finden Sie unter Überblick über Autoskalierung in Microsoft Azure.

Diagramm, das zeigt, wie die Autoskalierung Instanzen je nach Bedarf hinzugefügt oder entfernt.

Zum Verwalten der automatischen Skalierung können Sie derzeit die Azure CLI, REST-APIs, Azure Resource Manager, das Python SDK oder das browserbasierte Azure-Portal verwenden.

Voraussetzungen

  • Ein bereitgestellter Endpunkt. Weitere Informationen finden Sie unter Bereitstellen und Bewerten eines Machine Learning-Modells mithilfe eines Onlineendpunkts.

  • Um die Autoskalierung zu verwenden, muss die Rolle „microsoft.insights/autoscalesettings/write“ der Identität zugewiesen werden, die die Autoskalierung verwaltet. Sie können alle integrierten oder benutzerdefinierten Rollen verwenden, die diese Aktion zulassen. Eine allgemeine Anleitung zum Verwalten von Rollen für Azure Machine Learning finden Sie unter Benutzer und Rollen verwalten. Weitere Informationen zu Einstellungen für die Autoskalierung in Azure Monitor finden Sie unter Microsoft.Insights autoscalesettings.

  • Um das Python SDK zum Verwalten des Azure Monitor-Diensts zu verwenden, installieren Sie das azure-mgmt-monitor-Paket mithilfe des folgenden Befehls:

    pip install azure-mgmt-monitor
    

Definieren eines Profils für die Autoskalierung

Zum Aktivieren der Autoskalierung für einen Onlineendpunkt legen Sie zuerst ein Autoskalierungsprofil fest. Dieses Profil gibt die standardmäßige, minimale und maximale Kapazität der Skalierungsgruppe an. Das folgende Beispiel zeigt, wie die Anzahl der VM-Instanzen (Virtual Machine, virtuelle Maschine) für die standardmäßige, die minimale und die maximale Skalierungskapazität festgelegt wird.

GILT FÜR Azure CLI-ML-Erweiterung v2 (aktuell)

Wenn Sie die Standardeinstellungen für die Azure-Befehlszeilenschnittstelle noch nicht festgelegt haben, speichern Sie Ihre Standardeinstellungen. Um zu vermeiden, dass Sie die Werte für Ihr Abonnement, Ihren Arbeitsbereich und Ihre Ressourcengruppe mehrfach eingeben müssen, führen Sie den folgenden Code aus:

az account set --subscription <subscription ID>
az configure --defaults workspace=<Azure Machine Learning workspace name> group=<resource group>
  1. Legen Sie den Endpunkt und die Bereitstellungsnamen fest:

    # set your existing endpoint name
    ENDPOINT_NAME=your-endpoint-name
    DEPLOYMENT_NAME=blue
    
  2. Rufen Sie die Azure Resource Manager-ID der Bereitstellung und des Endpunkts ab:

    # 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. Erstellen Sie ein Profil für die Autoskalierung:

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

Hinweis

Weitere Informationen finden Sie in der az monitor autoscale-Referenz.

Erstellen einer Regel für die horizontale Skalierung basierend auf Bereitstellungsmetriken

Eine gängige Regel für die horizontale Skalierung besteht darin, die Anzahl der VM-Instanzen zu erhöhen, wenn die durchschnittliche CPU-Auslastung hoch ist. Im folgenden Beispiel wird gezeigt, wie zwei weitere Knoten (bis zum Maximalwert) zugeordnet werden können, wenn die CPU-Auslastung fünf Minuten lang durchschnittlich über 70 % liegt:

GILT FÜR Azure CLI-ML-Erweiterung v2 (aktuell)

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

Die Regel ist Teil des my-scale-settings-Profils, wobei autoscale-name entspricht dem name-Teil des Profils entspricht. Der Wert des Arguments condition der Regel gibt an, dass die Regel ausgelöst werden soll, wenn „die durchschnittliche CPU-Auslastung der VM-Instanzen fünf Minuten lang 70 % überschreitet“. Wenn die Bedingung erfüllt ist, werden zwei weitere VM-Instanzen zugeordnet.

Hinweis

Weitere Informationen finden Sie unter az monitor autoscale in der Syntaxreferenz von Azure CLI.

Erstellen einer Regel für das Herunterskalieren basierend auf Bereitstellungsmetriken

Bei geringer durchschnittlicher CPU-Auslastung kann eine Skalierungsregel die Anzahl der VM-Instanzen verringern. Das folgende Beispiel zeigt, wie ein einzelner Knoten freigegeben wird (bis auf ein Minimum von zwei Knoten), wenn die CPU-Auslastung fünf Minuten lang weniger als 30 % beträgt.

GILT FÜR Azure CLI-ML-Erweiterung v2 (aktuell)

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

Erstellen einer Skalierungsregel basierend auf Endpunktmetriken

In den vorherigen Abschnitten haben Sie Regeln für die horizontale Skalierung und die Herunterskalierung basierend auf Bereitstellungsmetriken erstellt. Sie können auch eine Regel erstellen, die für den Bereitstellungsendpunkt gilt. In diesem Abschnitt erfahren Sie, wie Sie einen weiteren Knoten zuordnen, wenn die Anforderungswartezeit fünf Minuten lang durchschnittlich über 70 Millisekunden liegt.

GILT FÜR Azure CLI-ML-Erweiterung v2 (aktuell)

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

Finden von IDs für unterstützte Metriken

Wenn Sie zum Einrichten von Autoskalierungsregeln mithilfe der Azure CLI oder des SDKs andere Metriken im Code verwenden möchten, sehen Sie sich die Tabelle unter Verfügbare Metriken an.

Erstellen einer Skalierungsregel basierend auf einem Zeitplan

Sie können auch Regeln erstellen, die nur an bestimmten Tagen oder zu bestimmten Zeiten gelten. In diesem Abschnitt erstellen Sie eine Regel, die die Knotenanzahl an Wochenenden auf zwei festlegt.

GILT FÜR Azure CLI-ML-Erweiterung v2 (aktuell)

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"

Aktivieren oder Deaktivieren der Autoskalierung

Sie können ein bestimmtes Profil für die Autoskalierung aktivieren oder deaktivieren.

GILT FÜR Azure CLI-ML-Erweiterung v2 (aktuell)

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

Löschen von Ressourcen

Falls Sie Ihre Bereitstellungen nicht verwenden möchten, löschen Sie die Ressourcen mithilfe folgender Schritte.

GILT FÜR Azure CLI-ML-Erweiterung v2 (aktuell)

# 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