La scalabilità automatica usa automaticamente la quantità corretta di risorse per gestire il carico dell'applicazione. Gli endpoint online supportano la scalabilità automatica tramite l'integrazione con la funzionalità di scalabilità automatica di Monitoraggio di Azure.
La scalabilità automatica di Monitoraggio di Azure supporta un set completo di regole. È possibile configurare il ridimensionamento in base alle metriche (ad esempio impostando l'utilizzo della CPU >70%), in base alla pianificazione (ad esempio le definendo regole di ridimensionamento per le ore lavorative di punta) o a una combinazione di tali opzioni. Per altre informazioni, vedere Panoramica della scalabilità automatica in Microsoft Azure.
Per gestire la scalabilità automatica, è oggi possibile usare l'interfaccia della riga di comando di Azure, REST, Azure Resource Manager o il portale di Azure basato su browser. In seguito verrà aggiunto il supporto per altri SDK di Azure Machine Learning, come Python SDK.
Per usare la scalabilità automatica, è necessario assegnare il ruolo microsoft.insights/autoscalesettings/write all'identità che gestisce la scalabilità automatica. È possibile usare qualsiasi ruolo predefinito o personalizzato che consenta questa azione. Per indicazioni generali sulla gestione dei ruoli per Azure Machine Learning, vedere Gestire utenti e ruoli. Per altre informazioni sulla scalabilità automatica da Monitoraggio di Azure, vedere Microsoft.Insights autoscalesettings.
Definire un profilo di scalabilità automatica
Per abilitare la scalabilità automatica per un endpoint, è innanzitutto necessario definire un profilo di scalabilità automatica. Questo profilo definisce la capacità predefinita, minima e massima del set di scalabilità. L'esempio seguente consente di impostare la capacità predefinita e minima su due istanze di macchine virtuali e la capacità massima su cinque:
Nel frammento di codice seguente vengono impostati i nomi dell'endpoint e della distribuzione:
# set your existing endpoint name
ENDPOINT_NAME=your-endpoint-name
DEPLOYMENT_NAME=blue
Successivamente, ottenere l'ID della distribuzione e dell'endpoint per Azure Resource Manager:
# 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`
Il frammento di codice seguente consente di creare il profilo di scalabilità automatica:
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
Definire variabili per l'area di lavoro, l'endpoint e la distribuzione:
# 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 = []
)
]
}
)
Nello studio di Azure Machine Learning selezionare l'area di lavoro e quindi selezionare Endpoint dal lato sinistro della pagina. Dopo aver elencato gli endpoint selezionare quello da configurare.
Nella scheda Dettagli per l'endpoint selezionare Configura ridimensionamento automatico.
In Scegliere come ridimensionare le risorse selezionare Scalabilità automatica personalizzata per avviare la configurazione. Per la condizione di scalabilità predefinita usare i valori seguenti:
Impostare Modalità di ridimensionamento su Ridimensiona in base a una metrica.
Impostare Minimo su 2.
Impostare Massimo su 5.
Impostare Predefinito su 2.
Creare una regola per aumentare il numero di istanze con le metriche
Una regola di ridimensionamento comune consente di aumentare il numero di istanze della macchina virtuale quando il carico medio della CPU è alto. L'esempio seguente consente di allocare altri due nodi (fino al massimo) se il carico medio della CPU è maggiore del 70% per cinque minuti:
az monitor autoscale rule create \
--autoscale-name $AUTOSCALE_SETTINGS_NAME \
--condition "CpuUtilizationPercentage > 70 avg 5m" \
--scale out 2
La regola fa parte del profilo di my-scale-settings (autoscale-name corrisponde a name nel profilo). Il valore del relativo argomento condition indica che la regola deve essere attivata quando "Il consumo medio della CPU tra le istanze della macchina virtuale supera il 70% per cinque minuti". Quando quella condizione è soddisfatta, vengono allocate altre due istanze della macchina virtuale.
Nota
Per altre informazioni sulla sintassi dell'interfaccia della riga di comando, vedere az monitor autoscale.
Questa regola fa riferimento alla media degli ultimi cinque minuti di CPUUtilizationpercentage restituiti dagli argomenti metric_name, time_window e time_aggregation. Quando il valore della metrica è maggiore del valore di threshold pari a 70, vengono allocate altre due istanze della macchina virtuale.
Aggiornare il profilo my-scale-settings per includere questa regola:
Nella sezione Regole selezionare Aggiungi una regola. Verrà visualizzata la pagina Regola di ridimensionamento. Usare le informazioni seguenti per popolare i campi in questa pagina:
Impostare Nome metrica su Percentuale utilizzo CPU.
Impostare Operatore su Maggiore di e impostare Soglia della metrica su 70.
Impostare Durata del test (minuti) su 5. Lasciare Statistica intervallo di tempo impostato su Media.
Impostare Operazione su Aumenta numero di e impostare Numero di istanze su 2.
Selezionare il pulsante Aggiungi per creare la regola.
Creare una regola per la riduzione del numero di istanze con le metriche
Quando il carico è leggero, una regola di ridimensionamento consente di ridurre il numero di istanze della macchina virtuale. L'esempio seguente consente di rilasciare un singolo nodo fino a lasciarne un minimo di due, se il carico della CPU è inferiore al 30% per cinque minuti:
Nella sezione Regole selezionare Aggiungi una regola. Verrà visualizzata la pagina Regola di ridimensionamento. Usare le informazioni seguenti per popolare i campi in questa pagina:
Impostare Nome metrica su Percentuale utilizzo CPU.
Impostare Operatore su Minore di e Soglia della metrica su 30.
Impostare Durata del test (minuti) su 5.
Impostare Operazione su Diminuisci numero di e impostare Numero di istanze su 1.
Selezionare il pulsante Aggiungi per creare la regola.
Se sono presenti sia regole di aumento che di riduzione delle istanze, le regole saranno simili alla schermata seguente. È stato specificato che se il carico medio della CPU supera il 70% per cinque minuti, devono essere allocati altri due nodi, fino al limite di cinque. Se il carico della CPU è inferiore al 30% per cinque minuti, deve essere rilasciato un nodo singolo fino a lasciarne un minimo di due.
Creare una regola di ridimensionamento in base alle metriche degli endpoint
Regole precedenti applicate alla distribuzione. Aggiungere ora una regola applicabile all'endpoint. In questo esempio, se la latenza della richiesta è maggiore di una media di 70 millisecondi per cinque minuti, allocare un altro nodo.
Nella parte inferiore della pagina selezionare + Aggiungi una condizione di scalabilità.
Selezionare Scalabilità basata sulla metrica e quindi selezionare Aggiungi una regola. Verrà visualizzata la pagina Regola di ridimensionamento. Usare le informazioni seguenti per popolare i campi in questa pagina:
Impostare Origine metrica su Altra risorsa.
Impostare Tipo di risorsa su Endpoint online di Machine Learning.
Impostare Risorsa sull'endpoint.
Impostare Nome della metrica su Latenza delle richiester.
Impostare Operatore su Maggiore di e Soglia della metrica su 70.
Impostare Durata del test (minuti) su 5.
Impostare Operazione su Aumenta numero di e impostare Numero di istanze su 1.
Creare regole di ridimensionamento in base a una pianificazione
È anche possibile creare regole che vengono applicate solo in orari o giorni specifici. In questo esempio il numero di nodi è impostato su 2 nel fine settimana.
Nella parte inferiore della pagina selezionare + Aggiungi una condizione di scalabilità. Nella nuova condizione di scalabilità usare le seguenti informazioni per popolare i campi:
Selezionare Ridimensiona in base a un numero di istanze specifico.
Impostare Numero di istanze su 2.
Impostare Pianificazione su Ripeti in giorni specifici.
Impostare la pianificazione su Ripeti ogniSabato e Domenica.
Eliminare risorse
Se le distribuzioni non verranno utilizzate, eliminarle:
# 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