Condividi tramite


Scalabilità automatica di endpoint online in Azure Machine Learning

SI APPLICA A:Estensione ml dell'interfaccia della riga di comando di Azure v2 (corrente)Python SDK azure-ai-ml v2 (corrente)

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.

Diagramma che mostra come la scalabilità automatica aggiunge e rimuove le istanze secondo le necessità.

È 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.

Prerequisiti

  • Un endpoint distribuito. Per altre informazioni, vedere Distribuire e assegnare punteggi a un modello di Machine Learning usando un endpoint online.

  • 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.

SI APPLICA A: estensione ML dell'interfaccia della riga di comando di Azure v2 (corrente)

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>
  1. Impostare i nomi di endpoint e distribuzione:

    # set your existing endpoint name
    ENDPOINT_NAME=your-endpoint-name
    DEPLOYMENT_NAME=blue
    
  2. 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`
    
  3. Creare il profilo di scalabilità automatica:

    az monitor autoscale create \
      --name $AUTOSCALE_SETTINGS_NAME \
      --resource $DEPLOYMENT_RESOURCE_ID \
      --min-count 2 --max-count 5 --count 2
    

Nota

Per altre informazioni, vedere il riferimento scalabilità automatica monitor az.

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:

SI APPLICA A: estensione ML dell'interfaccia della riga di comando di Azure v2 (corrente)

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.

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.

SI APPLICA A: estensione ML dell'interfaccia della riga di comando di Azure v2 (corrente)

az monitor autoscale rule create \
  --autoscale-name $AUTOSCALE_SETTINGS_NAME \
  --condition "CpuUtilizationPercentage < 25 avg 5m" \
  --scale in 1

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.

SI APPLICA A: estensione ML dell'interfaccia della riga di comando di Azure v2 (corrente)

az monitor autoscale rule create \
 --autoscale-name $AUTOSCALE_SETTINGS_NAME \
 --condition "RequestLatency > 70 avg 5m" \
 --scale out 1 \
 --resource $ENDPOINT_RESOURCE_ID

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.

SI APPLICA A: estensione ML dell'interfaccia della riga di comando di Azure v2 (corrente)

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"

Abilitare o disabilitare la scalabilità automatica

È possibile abilitare o disabilitare uno specifico profilo di scalabilità automatica.

SI APPLICA A: estensione ML dell'interfaccia della riga di comando di Azure v2 (corrente)

az monitor autoscale update \
  --autoscale-name $AUTOSCALE_SETTINGS_NAME \
  --enabled false

Eliminare risorse

Se non si intende usare le distribuzioni, eliminare le risorse seguendo i passi seguenti.

SI APPLICA A: estensione ML dell'interfaccia della riga di comando di Azure v2 (corrente)

# 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