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.
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.
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.
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>
Legen Sie den Endpunkt und die Bereitstellungsnamen fest:
# set your existing endpoint name
ENDPOINT_NAME=your-endpoint-name
DEPLOYMENT_NAME=blue
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`
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 following code appends a random number to create a unique name.
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 = []
)
]
}
)
Rufen Sie in Azure Machine Learning Studio Ihren Arbeitsbereich auf, und wählen Sie dann im linken Menü die Option Endpunkte aus.
Wählen Sie in der Liste der verfügbaren Endpunkte den zu konfigurierenden Endpunkt aus:
Wählen Sie auf der Registerkarte Details des ausgewählten Endpunkts die Option Autoskalierung konfigurieren aus:
Wählen Sie unter Skalierung Ihrer Ressourcen auswählen die Option Benutzerdefinierte Autoskalierung aus, um mit der Konfiguration zu beginnen.
Verwenden Sie zum Konfigurieren der Bedingungen für die Skalierungsoption Standard die folgenden Werte aus:
Wählen Sie unter Skalierungsmodus die Option Skalierung basierend auf einer Metrik aus.
Instanzgrenzwerte>Minimum: Legen Sie den Wert auf 2 fest.
Instanzgrenzwerte>Maximum: Legen Sie den Wert auf 5 fest.
Instanzgrenzwerte>Standard: Legen Sie den Wert auf 2 fest.
Lassen Sie den Bereich „Konfiguration“ geöffnet. Im nächsten Abschnitt konfigurieren Sie die Einstellungen für die Regeln.
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:
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.
Diese Regel bezieht sich auf den Mittelwert der letzten fünf Minuten des CPUUtilizationpercentage-Werts aus den Argumenten metric_name, time_window und time_aggregation. Wenn der Wert der Metrik größer als der threshold von 70 ist, ordnet die Bereitstellung zwei weitere VM-Instanzen zu.
Aktualisieren Sie das Profil my-scale-settings, um diese Regel einzuschließen:
Mithilfe der folgenden Schritte fahren Sie mit der Konfiguration der Autoskalierung fort.
Wählen Sie für die Option Regeln den Link Regel hinzufügen aus. Die Seite Skalierungsregel wird geöffnet.
Konfigurieren Sie auf der Seite Skalierungsregel die folgenden Werte:
Metrikname: Wählen Sie Prozentsatz der CPU-Auslastung aus.
Operator: Legen sie diesen auf Größer als fest.
Schwellenwert für Metriken: Legen Sie den Wert auf 70 fest.
Dauer (Minuten): Legen Sie den Wert auf 5 fest.
Statistik zum Aggregationsintervall: Wählen Sie Durchschnitt aus.
Vorgang: Wählen Sie die Option Anzahl erhöhen um aus.
Anzahl der Instanzen: Legen Sie den Wert auf 2 fest.
Wählen Sie Hinzufügen aus, um die Regel zu erstellen:
Lassen Sie den Bereich „Konfiguration“ geöffnet. Im nächsten Abschnitt passen Sie die Einstellungen für die Regeln an.
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.
Die folgenden Schritte passen die Konfiguration der Regeln an, um eine Regel zum Herunterskalieren zu unterstützen.
Wählen Sie für die Option Regeln den Link Regel hinzufügen aus. Die Seite Skalierungsregel wird geöffnet.
Konfigurieren Sie auf der Seite Skalierungsregel die folgenden Werte:
Metrikname: Wählen Sie Prozentsatz der CPU-Auslastung aus.
Operator: Legen Sie diesen auf Weniger als fest.
Schwellenwert für Metriken: Legen Sie den Wert auf 30 fest.
Dauer (Minuten): Legen Sie den Wert auf 5 fest.
Statistik zum Aggregationsintervall: Wählen Sie Durchschnitt aus.
Vorgang: Wählen Sie die Option Anzahl verringern um aus.
Anzahl der Instanzen: Legen Sie den Wert auf 1 fest.
Wählen Sie Hinzufügen aus, um die Regel zu erstellen:
Wenn Sie sowohl Regeln für die horizontale Skalierung als auch für die Herunterskalierung konfigurieren, sehen Ihre Regeln ähnlich wie im folgenden Screenshot aus. Diese Regeln legen fest, 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.
Lassen Sie den Bereich „Konfiguration“ geöffnet. Im nächsten Abschnitt geben Sie weitere Skalierungseinstellungen an.
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.
Mit den folgenden Schritten wird die Regelkonfiguration auf der Seite Benutzerdefinierte Autoskalierung fortgesetzt.
Wählen Sie unten auf der Seite den Link Skalierungsbedingung hinzufügen aus.
Wählen Sie auf der Seite Skalierungsbedingung die Option Auf Basis von Metrik skalieren und dann Regel hinzufügen aus. Die Seite Skalierungsregel wird geöffnet.
Konfigurieren Sie auf der Seite Skalierungsregel die folgenden Werte:
Metrikquelle: Wählen Sie Andere Ressource aus.
Ressourcentyp: Wählen Sie Onlineendpunkte für maschinelles Lernen aus.
Ressource: Wählen Sie Ihren Endpunkt aus.
Metrikname: Wählen Sie Anforderungswartezeit aus.
Operator: Legen sie diesen auf Größer als fest.
Schwellenwert für Metriken: Legen Sie den Wert auf 70 fest.
Dauer (Minuten): Legen Sie den Wert auf 5 fest.
Statistik zum Aggregationsintervall: Wählen Sie Durchschnitt aus.
Vorgang: Wählen Sie die Option Anzahl erhöhen um aus.
Anzahl der Instanzen: Legen Sie den Wert auf 1 fest.
Wählen Sie Hinzufügen aus, um die Regel zu erstellen:
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.
Die folgenden Schritte konfigurieren die Regel mit Optionen auf der Seite Benutzerdefinierte Autoskalierung im Studio.
Wählen Sie unten auf der Seite den Link Skalierungsbedingung hinzufügen aus.
Wählen Sie auf der Seite Skalierungsbedingung die Option Auf eine bestimmte Anzahl von Instanzen skalieren und dann den Link Regel hinzufügen aus. Die Seite Skalierungsregel wird geöffnet.
Konfigurieren Sie auf der Seite Skalierungsregel die folgenden Werte:
Anzahl der Instanzen: Legen Sie den Wert auf 2 fest.
Zeitplan: Wählen Sie die An bestimmten Tagen wiederholen aus.
Legen Sie das Zeitplanmuster fest: Wählen Sie Wiederholen jeden und dann Samstag und Sonntag aus.
Wählen Sie Hinzufügen aus, um die Regel zu erstellen:
Aktivieren oder Deaktivieren der Autoskalierung
Sie können ein bestimmtes Profil für die Autoskalierung aktivieren oder deaktivieren.
Wählen Sie zum Deaktivieren eines verwendeten Autoskalierungsprofils Manuellen Skalierung aus und dann Speichern aus.
Um ein Autoskalierungsprofil zu aktivieren, wählen Sie Benutzerdefinierte Autoskalierung aus. Das Studio listet alle erkannten Profile für die Autoskalierung für den Arbeitsbereich auf. Wählen Sie ein Profil und dann Speichern aus, um es zu aktivieren.
Löschen von Ressourcen
Falls Sie Ihre Bereitstellungen nicht verwenden möchten, löschen Sie die Ressourcen mithilfe folgender Schritte.
# 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