Condividi tramite


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 dispone di 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 e endpoint online Kubernetes. Per ulteriori informazioni sulle differenze, vedere Endpoint online gestiti rispetto a Endpoint online Kubernetes.

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, ridimensionare, proteggere e monitorare i modelli. Questa assistenza consente di liberare dall'overhead di configurazione e gestione dell'infrastruttura sottostante.

L'esempio principale in questo articolo 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 della CLI di Azure v2 (corrente)

  • Il controllo degli accessi in base al ruolo di Azure viene usato 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 Proprietario o Collaboratore per l'area di lavoro di Azure Machine Learning oppure un ruolo personalizzato deve consentire Microsoft.MachineLearningServices/workspaces/onlineEndpoints/*. Se si usa Azure Machine Learning Studio per creare e gestire endpoint o distribuzioni online, è necessaria l'autorizzazione Microsoft.Resources/deployments/write aggiuntiva del proprietario del gruppo di risorse. Per altre informazioni, vedere Gestire l'accesso alle aree di lavoro di Azure Machine Learning.

  • (Facoltativo) Per eseguire la distribuzione in locale, è necessario installare il motore Docker nel computer locale. Si consiglia vivamente questa opzione, che semplifica il debug dei problemi.

  • Assicurarsi di avere una quota di macchina virtuale (VM) sufficiente allocata per la distribuzione. Azure Machine Learning riserva 20% delle risorse di calcolo per eseguire gli aggiornamenti in alcune versioni di macchina virtuale. Ad esempio, se si richiedono 10 istanze in una distribuzione, è necessario avere una quota di 12 per ogni numero di core per la versione della macchina virtuale. Se non si tiene conto delle risorse di calcolo aggiuntive, viene generato un errore. Alcune versioni delle macchine virtuali sono escluse dalla prenotazione di quota aggiuntiva. Per altre informazioni sull'allocazione delle quote, vedere Allocazione della quota di macchine virtuali per la distribuzione.

  • 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 il repository azureml-examples e quindi passare alla directory azureml-examples/cli del repository:

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

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. 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 Limiti degli endpoint.

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'endpoint YAML online. Per informazioni sui limiti correlati agli endpoint gestiti, vedere Endpoint online e endpoint batch di Azure Machine Learning.

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 Autenticare i client per gli 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 scikit-learn modello che esegue la regressione e si usa uno script di assegnazione dei punteggi score.py per eseguire il modello in una richiesta di input specifica.

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

Configurare una distribuzione

La configurazione della distribuzione utilizza la posizione del modello che si desidera 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:

$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-ubuntu22.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 il path parametro (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: usa 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 il image parametro per l'immagine di base. In questo esempio è mcr.microsoft.com/azureml/openmpi4.1.0-ubuntu20.04:latest. Le conda_file dipendenze vengono installate sopra l'immagine di base.
  • code_configuration: carica i file locali, ad esempio l'origine Python per il modello di assegnazione dei punteggi, dall'ambiente di sviluppo durante la distribuzione.

Per altre informazioni sullo schema YAML, vedere le informazioni di 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 Azure Machine Learning Studio.
  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 altre proprietà applicabili a una distribuzione 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:

  • Il monitoraggio SLA facoltativo e l'integrazione di Azure Log Analytics tramite Azure Monitor.
  • Uso dei token di Microsoft Entra.
  • Scalabilità automatica come descritto nella sezione facoltativa Configurare la scalabilità automatica .

Informazioni sullo script di assegnazione dei punteggi

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 dal repository clonato o scaricato in precedenza:

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 init funzione è la posizione in cui scrivere la logica per operazioni di inizializzazione globali, ad esempio la memorizzazione nella cache del modello in memoria (come illustrato in questo file score.py ).

La run() funzione viene chiamata ogni volta che viene richiamato l'endpoint. Esegue l'effettivo punteggio e la predizione. In questo file score.py la run() funzione estrae i dati da un input JSON, chiama il metodo del predict() modello scikit-learn e quindi restituisce il risultato della stima.

Distribuire ed eseguire il debug in locale usando un endpoint locale

È consigliabile testare l'esecuzione dell'endpoint in locale per convalidare ed eseguire il debug del codice e della configurazione prima di eseguire la distribuzione in Azure. L'interfaccia della riga di comando di Azure e Python SDK supportano endpoint e distribuzioni locali, ma i modelli di Azure Machine Learning Studio e ARM non lo fanno.

Per eseguire la distribuzione in locale, è necessario installare ed eseguire il motore Docker . Docker Engine viene in genere avviato all'avvio del computer. In caso contrario, è possibile effettuare il troubleshooting di Docker Engine.

È 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 motore Docker. Il debug con il server di inferenza consente di eseguire il debug dello script di assegnazione dei punteggi prima di eseguire la distribuzione negli endpoint locali in modo da poter eseguire il debug senza influire sulle configurazioni del contenitore di distribuzione.

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

Distribuire il modello in locale

Creare prima di tutto un endpoint. Facoltativamente, per un endpoint locale, è possibile ignorare questo passaggio. È possibile creare la distribuzione direttamente (passaggio successivo), che a sua volta crea 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 parametro è 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
Creating La risorsa è in fase di creazione.
Updating La risorsa è in fase di aggiornamento.
Deleting La risorsa è in fase di eliminazione.
Succeeded Operazione di creazione o aggiornamento completata.
Failed Operazione di creazione, aggiornamento o eliminazione non riuscita.

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

Nell'esempio score.py file il run() metodo 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 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. Dopo aver registrato gli asset, è possibile riutilizzarli senza dover caricarli ogni volta che si creano distribuzioni. Questa pratica aumenta la riproducibilità e la tracciabilità.

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 nella cartella endpoints/online/managed/sample e usare i az ml model create comandi 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. Assegnare al file il nome model.yml:

    $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 endpoints/online/managed/sample/model.yml
    
  3. Creare una definizione YAML per l'ambiente. Assegnare al file il nome environment.yml:

    $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 endpoints/online/managed/sample/environment.yml
    

Per altre informazioni su come registrare il modello come asset, vedere Registrare un modello usando l'interfaccia della riga di comando di Azure o Python SDK. Per altre informazioni sulla creazione di un ambiente, vedere Creare un ambiente personalizzato.

Importante

Quando si definisce un ambiente personalizzato per la distribuzione, assicurarsi che il azureml-inference-server-http pacchetto sia incluso nel file conda. Questo pacchetto è essenziale per il corretto funzionamento del server di inferenza. Se non si ha familiarità con il processo di creazione di un ambiente personalizzato, usare uno degli ambienti curati, come minimal-py-inference (per i modelli personalizzati che non usano mlflow) o mlflow-py-inference (per i modelli che usano mlflow). Questi ambienti curati sono disponibili nella scheda Ambienti dell'istanza di Azure Machine Learning Studio.

Configurare una distribuzione che usa asset registrati

La configurazione della distribuzione usa il modello registrato che si vuole 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 un deployment.

$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 di distribuzione nel file blue-deployment-with-registered-assets.yml ha usato un'istanza del tipo Standard_DS3_v2 per utilizzo generico e l'immagine mcr.microsoft.com/azureml/openmpi4.1.0-ubuntu20.04:latestDocker non GPU . Per il calcolo GPU, scegliere una versione del tipo di calcolo GPU e un'immagine Docker GPU.

Per i tipi di istanza per utilizzo generico e GPU supportati, vedere l'elenco degli SKU degli 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. Crea 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.

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

    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. L'uso di questo flag è utile a scopo di sviluppo e test, ma per l'ambiente di produzione potrebbe essere necessario instradare il traffico alla nuova distribuzione tramite un comando esplicito. Ad esempio, usare 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 online

  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.

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 dei 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:

    È 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 su come gestire l'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 si utilizzano i comandi show e get-credentials per ottenere le credenziali di autenticazione. Si noti anche che si usa il --query flag per filtrare solo gli attributi necessari. Per ulteriori 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 vuole aggiornare il codice, il modello o l'ambiente, aggiornare il file YAML. Eseguire quindi il az ml online-endpoint update comando .

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 update comando, l'operazione di ridimensionamento viene eseguita per prima. Gli altri aggiornamenti vengono applicati successivamente. È 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
    

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

    È possibile usare parametri di aggiornamento generici, ad esempio il --set parametro , con il comando dell'interfaccia update della riga di comando per eseguire l'override degli attributi nel file YAML o per 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.

    Specificare il file YAML non è obbligatorio. Ad esempio, se si vuole testare impostazioni di concorrenza diverse per una distribuzione specifica, è 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. Questo approccio mantiene tutta la configurazione esistente, ma aggiorna solo i parametri specificati.

  5. Poiché la init() funzione è stata modificata, che viene eseguita quando l'endpoint viene creato o aggiornato, il messaggio Updated successfully viene 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 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'uso in produzione, prendere in considerazione la distribuzione blu-verde, che offre un'alternativa più sicura per aggiornare 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 la scalabilità automatica, vedere 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, seguire i passaggi descritti in Monitorare gli endpoint online.

(Facoltativo) Eseguire l'integrazione con Log Analytics

Il get-logs comando per l'interfaccia della riga di comando o il get_logs metodo per l'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 su come usare la registrazione, vedere Usare i log.

Eliminare l'endpoint e la distribuzione

Usare il comando seguente per eliminare l'endpoint e tutte le distribuzioni sottostanti:

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