GÄLLER FÖR:
Azure CLI ml extension v2 (current)
Python SDK azure-ai-ml v2 (aktuell)
I den här artikeln lär du dig att hantera resursanvändning i en distribution genom att konfigurera automatisk skalning baserat på mått och scheman. Med autoskalningsprocessen kan du automatiskt köra rätt mängd resurser för att hantera belastningen på ditt program.
Onlineslutpunkter i Azure Machine Learning stöder automatisk skalning genom integrering med autoskalningsfunktionen i Azure Monitor.
Med autoskalning i Azure Monitor kan du ange regler som utlöser en eller flera autoskalningsåtgärder när reglernas villkor uppfylls. Du kan konfigurera måttbaserad skalning (till exempel processoranvändning som är större än 70 %), schemabaserad skalning (till exempel skalningsregler för tider med hög belastning) eller en kombination av de två. Mer information finns i Översikt över autoskalning i Microsoft Azure.
Du kan för närvarande hantera automatisk skalning med hjälp av Azure CLI, REST-API:er, Azure Resource Manager, Python SDK eller webbläsarbaserade Azure Portal.
Förutsättningar
En distribuerad slutpunkt. Mer information finns i Distribuera och poängsätta en maskininlärningsmodell med hjälp av en onlineslutpunkt.
Om du vill använda autoskalning måste rollen microsoft.insights/autoscalesettings/write tilldelas till den identitet som hanterar autoskalning. Du kan använda inbyggda eller anpassade roller som tillåter den här åtgärden. Allmän vägledning om hur du hanterar roller för Azure Machine Learning finns i Hantera användare och roller. Mer information om autoskalningsinställningar från Azure Monitor finns i Autoskalning av Microsoft.Insights.
Om du vill använda Python SDK för att hantera Azure Monitor-tjänsten installerar azure-mgmt-monitor du paketet med följande kommando:
pip install azure-mgmt-monitor
Definiera autoskalningsprofil
Om du vill aktivera autoskalning för en onlineslutpunkt definierar du först en profil för autoskalning. Profilen anger standardkapaciteten, lägsta och högsta skalningsuppsättning. I följande exempel visas hur du anger antalet virtuella datorinstanser (VM) för standardkapacitet, lägsta och högsta skalningskapacitet.
GÄLLER FÖR:
Azure CLI ml-tillägget v2 (aktuellt)
Om du inte redan har angett standardinställningarna för Azure CLI sparar du standardinställningarna. Kör den här koden för att undvika att skicka in värdena för din prenumeration, arbetsyta och resursgrupp flera gånger:
az account set --subscription <subscription ID>
az configure --defaults workspace=<Azure Machine Learning workspace name> group=<resource group>
Ange slutpunkten och distributionsnamnen:
# set your existing endpoint name
ENDPOINT_NAME=your-endpoint-name
DEPLOYMENT_NAME=blue
Hämta Azure Resource Manager-ID:t för distributionen och slutpunkten:
# 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`
Skapa autoskalningsprofilen:
az monitor autoscale create \
--name $AUTOSCALE_SETTINGS_NAME \
--resource $DEPLOYMENT_RESOURCE_ID \
--min-count 2 --max-count 5 --count 2
GÄLLER FÖR:
Python SDK azure-ai-ml v2 (aktuell)
Importera nödvändiga moduler:
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
Definiera variabler för arbetsytan, slutpunkten och distributionen:
subscription_id = "<YOUR-SUBSCRIPTION-ID>"
resource_group = "<YOUR-RESOURCE-GROUP>"
workspace = "<YOUR-WORKSPACE>"
endpoint_name = "<YOUR-ENDPOINT-NAME>"
deployment_name = "blue"
Hämta Azure Machine Learning- och Azure Monitor-klienter:
credential = DefaultAzureCredential()
ml_client = MLClient(
credential, subscription_id, resource_group, workspace
)
mon_client = MonitorManagementClient(
credential, subscription_id
)
Hämta slutpunkts- och distributionsobjekten:
deployment = ml_client.online_deployments.get(
deployment_name, endpoint_name
)
endpoint = ml_client.online_endpoints.get(
endpoint_name
)
Skapa en autoskalningsprofil:
# 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 = []
)
]
}
)
I Azure Machine Learning-studio går du till din arbetsyta och väljer Slutpunkter på den vänstra menyn.
I listan över tillgängliga slutpunkter väljer du den slutpunkt som ska konfigureras:
På fliken Information för den valda slutpunkten väljer du Konfigurera automatisk skalning:
För alternativet Välj hur du skalar dina resurser väljer du Anpassad autoskalning för att påbörja konfigurationen.
För alternativet Standardskalningsvillkor konfigurerar du följande värden:
-
Skalningsläge: Välj Skala baserat på ett mått.
-
>
: Ange värdet till 2.
-
>
: Ange värdet till 5.
-
Standard för instansgränser>: Ange värdet till 2.
Låt konfigurationsfönstret vara öppet. I nästa avsnitt konfigurerar du regelinställningarna .
Skapa utskalningsregel baserat på distributionsmått
En vanlig utskalningsregel är att öka antalet virtuella datorinstanser när den genomsnittliga CPU-belastningen är hög. I följande exempel visas hur du allokerar ytterligare två noder (upp till maximalt) om processorns genomsnittliga belastning är större än 70 % i 5 minuter:
GÄLLER FÖR:
Azure CLI ml-tillägget v2 (aktuellt)
az monitor autoscale rule create \
--autoscale-name $AUTOSCALE_SETTINGS_NAME \
--condition "CpuUtilizationPercentage > 70 avg 5m" \
--scale out 2
Regeln är en del av profilen my-scale-settings , där autoscale-name matchar name delen av profilen. Värdet för regelargumentet condition anger att regeln utlöses när "Den genomsnittliga CPU-förbrukningen bland de virtuella datorinstanserna överstiger 70 % i 5 minuter". När villkoret är uppfyllt allokeras ytterligare två virtuella datorinstanser.
GÄLLER FÖR:
Python SDK azure-ai-ml v2 (aktuell)
Skapa regeldefinitionen:
rule_scale_out = ScaleRule(
metric_trigger = MetricTrigger(
metric_name="CpuUtilizationPercentage",
metric_resource_uri = deployment.id,
time_grain = datetime.timedelta(minutes = 1),
statistic = "Average",
operator = "GreaterThan",
time_aggregation = "Last",
time_window = datetime.timedelta(minutes = 5),
threshold = 70
),
scale_action = ScaleAction(
direction = "Increase",
type = "ChangeCount",
value = 2,
cooldown = datetime.timedelta(hours = 1)
)
)
Den här regeln refererar till det sista medelvärdet på 5 minuter av CPUUtilizationpercentage värdet från argumenten metric_name, time_windowoch time_aggregation. När värdet för måttet är större än threshold 70 allokerar distributionen ytterligare två VM-instanser.
Uppdatera profilen så att den my-scale-settings innehåller den här regeln:
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 = [
rule_scale_out
]
)
]
}
)
Följande steg fortsätter med autoskalningskonfigurationen.
För alternativet Regler väljer du länken Lägg till en regel. Sidan Skalningsregel öppnas.
På sidan Skalningsregel konfigurerar du följande värden:
-
Måttnamn: Välj CPU-användningsprocent.
-
Operator: Ställ in på Större än.
-
Tröskelvärde för mått: Ange värdet till 70.
-
Varaktighet (minuter): Ange värdet till 5.
-
Tidsintervallstatistik: Välj Genomsnitt.
-
Åtgärd: Välj Öka antalet med.
-
Antal instanser: Ange värdet till 2.
Välj Lägg till för att skapa regeln:
Låt konfigurationsfönstret vara öppet. I nästa avsnitt justerar du inställningarna för Regler .
Skapa inskalningsregel baserat på distributionsmått
När den genomsnittliga CPU-belastningen är lätt kan en inskalningsregel minska antalet vm-instanser. I följande exempel visas hur du släpper en enskild nod ned till minst två, om CPU-belastningen är mindre än 30 % i 5 minuter.
GÄLLER FÖR:
Azure CLI ml-tillägget v2 (aktuellt)
az monitor autoscale rule create \
--autoscale-name $AUTOSCALE_SETTINGS_NAME \
--condition "CpuUtilizationPercentage < 25 avg 5m" \
--scale in 1
GÄLLER FÖR:
Python SDK azure-ai-ml v2 (aktuell)
Skapa regeldefinitionen:
rule_scale_in = ScaleRule(
metric_trigger = MetricTrigger(
metric_name="CpuUtilizationPercentage",
metric_resource_uri = deployment.id,
time_grain = datetime.timedelta(minutes = 1),
statistic = "Average",
operator = "LessThan",
time_aggregation = "Last",
time_window = datetime.timedelta(minutes = 5),
threshold = 30
),
scale_action = ScaleAction(
direction = "Increase",
type = "ChangeCount",
value = 1,
cooldown = datetime.timedelta(hours = 1)
)
)
Uppdatera profilen så att den my-scale-settings innehåller den här regeln:
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 = [
rule_scale_out,
rule_scale_in
]
)
]
}
)
Följande steg justerar regelkonfigurationen för att stödja en skalning i regeln.
För alternativet Regler väljer du länken Lägg till en regel. Sidan Skalningsregel öppnas.
På sidan Skalningsregel konfigurerar du följande värden:
-
Måttnamn: Välj CPU-användningsprocent.
-
Operator: Ställ in på Mindre än.
-
Tröskelvärde för mått: Ange värdet till 30.
-
Varaktighet (minuter): Ange värdet till 5.
-
Tidsintervallstatistik: Välj Genomsnitt.
-
Åtgärd: Välj Minska antalet med.
-
Antal instanser: Ange värdet till 1.
Välj Lägg till för att skapa regeln:
Om du konfigurerar både utskalnings- och inskalningsregler ser reglerna ut ungefär som följande skärmbild. Reglerna anger att om den genomsnittliga CPU-belastningen överskrider 70 % i 5 minuter ska ytterligare två noder allokeras, upp till gränsen på fem. Om CPU-belastningen är mindre än 30 % i 5 minuter bör en enskild nod släppas, ned till minst två.
Låt konfigurationsfönstret vara öppet. I nästa avsnitt anger du andra skalningsinställningar.
Skapa skalningsregel baserat på slutpunktsmått
I föregående avsnitt skapade du regler för att skala in eller ut baserat på distributionsmått. Du kan också skapa en regel som gäller för distributionsslutpunkten. I det här avsnittet får du lära dig hur du allokerar en annan nod när svarstiden för begäran är större än i genomsnitt 70 millisekunder i 5 minuter.
GÄLLER FÖR:
Azure CLI ml-tillägget v2 (aktuellt)
az monitor autoscale rule create \
--autoscale-name $AUTOSCALE_SETTINGS_NAME \
--condition "RequestLatency > 70 avg 5m" \
--scale out 1 \
--resource $ENDPOINT_RESOURCE_ID
GÄLLER FÖR:
Python SDK azure-ai-ml v2 (aktuell)
Skapa regeldefinitionen:
rule_scale_out_endpoint = ScaleRule(
metric_trigger = MetricTrigger(
metric_name="RequestLatency",
metric_resource_uri = endpoint.id,
time_grain = datetime.timedelta(minutes = 1),
statistic = "Average",
operator = "GreaterThan",
time_aggregation = "Last",
time_window = datetime.timedelta(minutes = 5),
threshold = 70
),
scale_action = ScaleAction(
direction = "Increase",
type = "ChangeCount",
value = 1,
cooldown = datetime.timedelta(hours = 1)
)
)
Den här regelns metric_resource_uri fält refererar nu till slutpunkten i stället för distributionen.
Uppdatera profilen så att den my-scale-settings innehåller den här regeln:
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 = [
rule_scale_out,
rule_scale_in,
rule_scale_out_endpoint
]
)
]
}
)
Följande steg fortsätter regelkonfigurationen på sidan Anpassad autoskalning .
Längst ned på sidan väljer du länken Lägg till ett skalningsvillkor .
På sidan Skalningsvillkor väljer du Skala baserat på mått och väljer sedan länken Lägg till en regel . Sidan Skalningsregel öppnas.
På sidan Skalningsregel konfigurerar du följande värden:
-
Måttkälla: Välj Annan resurs.
-
Resurstyp: Välj Machine Learning Online-slutpunkter.
-
Resurs: Välj din slutpunkt.
-
Måttnamn: Välj Svarstid för begäran.
-
Operator: Ställ in på Större än.
-
Tröskelvärde för mått: Ange värdet till 70.
-
Varaktighet (minuter): Ange värdet till 5.
-
Tidsintervallstatistik: Välj Genomsnitt.
-
Åtgärd: Välj Öka antalet med.
-
Antal instanser: Ange värdet till 1.
Välj Lägg till för att skapa regeln:
Hitta ID:t för mått som stöds
Du kan använda andra mått när du använder Azure CLI eller SDK för att konfigurera regler för autoskalning.
Skapa skalningsregel baserat på schema
Du kan också skapa regler som endast gäller vissa dagar eller vid vissa tidpunkter. I det här avsnittet skapar du en regel som anger antalet noder till 2 på helgerna.
GÄLLER FÖR:
Azure CLI ml-tillägget v2 (aktuellt)
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"
GÄLLER FÖR:
Python SDK azure-ai-ml v2 (aktuell)
mon_client.autoscale_settings.create_or_update(
resource_group,
autoscale_settings_name,
parameters = {
"location" : endpoint.location,
"target_resource_uri" : deployment.id,
"profiles" : [
AutoscaleProfile(
name="Default",
capacity={
"minimum" : 2,
"maximum" : 2,
"default" : 2
},
recurrence = Recurrence(
frequency = "Week",
schedule = RecurrentSchedule(
time_zone = "Pacific Standard Time",
days = ["Saturday", "Sunday"],
hours = [],
minutes = []
)
)
)
]
}
)
Följande steg konfigurerar regeln med alternativ på sidan Anpassad autoskalning i studio.
Längst ned på sidan väljer du länken Lägg till ett skalningsvillkor .
På sidan Skalningsvillkor väljer du Skala till ett visst instansantal och väljer sedan länken Lägg till en regel . Sidan Skalningsregel öppnas.
På sidan Skalningsregel konfigurerar du följande värden:
-
Antal instanser: Ange värdet till 2.
-
Schema: Välj Upprepa specifika dagar.
- Ange schemamönstret: Välj Upprepa varje lördag och söndag.
Välj Lägg till för att skapa regeln:
Aktivera eller inaktivera autoskalning
Du kan aktivera eller inaktivera en specifik autoskalningsprofil.
GÄLLER FÖR:
Python SDK azure-ai-ml v2 (aktuell)
mon_client.autoscale_settings.create_or_update(
resource_group,
autoscale_settings_name,
parameters = {
"location" : endpoint.location,
"target_resource_uri" : deployment.id,
"enabled" : False
}
)
Om du vill inaktivera en autoskalningsprofil som används väljer du Manuell skalning och sedan Spara.
Om du vill aktivera en autoskalningsprofil väljer du Anpassad autoskalning. Studion visar alla identifierade autoskalningsprofiler för arbetsytan. Välj en profil och välj sedan Spara för att aktivera.
Ta bort resurser
Om du inte ska använda dina distributioner tar du bort resurserna med följande steg.
GÄLLER FÖR:
Azure CLI ml-tillägget v2 (aktuellt)
# 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
GÄLLER FÖR:
Python SDK azure-ai-ml v2 (aktuell)
mon_client.autoscale_settings.delete(
resource_group,
autoscale_settings_name
)
ml_client.online_endpoints.begin_delete(endpoint_name)
I Azure Machine Learning-studio går du till din arbetsyta och väljer Slutpunkter på den vänstra menyn.
I listan över slutpunkter väljer du den slutpunkt som ska tas bort (kontrollera cirkeln bredvid modellnamnet).
Välj Ta bort.
Du kan också ta bort en hanterad onlineslutpunkt direkt på sidan med slutpunktsinformation.
Relaterat innehåll