Distribuire e assegnare un punteggio a un modello di Machine Learning usando un endpoint online

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 distribuire il modello in un endpoint online per l'inferenza in tempo reale. Per iniziare, distribuire un modello nel computer locale per eseguire il debug di eventuali errori. Distribuire e testare quindi il modello in Azure, visualizzare i log di distribuzione e monitorare il contratto di servizio. Al termine di questo articolo, si avrà un endpoint HTTPS/REST scalabile che è possibile usare per l'inferenza in tempo reale.

Gli endpoint online sono endpoint usati per l'inferenza (in tempo reale). Esistono due tipi di endpoint online: endpoint online gestiti ed endpoint online Kubernetes. Per altre informazioni sugli endpoint e sulle differenze tra endpoint online gestiti ed endpoint online Kubernetes, vedere Che cosa sono gli endpoint di Azure Machine Learning?

Gli endpoint online gestiti consentono di distribuire i modelli di apprendimento automatico in modo pronto all'uso. Funzionano con computer CPU e GPU potenti in Azure in modo scalabile e completamente gestito. Gli endpoint online gestiti si occupano di gestire, dimensionare, proteggere e monitorare i modelli, liberando l'utente dalle attività di configurazione e gestione dell'infrastruttura sottostante.

L'esempio principale in questo documento usa endpoint online gestiti per la distribuzione. Per usare Kubernetes, invece, vedere le note contenute in questo documento che sono inline con la discussione sugli endpoint online gestiti.

Prerequisiti

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

Prima di seguire la procedura descritta in questo articolo, assicurarsi di disporre dei prerequisiti seguenti:

  • I controlli degli accessi in base al ruolo di Azure vengono usati per concedere l'accesso alle operazioni in Azure Machine Learning. Per eseguire la procedura descritta in questo articolo, all'account utente deve essere assegnato il ruolo di Proprietario o Collaboratore per l'area di lavoro di Azure Machine Learning o a un ruolo personalizzato che consente Microsoft.MachineLearningServices/workspaces/onlineEndpoints/*. Se si usa Studio per creare/gestire endpoint/distribuzioni online, è necessario richiedere un'autorizzazione aggiuntiva "Microsoft.Resources/deployments/write" al proprietario del gruppo di risorse. Per altre informazioni, vedere Gestire l'accesso a un'area di lavoro di Azure Machine Learning.

  • (Facoltativo) Per eseguire la distribuzione in locale, è necessario installare Docker Engine nel computer locale. Si consiglia vivamente di usare questa opzione per facilitare il debug dei problemi.

  • Assicurarsi di avere una quota di macchina virtuale (VM) sufficiente allocata per la distribuzione. Azure Machine Learning riserva il 20% delle risorse di calcolo per l'esecuzione degli aggiornamenti in alcune SKU di VM. Ad esempio, se si richiedono 10 istanze in una distribuzione, è necessario avere una quota per 12 per ogni numero di core per lo SKU della macchina virtuale. Se non si tiene conto delle risorse di calcolo aggiuntive, viene generato un errore. Esistono alcuni SKU di macchina virtuale esenti dalla prenotazione di quota aggiuntiva. Per altre informazioni sull'allocazione delle quote, vedere Allocazione della quota di macchine virtuali per le distribuzioni.

  • In alternativa, è possibile usare la quota dal pool di quote condivise di Azure Machine Learning per un periodo di tempo limitato. Azure Machine Learning offre un pool di quote condivise da cui gli utenti in diverse aree possono accedere alla quota per eseguire test per un periodo di tempo limitato, a seconda della disponibilità. Quando si usa Studio per distribuire modelli Llama-2, Phi, Nemotron, Mistral, Dolly e Deci-DeciLM dal catalogo dei modelli a un endpoint online gestito, Azure Machine Learning consente di accedere al proprio pool di quote condivise per un breve periodo di tempo, in modo da poter eseguire la verifica. Per altre informazioni sul pool di quote condivise, vedere Quota condivisa di Azure Machine Learning.

Preparare il sistema

Impostare le variabili di ambiente

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>

Clonare il repository di esempi

Per seguire questo articolo, clonare prima di tutto il repository degli esempi (azureml-examples). Eseguire quindi il codice seguente per passare alla directory del repository cli/:

git clone --depth 1 https://github.com/Azure/azureml-examples
cd azureml-examples
cd cli

Suggerimento

Usare --depth 1 per clonare solo il commit più recente nel repository, riducendo il tempo necessario per completare l'operazione.

I comandi di questa esercitazione si trovano nei file deploy-local-endpoint.sh e deploy-managed-online-endpoint.sh nella directory cli e i file di configurazione YAML si trovano nella sottodirectory endpoints/online/managed/sample/.

Nota

I file di configurazione YAML per gli endpoint online Kubernetes si trovano nella sottodirectory endpoints/online/kubernetes/.

Definire l'endpoint

Per definire un endpoint online, specificare il nome dell'endpoint e la modalità di autenticazione. Per altre informazioni sugli endpoint online gestiti, vedere Endpoint online.

Impostare il nome di un endpoint

Per impostare il nome dell'endpoint eseguire il comando seguente. Sostituire YOUR_ENDPOINT_NAME con un nome univoco nell'area di Azure. Per altre informazioni sulle regole di denominazione, vedere i limiti degli endpoint.

Per Linux, eseguire questo comando:

export ENDPOINT_NAME="<YOUR_ENDPOINT_NAME>"

Configurare l'endpoint

Il frammento di codice seguente mostra il file endpoints/online/managed/sample/endpoint.yml:

$schema: https://azuremlschemas.azureedge.net/latest/managedOnlineEndpoint.schema.json
name: my-endpoint
auth_mode: key

Il riferimento per il formato YAML dell'endpoint è descritto nella tabella seguente. Per informazioni su come specificare questi attributi, vedere le informazioni di riferimento sull'endpointYAML online. Per informazioni sui limiti correlati agli endpoint gestiti, vedere Limiti sugli endpoint online.

Chiave Descrizione
$schema (Facoltativo) Schema YAML. Per vedere tutte le opzioni disponibili nel file YAML, è possibile visualizzare in un browser lo schema incluso nel frammento di codice precedente.
name Nome dell'endpoint.
auth_mode Usare key per l'autenticazione basata su chiave.
Usare aml_token per l'autenticazione basata su token di Azure Machine Learning.
Usare aad_token per l'autenticazione basata su token di Microsoft Entra (anteprima).
Per altre informazioni sull'autenticazione, vedere Eseguire l'autenticazione di client per endpoint online.

Definire la distribuzione

Per distribuzione si intende un set di risorse necessarie per ospitare il modello che esegue l'inferenza effettiva. Per questo esempio si distribuisce un modello scikit-learn che esegue la regressione e si usa uno script di assegnazione dei punteggi score.py per eseguire il modello su una determinata richiesta di input.

Per informazioni sugli attributi chiave di una distribuzione, vedere Distribuzioni online.

Configurare una distribuzione

La configurazione di distribuzione usa il percorso del modello da distribuire.

Il frammento di codice seguente mostra il file endpoints/online/managed/sample/blue-deployment.yml, con tutti gli input necessari per configurare una distribuzione:

blue-deployment.yml

$schema: https://azuremlschemas.azureedge.net/latest/managedOnlineDeployment.schema.json
name: blue
endpoint_name: my-endpoint
model:
  path: ../../model-1/model/
code_configuration:
  code: ../../model-1/onlinescoring/
  scoring_script: score.py
environment: 
  conda_file: ../../model-1/environment/conda.yaml
  image: mcr.microsoft.com/azureml/openmpi4.1.0-ubuntu20.04:latest
instance_type: Standard_DS3_v2
instance_count: 1

Il file blue-deployment.yml specifica gli attributi di distribuzione seguenti:

  • model: specifica le proprietà del modello inline, usando path (da cui caricare i file). L'interfaccia della riga di comando carica automaticamente i file del modello e registra il modello con un nome generato automaticamente.
  • environment: usando le definizioni inline che includono da dove caricare i file, l'interfaccia della riga di comando carica automaticamente il file conda.yaml e registra l'ambiente. Successivamente, per compilare l'ambiente, la distribuzione usa image (in questo esempio è mcr.microsoft.com/azureml/openmpi4.1.0-ubuntu20.04:latest) per l'immagine di base e le dipendenze conda_file vengono installate sopra l'immagine di base.
  • code_configuration - Durante la distribuzione, i file locali, ad esempio l'origine Python per il modello di assegnazione dei punteggi, vengono caricati dall'ambiente di sviluppo.

Per altre informazioni sullo schema YAML, vedere il riferimento sull'endpoint YAML online.

Nota

Per usare gli endpoint Kubernetes anziché gli endpoint online gestiti come destinazione di calcolo:

  1. Creare e collegare il cluster Kubernetes come destinazione di calcolo all'area di lavoro di Azure Machine Learning usando studio di Azure Machine Learning.
  2. Usare l'endpoint YAML per specificare come destinazione Kubernetes anziché l'endpoint gestito YAML. È necessario modificare YAML per modificare il valore di compute con il nome della destinazione di calcolo registrata. È possibile usare questo file deployment.yaml con proprietà aggiuntive applicabili a una distribuzione di Kubernetes.

Tutti i comandi usati in questo articolo per gli endpoint online gestiti si applicano anche agli endpoint Kubernetes, ad eccezione delle funzionalità seguenti che non si applicano agli endpoint Kubernetes:

Informazioni sullo script di assegnazione dei punteggi

Suggerimento

Il formato dello script di assegnazione dei punteggi per gli endpoint online è lo stesso di quello usato nella versione precedente dell'interfaccia della riga di comando e in Python SDK.

Lo script di assegnazione dei punteggi specificato in code_configuration.scoring_script deve avere una funzione init() e una run().

In questo esempio viene usato il file score.py: score.py

import os
import logging
import json
import numpy
import joblib


def init():
    """
    This function is called when the container is initialized/started, typically after create/update of the deployment.
    You can write the logic here to perform init operations like caching the model in memory
    """
    global model
    # AZUREML_MODEL_DIR is an environment variable created during deployment.
    # It is the path to the model folder (./azureml-models/$MODEL_NAME/$VERSION)
    # Please provide your model's folder name if there is one
    model_path = os.path.join(
        os.getenv("AZUREML_MODEL_DIR"), "model/sklearn_regression_model.pkl"
    )
    # deserialize the model file back into a sklearn model
    model = joblib.load(model_path)
    logging.info("Init complete")


def run(raw_data):
    """
    This function is called for every invocation of the endpoint to perform the actual scoring/prediction.
    In the example we extract the data from the json input and call the scikit-learn model's predict()
    method and return the result back
    """
    logging.info("model 1: request received")
    data = json.loads(raw_data)["data"]
    data = numpy.array(data)
    result = model.predict(data)
    logging.info("Request processed")
    return result.tolist()

La init() funzione viene chiamata quando il contenitore viene inizializzato o avviato. L'inizializzazione si verifica in genere poco dopo la creazione o l'aggiornamento della distribuzione. La funzione init è la posizione in cui scrivere la logica per operazioni di inizializzazione globali, come ad esempio la memorizzazione nella cache del modello in memoria (come mostrato nel file score.py).

La funzione run() viene chiamata ogni volta che si invoca l'endpoint ed esegue l'assegnazione del punteggio e la stima effettive. In questo file score.py la funzione run() estrae i dati da un input JSON, chiama il metodo predict() del modello scikit-learn e restituisce il risultato della stima.

Distribuire ed eseguire il debug in locale usando un endpoint locale

È vivamente consigliabile testare l'endpoint in locale per convalidare ed eseguire il debug del codice e della configurazione prima di procedere alla distribuzione in Azure. L'interfaccia della riga di comando di Azure e Python SDK supportano endpoint e distribuzioni locali, mentre Studio di Azure Machine Learning e il modello ARM no.

Per eseguire la distribuzione in locale, è necessario installare ed eseguire Docker Engine. Docker Engine viene in genere avviato all'avvio del computer. In caso contrario, è possibile eseguire la risoluzione dei problemi relativi a Docker Engine.

Suggerimento

È possibile usare il pacchetto Python del server HTTP di inferenza di Azure Machine Learning per eseguire il debug dello script di assegnazione dei punteggi in locale senza il motoreDocker. Il debug con il server di inferenza consente di eseguire il debug dello script di assegnazione dei punteggi prima della distribuzione negli endpoint locali in modo che sia possibile eseguire il debug senza alcun impatto sulle configurazioni del contenitore di distribuzione.

Per altre informazioni sul debug degli endpoint online in locale prima della distribuzione in Azure, vedere Eseguire il debug degli endpoint online.

Distribuire il modello in locale

Creare prima di tutto un endpoint. Facoltativamente, per un endpoint locale, è possibile ignorare questo passaggio e creare direttamente la distribuzione (passaggio successivo), che a sua volta creerà i metadati necessari. La distribuzione dei modelli in locale è utile a scopo di sviluppo e test.

az ml online-endpoint create --local -n $ENDPOINT_NAME -f endpoints/online/managed/sample/endpoint.yml

Creare ora una distribuzione denominata blue nell'endpoint.

az ml online-deployment create --local -n blue --endpoint $ENDPOINT_NAME -f endpoints/online/managed/sample/blue-deployment.yml

Il flag --local indirizza l'interfaccia della riga di comando a distribuire l'endpoint nell'ambiente Docker.

Suggerimento

Usare Visual Studio Code per testare ed eseguire il debug degli endpoint in locale. Per altre informazioni, vedere Eseguire il debug degli endpoint online in locale in Visual Studio Code.

Verificare la corretta esecuzione della distribuzione locale

Controllare lo stato della distribuzione per verificare se il modello è stato distribuito senza errori:

az ml online-endpoint show -n $ENDPOINT_NAME --local

L'output sarà simile al seguente JSON. Il provisioning_state è Succeeded.

{
  "auth_mode": "key",
  "location": "local",
  "name": "docs-endpoint",
  "properties": {},
  "provisioning_state": "Succeeded",
  "scoring_uri": "http://localhost:49158/score",
  "tags": {},
  "traffic": {}
}

Nella tabella seguente sono elencati i possibili valori di provisioning_state:

valore Descrizione
Creazione La risorsa è in fase di creazione.
Aggiornamento La risorsa è in fase di aggiornamento.
Eliminazione in corso La risorsa è in fase di eliminazione.
Completato Operazione di creazione/aggiornamento completata.
Non riuscito L'operazione di creazione/aggiornamento/eliminazione ha dato esito negativo.

Richiamare l'endpoint locale per assegnare un punteggio ai dati usando il modello

Richiamare l'endpoint per assegnare un punteggio al modello usando l'utile comando invoke e passando i parametri di query archiviati in un file JSON:

az ml online-endpoint invoke --local --name $ENDPOINT_NAME --request-file endpoints/online/model-1/sample-request.json

Se si desidera usare un client REST (ad esempio curl), è necessario disporre dell'URI di assegnazione dei punteggi. Per ottenere l'URI di assegnazione dei punteggi, eseguire az ml online-endpoint show --local -n $ENDPOINT_NAME. Nei dati restituiti trovare l'attributo scoring_uri.

Esaminare i log per l'output dell'operazione di chiamata

Nel file score.py di esempio, il metodo run() registra un output nella console.

È possibile visualizzare questo output usando il comando get-logs:

az ml online-deployment get-logs --local -n blue --endpoint $ENDPOINT_NAME

Distribuire l'endpoint online in Azure

A questo punto, distribuire l'endpoint online in Azure. Come procedura consigliata per la produzione, è consigliabile registrare il modello e l'ambiente che verranno usati nella distribuzione.

Registrare il modello e l'ambiente

È consigliabile registrare il modello e l'ambiente prima della distribuzione in Azure in modo da poter specificare i nomi e le versioni registrati durante la distribuzione. La registrazione degli asset consente di riutilizzarli senza la necessità di caricarli ogni volta che si creano distribuzioni, aumentando così la riproducibilità e la tracciabilità.

Nota

A differenza della distribuzione in Azure, la distribuzione locale non supporta l'uso di modelli e ambienti registrati. La distribuzione locale usa invece file di modello locali e usa ambienti solo con file locali. Per la distribuzione in Azure, è possibile usare asset locali o registrati (modelli e ambienti). In questa sezione dell'articolo la distribuzione in Azure usa gli asset registrati, ma è possibile usare gli asset locali. Per un esempio di configurazione di distribuzione che carica i file locali da usare per la distribuzione locale, vedere Configurare una distribuzione.

Per registrare il modello e l'ambiente, usare il modulo model: azureml:my-model:1 o environment: azureml:my-env:1. Per la registrazione, è possibile estrarre le definizioni YAML di model e environment in file YAML separati e usare i comandi az ml model create e az ml environment create. Per altre informazioni su questi comandi, eseguire az ml model create -h e az ml environment create -h.

  1. Creare una definizione YAML per il modello:

    $schema: https://azuremlschemas.azureedge.net/latest/model.schema.json
    name: my-model
    path: ../../model-1/model/
    
  2. Registrare il modello:

    az ml model create -n my-model -v 1 -f ./model.yaml
    
  3. Creare una definizione YAML per l'ambiente:

    $schema: https://azuremlschemas.azureedge.net/latest/environment.schema.json
    name: my-env
    image: mcr.microsoft.com/azureml/openmpi4.1.0-ubuntu20.04:latest
    conda_file: ../../model-1/environment/conda.yaml
    
  4. Registrare l'ambiente:

    az ml environment create -n my-env -v 1 -f ./environment.yaml
    

Per altre informazioni sulla registrazione del modello come asset, vedere Registrare il modello come asset in Machine Learning usando l'interfaccia della riga di comando. Per altre informazioni sulla creazione di un ambiente, vedere Gestire gli ambienti di Azure Machine Learning con l'interfaccia della riga di comando e l'SDK (v2).

Configurare una distribuzione che usa asset registrati

La configurazione di distribuzione usa il modello registrato che si desidera distribuire e l'ambiente registrato.

Usare gli asset registrati (modello e ambiente) nella definizione di distribuzione. Il frammento di codice seguente mostra il file endpoints/online/managed/sample/blue-deployment-with-registered-assets.yml, con tutti gli input necessari per configurare una distribuzione:

blue-deployment-with-registered-assets.yml

$schema: https://azuremlschemas.azureedge.net/latest/managedOnlineDeployment.schema.json
name: blue
endpoint_name: my-endpoint
model: azureml:my-model:1
code_configuration:
  code: ../../model-1/onlinescoring/
  scoring_script: score.py
environment: azureml:my-env:1
instance_type: Standard_DS3_v2
instance_count: 1

Usare tipi e immagini di istanze di CPU e GPU differenti

È possibile specificare i tipi di istanza CPU o GPU e le immagini nella definizione di distribuzione per la distribuzione locale e la distribuzione in Azure.

La definizione della distribuzione nel file blue-deployment-with-registered-assets.yml usa un'istanza Standard_DS3_v2di tipo generico e un'immagine Docker non GPU mcr.microsoft.com/azureml/openmpi4.1.0-ubuntu20.04:latest. Per il calcolo GPU, scegliere uno SKU del tipo di calcolo GPU e un'immagine Docker GPU.

Per i tipi di istanza per utilizzo generico e GPU supportati, vedere SKU di VM supportati per gli endpoint online gestiti. Per un elenco delle immagini di base della CPU e della GPU di Azure Machine Learning, vedere Immagini di base di Azure Machine Learning.

Nota

Per usare Kubernetes anziché gli endpoint gestiti come destinazione di calcolo, vedere Introduzione alla destinazione di calcolo kubernetes.

A questo punto, distribuire l'endpoint online in Azure.

Distribuisci in Azure

  1. Creare l'endpoint nel cloud di Azure.

    az ml online-endpoint create --name $ENDPOINT_NAME -f endpoints/online/managed/sample/endpoint.yml
    
  2. Creare la distribuzione denominata blue nell'endpoint.

    az ml online-deployment create --name blue --endpoint $ENDPOINT_NAME -f endpoints/online/managed/sample/blue-deployment-with-registered-assets.yml --all-traffic
    

    La creazione della distribuzione può richiedere fino a 15 minuti a seconda che l'ambiente o l'immagine sottostante venga compilata per la prima volta. Le distribuzioni successive che usano lo stesso ambiente vengono elaborate più velocemente.

    Suggerimento

    • Se si preferisce non bloccare la console dell'interfaccia della riga di comando, è possibile aggiungere il flag --no-wait al comando. Tuttavia, questa opzione arresterà la visualizzazione interattiva dello stato della distribuzione.

    Importante

    Il flag --all-traffic usato in az ml online-deployment create usato per creare la distribuzione alloca il 100% del traffico dell'endpoint alla distribuzione blu appena creata. Anche se questo è utile ai fini dello sviluppo e del test, per l'ambiente di produzione, potrebbe essere necessario instradare il traffico per la nuova distribuzione tramite un comando esplicito. Ad esempio: az ml online-endpoint update -n $ENDPOINT_NAME --traffic "blue=100".

Per eseguire il debug degli errori nella distribuzione, vedere Risoluzione dei problemi relativi alle distribuzioni degli endpoint online.

Controllare lo stato dell'endpoint

  1. Usare il comando show per visualizzare le informazioni in provisioning_state per l'endpoint e la distribuzione:

    az ml online-endpoint show -n $ENDPOINT_NAME
    
  2. Elencare tutti gli endpoint nell'area di lavoro in un formato di tabella usando il comando list:

    az ml online-endpoint list --output table
    

Verificare lo stato della distribuzione online

Controllare i log per verificare se il modello è stato distribuito senza errori.

  1. Per visualizzare l'output del log da un contenitore, usare il seguente comando dell'interfaccia della riga di comando:

    az ml online-deployment get-logs --name blue --endpoint $ENDPOINT_NAME
    

    Per impostazione predefinita, i log vengono estratti dal contenitore del server di inferenza. Per visualizzare i log dal contenitore dell'inizializzatore di archiviazione, aggiungere il flag --container storage-initializer. Per altre informazioni sui log di distribuzione, vedere Ottenere i log dai contenitori.

Richiamare l'endpoint per assegnare un punteggio ai dati usando il modello

  1. Usare il comando invoke o un client REST di propria scelta per richiamare l'endpoint e assegnare un punteggio ad alcuni dati:

    az ml online-endpoint invoke --name $ENDPOINT_NAME --request-file endpoints/online/model-1/sample-request.json
    
  2. Ottenere la chiave usata per l'autenticazione all'endpoint:

    Suggerimento

    È possibile controllare quali entità di sicurezza di Microsoft Entra possono ottenere la chiave di autenticazione assegnandole a un ruolo personalizzato che consente Microsoft.MachineLearningServices/workspaces/onlineEndpoints/token/action e Microsoft.MachineLearningServices/workspaces/onlineEndpoints/listkeys/action. Per altre informazioni sulla gestione dell'autorizzazione per le aree di lavoro, vedere Gestire l'accesso a un'area di lavoro di Azure Machine Learning.

    ENDPOINT_KEY=$(az ml online-endpoint get-credentials -n $ENDPOINT_NAME -o tsv --query primaryKey)
    
  3. Usare curl per assegnare punteggi ai dati.

    SCORING_URI=$(az ml online-endpoint show -n $ENDPOINT_NAME -o tsv --query scoring_uri)
    
    curl --request POST "$SCORING_URI" --header "Authorization: Bearer $ENDPOINT_KEY" --header 'Content-Type: application/json' --data @endpoints/online/model-1/sample-request.json
    

    Si noti che vengono usati i comandi show e get-credentials per ottenere le credenziali di autenticazione. Si noti anche che si sta usando il flag --query per filtrare solo gli attributi necessari. Per altre informazioni sul flag --query, vedere Eseguire query sull'output dei comandi dell'interfaccia della riga di comando di Azure.

  4. Per visualizzare i log delle chiamate, eseguire nuovamente get-logs.

(Facoltativo) Aggiornare la distribuzione

Se si desidera aggiornare il codice, il modello o l'ambiente, aggiornare il file YAML ed eseguire il comando az ml online-endpoint update.

Nota

Se si aggiorna il numero di istanze (per ridimensionare la distribuzione) insieme ad altre impostazioni del modello (ad esempio codice, modello o ambiente) in un singolo comando update, l'operazione di ridimensionamento verrà eseguita per prima cosa, seguita dall'applicazione degli altri aggiornamenti. È consigliabile eseguire queste operazioni separatamente in un ambiente di produzione.

Per comprendere il funzionamento di update:

  1. Aprire il file online/model-1/onlinescoring/score.py.

  2. Modificare l'ultima riga della funzione init(): dopo logging.info("Init complete"), aggiungere logging.info("Updated successfully").

  3. Salvare il file.

  4. Eseguire questo comando:

    az ml online-deployment update -n blue --endpoint $ENDPOINT_NAME -f endpoints/online/managed/sample/blue-deployment-with-registered-assets.yml
    

    Nota

    L'aggiornamento tramite YAML è dichiarativo. Ciò significa, che le modifiche nel file YAML si riflettono nelle risorse di Azure Resource Manager sottostanti (endpoint e distribuzioni). Un approccio dichiarativo facilita GitOps: tutte le modifiche apportate agli endpoint e alle distribuzioni (persino instance_count) passano attraverso YAML.

    Suggerimento

    • È possibile usare parametri di aggiornamento generici, ad esempio il parametro --set, con il comando dell'interfaccia update della riga di comando per eseguire l'override degli attributi nel file YAML o e impostare attributi specifici senza passarli nel file YAML. L'uso di --set per attributi singoli è particolarmente utile negli scenari di sviluppo e test. Ad esempio, per aumentare il valore instance_count per la prima distribuzione, è possibile usare il flag --set instance_count=2. Tuttavia, poiché YAML non viene aggiornato, questa tecnica non facilita GitOps.
    • La specifica del file YAML NON è obbligatoria. Ad esempio, se si desidera testare un'impostazione di concorrenza diversa per una determinata distribuzione, è possibile provare qualcosa come az ml online-deployment update -n blue -e my-endpoint --set request_settings.max_concurrent_requests_per_instance=4 environment_variables.WORKER_COUNT=4. Questa operazione manterrà tutte le configurazioni esistenti, ma aggiornerà solo i parametri specificati.
  5. Poiché la funzione init() è stata modificata e viene eseguita al momento della creazione o modifica dell'endpoint, il messaggio Updated successfully verrà visualizzato nei log. Recuperare i log eseguendo:

    az ml online-deployment get-logs --name blue --endpoint $ENDPOINT_NAME
    

Il comando update funziona anche con le distribuzioni locali. Usare lo stesso comando az ml online-deployment update con il flag --local.

Nota

L'aggiornamento alla distribuzione in questa sezione è un esempio di aggiornamento in sequenza sul posto.

  • Per un endpoint online gestito, la distribuzione viene aggiornata alla nuova configurazione con il 20% dei nodi alla volta. Ciò significa, che se la distribuzione ha 10 nodi, sono aggiornati 2 nodi alla volta.
  • Per un endpoint online Kubernetes, il sistema crea in modo iterativo una nuova istanza di distribuzione con la nuova configurazione ed eliminerà quella precedente.
  • Per l'utilizzo di produzione, è consigliabile prendere in considerazione la distribuzione blu-verde, che offre un'alternativa più sicura per l'aggiornamento di un servizio Web.

(Facoltativo) Configurare il ridimensionamento automatico

La scalabilità automatica usa automaticamente la quantità corretta di risorse per gestire il carico dell'applicazione. Gli endpoint online gestiti supportano la scalabilità automatica tramite l'integrazione con la funzionalità di scalabilità automatica di monitoraggio di Azure. Per configurare il ridimensionamento automatico, vedere Come ridimensionare automaticamente gli endpoint online.

(Facoltativo) Monitorare il contratto di servizio usando Monitoraggio di Azure

Per visualizzare le metriche e impostare gli avvisi in base al contratto di servizio, completare i passaggi descritti in Monitorare gli endpoint online.

(Facoltativo) Eseguire l'integrazione con Log Analytics

Il comando get-logs per l'interfaccia della riga di comando o il metodo get_logs per SDK fornisce solo le ultime centinaia di righe di log da un'istanza selezionata automaticamente. Tuttavia, Log Analytics consente di archiviare e analizzare i log in modo durevole. Per altre informazioni sull'uso della registrazione, vedere Monitorare gli endpoint online.

Eliminare l'endpoint e la distribuzione

Eliminare l'endpoint e tutte le distribuzioni sottostanti:

az ml online-endpoint delete --name $ENDPOINT_NAME --yes --no-wait