Questo articolo illustra come gestire l'uso della risorsa in una distribuzione configurando la scalabilità automatica in base alle metriche e alle pianificazioni. Il processo di scalabilità automatica consente di eseguire automaticamente la giusta quantità di risorse per gestire il carico nell'applicazione. Gli endpoint online in Azure Machine Learning supportano la scalabilità automatica tramite l'integrazione con la funzionalità di scalabilità automatica in Monitoraggio di Azure.
La scalabilità automatica di Monitoraggio di Azure consente di impostare regole che attivano una o più azioni di scalabilità automatica nel momento in cui vengono soddisfatte le condizioni. È possibile configurare il ridimensionamento basato sulle metriche (ad esempio l'utilizzo della CPU superiore al 70%), il ridimensionamento basato sulla pianificazione (ad esempio le regole di ridimensionamento per le ore di ufficio di punta) o una combinazione dei due. Per altre informazioni, vedere Panoramica della scalabilità automatica in Microsoft Azure.
È attualmente possibile gestire la scalabilità automatica usando l'interfaccia della riga di comando di Azure, le API REST, Azure Resource Manager, Python SDK o il portale di Azure basato su browser.
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.
Per usare Python SDK per gestire il servizio Monitoraggio di Azure, installare il pacchetto azure-mgmt-monitor con il comando seguente:
pip install azure-mgmt-monitor
Definire il profilo di scalabilità automatica
Per abilitare la scalabilità automatica per un endpoint online, è innanzitutto necessario definire un profilo di scalabilità automatica. Questo profilo specifica la capacità predefinita, minima e massima del set di scalabilità. L'esempio seguente illustra come impostare il numero di istanze di macchine virtuali (VM) per la capacità di scalabilità predefinita, minima e massima.
Se le impostazioni predefinite per l'interfaccia della riga di comando di Azure non sono già state impostate, salvare le proprie impostazioni predefinite. Per evitare di passare più volte i valori per la sottoscrizione, l'area di lavoro e il gruppo di risorse, eseguire questo codice:
az account set --subscription <subscription ID>
az configure --defaults workspace=<Azure Machine Learning workspace name> group=<resource group>
Impostare i nomi di endpoint e distribuzione:
# set your existing endpoint name
ENDPOINT_NAME=your-endpoint-name
DEPLOYMENT_NAME=blue
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`
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 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 = []
)
]
}
)
Nell'elenco degli endpoint disponibili selezionare l'endpoint da configurare:
Nella scheda Dettagli per l'endpoint scelto, selezionare Configura ridimensionamento automatico:
Per l'opzione Scegliere come ridimensionare le risorse, selezionare Scalabilità automatica personalizzata per avviare la configurazione.
Per l'opzione condizione di scalabilità predefinita, configurare i valori seguenti:
Modalità ridimensionamento: selezionare Ridimensiona in base a una metrica.
Limiti dell'istanza>Minimo: impostare il valore su 2.
Limiti dell'istanza>Massimo: impostare il valore su 5.
Limiti dell'istanza>Predefinito: impostare il valore su 2.
Lasciare aperto il riquadro di configurazione. Nella sezione successiva si configurano le impostazioni per le regole.
Creare una regola di scale-out basata sulle metriche di distribuzione
Una regola di scale-out comune consiste nell'aumentare il numero di istanze di VM quando il carico medio della CPU è elevato. L'esempio seguente mostra come 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 è parte del profilo my-scale-settings dove autoscale-name corrisponde alla parte name del profilo. Il valore dell'argomento per la regola condition indica che la regola viene attivata quando "Il consumo medio della CPU tra le istanze di VM supera il 70% per cinque minuti". Quando la condizione è soddisfatta, vengono allocate altre due istanze di VM.
Nota
Per altre informazioni, vedere il riferimento sulla sintassi dell'interfaccia della riga di comando di Azure scalabilità automatica monitor az.
Questa regola fa riferimento alla media degli ultimi cinque minuti del valore CPUUtilizationpercentage degli argomenti metric_name, time_window e time_aggregation. Se il valore della metrica è maggiore del threshold di 70, la distribuzione alloca altre due istanze di VM.
Aggiornare il profilo my-scale-settings per includere questa regola:
I passi seguenti proseguono la configurazione della scalabilità automatica.
Per l'opzione Regole, selezionare il collegamento Aggiungi una regola. Si apre la pagina Regola di scalabilità.
Nella pagina Regola di scalabilità configurare i valori seguenti:
Nome metrica: selezionare Percentuale utilizzo CPU.
Operatore: impostato su Maggiore di.
Soglia metrica: impostare il valore su 70.
Durata (minuti): impostare il valore su 5.
Statistica intervallo di tempo: selezionare Media.
Operazione: selezionare Aumenta conteggio di.
Numero di istanze: impostare il valore su 2.
Selezionare Aggiungi per creare la regola:
Lasciare aperto il riquadro di configurazione. Nella sezione successiva si regolano le impostazioni di Regole.
Creare una regola di riduzione in base alle metriche di distribuzione
Quando il carico medio della CPU è leggero, una regola di riduzione può ridurre il numero di istanze di VM. L'esempio seguente mostra come rilasciare un singolo nodo fino a lasciarne un minimo di due, se il carico della CPU è inferiore al 30% per cinque minuti.
I passi seguenti regolano la configurazione di Regole per supportare una regola di riduzione.
Per l'opzione Regole, selezionare il collegamento Aggiungi una regola. Si apre la pagina Regola di scalabilità.
Nella pagina Regola di scalabilità configurare i valori seguenti:
Nome metrica: selezionare Percentuale utilizzo CPU.
Operatore: impostato su Minore di.
Soglia metrica: impostare il valore su 30.
Durata (minuti): impostare il valore su 5.
Statistica intervallo di tempo: selezionare Media.
Operazione: selezionare Riduci conteggio di.
Numero di istanze: impostare il valore su 1.
Selezionare Aggiungi per creare la regola:
Se si configurano regole sia di scale-out sia di riduzione, saranno simili alla schermata seguente. Le regole specificano 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.
Lasciare aperto il riquadro di configurazione. Nella sezione successiva si specificano altre impostazioni di scalabilità.
Creare una regola di scalabilità basata sulle metriche degli endpoint
Nelle sezioni precedenti sono state create regole per aumentare o ridurre le prestazioni in base alle metriche di distribuzione. Inoltre è possibile creare una regola applicabile all'endpoint di distribuzione. In questa sezione si apprenderà come allocare un altro nodo quando la latenza della richiesta è maggiore di una media di 70 millisecondi per 5 minuti.
I passi seguenti continuano la configurazione della regola nella pagina Scalabilità automatica personalizzata.
Nella parte inferiore della pagina selezionare il collegamento Aggiungi una condizione di scalabilità.
Nella pagina Condizione di scalabilità, selezionare Ridimensiona in base alla metrica e quindi selezionare il collegamento Aggiungi una regola. Si apre la pagina Regola di scalabilità.
Nella pagina Regola di scalabilità configurare i valori seguenti:
Origine metrica: selezionare Altra risorsa.
Tipo di risorsa: selezionare Endpoint online di Machine Learning.
Risorsa: selezionare l'endpoint.
Nome metrica: selezionare Latenza della richiesta.
Operatore: impostato su Maggiore di.
Soglia metrica: impostare il valore su 70.
Durata (minuti): impostare il valore su 5.
Statistica intervallo di tempo: selezionare Media.
Operazione: selezionare Aumenta conteggio di.
Numero di istanze: impostare il valore su 1.
Selezionare Aggiungi per creare la regola:
Trovare gli ID per le metriche supportate
Se si desidera usare altre metriche nel codice, per configurare le regole di scalabilità automatica usando l'interfaccia della riga di comando di Azure o il pacchetto SDK, vedere la tabella in Metriche disponibili.
Creare una regola di scalabilità in base alla pianificazione
È anche possibile creare regole che vengono applicate solo in orari o giorni specifici. In questa sezione viene creata una regola che imposta il numero di nodi su 2 nei fine settimana.
I passi seguenti consentono di configurare la regola con le opzioni nella pagina Scalabilità automatica personalizzata in Studio.
Nella parte inferiore della pagina selezionare il collegamento Aggiungi una condizione di scalabilità.
Nella pagina Condizione di scalabilità selezionare Ridimensiona in un numero di istanze specifico, quindi selezionare il collegamento Aggiungi una regola. Si apre la pagina Regola di scalabilità.
Nella pagina Regola di scalabilità configurare i valori seguenti:
Numero di istanze: impostare il valore su 2.
Pianificazione: selezionare Ripeti in giorni specifici.
Impostare il criterio di pianificazione: selezionare Ripeti ogni e sabato e domenica.
Selezionare Aggiungi per creare la regola:
Abilitare o disabilitare la scalabilità automatica
È possibile abilitare o disabilitare uno specifico profilo di scalabilità automatica.
Per disabilitare un profilo di scalabilità automatica in uso, selezionare Scalabilità manuale e poi selezionare Salva.
Per abilitare un profilo di scalabilità automatica, selezionare Scalabilità automatica personalizzata. Studio elenca tutti i profili di scalabilità automatica riconosciuti per l'area di lavoro. Per abilitare, selezionare un profilo e poi selezionare Salva.
Eliminare risorse
Se non si intende usare le distribuzioni, eliminare le risorse seguendo i passi seguenti.
# 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