Autoscale führt automatisch die richtige Menge an Ressourcen aus, um die Last Ihrer Anwendung zu bewältigen. Onlineendpunkte unterstützen automatisches Skalieren durch die Integration des Autoskalierungsfeatures von Azure Monitor.
Die automatische Azure Monitor-Skalierung unterstützt eine Vielzahl von Regeln. Sie können metrikbasierte Skalierung (z. B. CPU-Auslastung >70 %), zeitplanbasierte Skalierung (z. B. Skalierungsregeln für Hauptgeschäftszeiten) oder eine Kombination davon konfigurieren. Weitere Informationen finden Sie unter Überblick über Autoskalierung in Microsoft Azure.
Derzeit können Sie die automatische Skalierung entweder mithilfe der Azure-CLI oder über REST, ARM oder das browserbasierte Azure-Portal verwalten. Andere Azure Machine Learning-SDKs, z. B. das Python-SDK, werden im Laufe der Zeit Unterstützung hinzufügen.
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.
Definieren eines Profils für die automatische Skalierung
Zum Aktivieren der Autoskalierung für einen Endpunkt legen Sie zuerst ein Profil für die automatische Skalierung fest. Dieses Profil definiert die standardmäßige, minimale und maximale Kapazität der Skalierungsgruppe. Im folgenden Beispiel wird die Standard- und Mindestkapazität auf zwei VM-Instanzen und die Höchstkapazität auf fünf VM-Instanzen festgelegt:
Der folgende Codeausschnitt legt die Endpunkt- und Bereitstellungsnamen fest:
# set your existing endpoint name
ENDPOINT_NAME=your-endpoint-name
DEPLOYMENT_NAME=blue
Als nächstes erhalten Sie die Azure Resource Manager-ID der Bereitstellung und des Endpunkts:
# 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`
Mit dem folgenden Codeausschnitt wird das Profil für die Autoskalierung erstellt:
from azure.ai.ml import MLClient
from azure.identity import DefaultAzureCredential
from azure.mgmt.monitor import MonitorManagementClient
from azure.mgmt.monitor.models import AutoscaleProfile, ScaleRule, MetricTrigger, ScaleAction, Recurrence, RecurrentSchedule
import random
import datetime
Definieren Sie Variablen für den Arbeitsbereich, den Endpunkt und die Bereitstellung:
Erstellen Sie ein Profil für die automatische Skalierung:
# 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 = f"autoscale-{endpoint_name}-{deployment_name}-{random.randint(0,1000)}"
mon_client.autoscale_settings.create_or_update(
resource_group,
autoscale_settings_name,
parameters = {
"location" : endpoint.location,
"target_resource_uri" : deployment.id,
"profiles" : [
AutoscaleProfile(
name="my-scale-settings",
capacity={
"minimum" : 2,
"maximum" : 5,
"default" : 2
},
rules = []
)
]
}
)
Wählen Sie in Azure Machine Learning Studio Ihren Arbeitsbereich dann links auf der Seite die Option Endpunkte aus. Nachdem die Endpunkte aufgelistet sind, wählen Sie den Endpunkt aus, den Sie konfigurieren möchten.
Wählen Sie auf der Registerkarte Details des Endpunkts die Option Configure auto scaling (Automatische Skalierung konfigurieren) aus.
Wählen Sie unter Choose how to scale your resources (Skalierung Ihrer Ressourcen auswählen) die Option Custom autoscale (Benutzerdefinierte automatische Skalierung) aus, um die Konfiguration zu beginnen. Verwenden Sie für die Standardskalierungsbedingung die folgenden Werte:
Legen Sie den Skalierungsmodus auf Basierend auf einer Metrik skalieren fest.
Legen Sie Minimum auf 2 fest.
Legen Sie Maximum auf 5 fest.
Legen Sie Standard auf 2 fest.
Erstellen einer Regel zum Aufskalieren mithilfe von Bereitstellungsmetriken
Eine gängige Regel für das Aufskalieren besteht darin, die Anzahl der VM-Instanzen zu erhöhen, wenn die durchschnittliche CPU-Auslastung hoch ist. Im folgenden Beispiel werden zwei weitere Knoten (bis zum Maximalwert) zugeordnet, wenn die CPU-Auslastung fünf Minuten lang durchschnittlich über 70 % liegt:
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 (autoscale-name entspricht dem name des Profils). Der Wert des Arguments condition besagt, dass die Regel ausgelöst werden soll, wenn „die durchschnittliche CPU-Auslastung unter den VM-Instanzen fünf Minuten lang 70 % überschreitet“. Wenn diese Bedingung erfüllt ist, werden zwei weitere VM-Instanzen zugeordnet.
Diese Regel bezieht sich auf den Mittelwert der letzten fünf Minuten von CPUUtilizationpercentage aus den Argumenten metric_name, time_window und time_aggregation. Wenn der Wert der Metrik größer als der Schwellenwert (threshold) 70 ist, werden zwei weitere VM-Instanzen zugeordnet.
Aktualisieren Sie das Profil my-scale-settings, um diese Regel einzuschließen:
Wählen Sie im Abschnitt Regeln die Option Regel hinzufügen aus. Die Seite Skalierungsregel wird angezeigt. Verwenden Sie die folgenden Informationen zum Füllen der Felder auf dieser Seite:
Legen Sie Metrikname auf Prozentsatz der CPU-Auslastung fest.
Legen Sie Operator auf Größer als und Metrikschwellenwert auf 70 fest.
Legen Sie Dauer (Minuten) auf 5 fest. Belassen Sie für die Option Statistik zum Aggregationsintervall den Wert Durchschnitt.
Legen Sie Vorgang auf Anzahl erhöhen um und Instanzenanzahl auf 2 fest.
Wählen Sie schließlich die Schaltfläche Hinzufügen aus, um die Regel zu erstellen.
Erstellen einer Regel zum Abskalieren mithilfe von Bereitstellungsmetriken
Bei geringer Auslastung kann eine Skalierungsregel die Anzahl der VM-Instanzen reduzieren. Das folgende Beispiel gibt einen einzelnen Knoten frei (bis auf ein Minimum von zwei Knoten), wenn die CPU-Auslastung fünf Minuten lang weniger als 30 % beträgt:
Wählen Sie im Abschnitt Regeln die Option Regel hinzufügen aus. Die Seite Skalierungsregel wird angezeigt. Verwenden Sie die folgenden Informationen zum Füllen der Felder auf dieser Seite:
Legen Sie Metrikname auf Prozentsatz der CPU-Auslastung fest.
Legen Sie Operator auf Kleiner als und den Metrikschwellenwert auf 30 fest.
Legen Sie Dauer (Minuten) auf 5 fest.
Legen Sie Vorgang auf Anzahl verringern um und Instanzenanzahl auf 1 fest.
Wählen Sie schließlich die Schaltfläche Hinzufügen aus, um die Regel zu erstellen.
Wenn Sie sowohl Regeln für die Auf- als auch für die Abskalierung besitzen, sehen Ihre Regeln ähnlich aus wie im folgenden Screenshot. Sie haben festgelegt, dass, wenn die durchschnittliche CPU-Auslastung fünf Minuten lang 70 % übersteigt, zwei weitere Knoten zugewiesen werden sollen, bis zu einer Höchstgrenze von fünf Knoten. Wenn die CPU-Auslastung fünf Minuten lang weniger als 30 % beträgt, sollte ein einzelner Knoten freigegeben werden, und zwar bis auf den Mindestwert von zwei Knoten.
Erstellen einer Skalierungsregel basierend auf Endpunktmetriken
Die vorherigen Regeln, die auf die Bereitstellung angewendet wurden. Fügen Sie nun eine Regel hinzu, die für den Endpunkt gilt. Wenn die Anforderungslatenz in diesem Beispiel fünf Minuten lang durchschnittlich über 70 Millisekunden liegt, ordnen Sie einen anderen Knoten zu.
Wählen Sie unten auf der Seite + Skalierungsbedingung hinzufügen aus.
Wählen Sie Auf Basis von Metrik skalieren und dann Regel hinzufügen aus. Die Seite Skalierungsregel wird angezeigt. Verwenden Sie die folgenden Informationen zum Füllen der Felder auf dieser Seite:
Legen Sie Metrikquelle auf Andere Ressource fest.
Legen Sie Ressourcentyp auf Onlineendpunkte für maschinelles Lernen fest.
Legen Sie Ressource auf Ihren Endpunkt fest.
Legen Sie Metrikname auf Anforderungslatenz fest.
Legen Sie Operator auf Größer als und Metrikschwellenwert auf 70 fest.
Legen Sie Dauer (Minuten) auf 5 fest.
Legen Sie Vorgang auf Anzahl erhöhen um und Instanzenanzahl auf „1“ fest.
Ermitteln unterstützter Metrik-IDs
Wenn Sie andere Metriken im Code (CLI oder SDK) zum Einrichten von Autoskalierungsregeln verwenden möchten, sehen Sie sich die Tabelle unter Verfügbare Metriken an.
Erstellen von Skalierungsregeln basierend auf einem Zeitplan
Sie können auch Regeln erstellen, die nur an bestimmten Tagen oder zu bestimmten Zeiten gelten. In diesem Beispiel wird die Knotenanzahl am Wochenende auf „2“ festgelegt.
Wählen Sie unten auf der Seite + Skalierungsbedingung hinzufügen aus. Verwenden Sie in der neuen Skalierungsbedingung die folgenden Informationen, um die Felder zu füllen:
Wählen Sie Auf eine bestimmte Anzahl von Instanzen skalieren aus.
Legen Sie Instanzenanzahl auf 2 fest.
Legen Sie Zeitplan auf An bestimmten Tagen wiederholen fest.
Legen Sie für den Zeitplan die Option Wiederholen jeden auf Samstag und Sonntag fest.
Aktivieren oder Deaktivieren der automatischen Skalierung
Sie können ein bestimmtes Profil für die Autoskalierung aktivieren oder deaktivieren.
Um das Profil für die Autoskalierung zu deaktivieren, wählen Sie einfach „Manuelle Skalierung“ und „Speichern“ aus.
Um das Profil für die Autoskalierung zu aktivieren, wählen Sie einfach „Benutzerdefinierte Autoskalierung“ aus. Wenn Sie das Profil für die automatische Skalierung zuvor hinzugefügt haben, wird es unten angezeigt. Sie können jetzt auf „Speichern“ klicken, um es zu aktivieren.
Löschen von Ressourcen
Wenn Sie Ihre Bereitstellungen nicht verwenden möchten, löschen Sie sie:
# 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
Bald verfügbar: Im Laufe des Jahres 2024 werden wir GitHub-Tickets als Feedbackmechanismus für Inhalte auslaufen lassen und es durch ein neues Feedbacksystem ersetzen. Weitere Informationen finden Sie unter: https://aka.ms/ContentUserFeedback.