Condividi tramite


Prestazioni elevate con Triton Inference Server

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

Informazioni su come usare NVIDIA Triton Inference Server in Azure Machine Learning con endpoint online.

Triton è un software multi-framework open source ottimizzato per l'inferenza. Supporta framework di apprendimento automatico diffusi come TensorFlow, ONNX Runtime, PyTorch, NVIDIA TensorRT e altri. Può essere usato per i carichi di lavoro della CPU o della GPU.

Esistono principalmente due approcci che è possibile adottare per sfruttare i modelli quando vengono distribuiti nell'endpoint online: distribuzione senza codice o distribuzione full-code (Bring your own container).

  • La distribuzione senza codice per i modelli Triton è un modo semplice per distribuirli perché è sufficiente portare i modelli di Resource Manager per la distribuzione.
  • La distribuzione full-code (Bring your own container) per i modelli di Resource Manager è un modo più avanzato per distribuirle, poiché si ha il controllo completo sulla personalizzazione delle configurazioni disponibili per il server di inferenza di Explorer.

Per entrambe le opzioni, il server di inferenza Triton eseguirà l'inferenza in base al modello Triton come definito da NVIDIA. Ad esempio, è possibile usare modelli di ensemble per scenari più avanzati.

Triton è supportato sia negli endpoint online gestiti che negli endpoint online Kubernetes.

Questo articolo spiega come distribuire un modello utilizzando in una distribuzione senza codice per Triton in un endpoint online gestito. Le informazioni sono fornite usando l'interfaccia della riga di comando, l’SDK Python v2 e Azure Machine Learning Studio. Per personalizzare ulteriormente l'uso diretto della configurazione del server di inferenza Triton, vedere Usare un contenitore personalizzato per distribuire un modello e l'esempio BYOC per la distribuzione (definizione di distribuzione e script end-to-end).

Nota

L'uso del contenitore NVIDIA Triton Inference Server è disciplinato dall’accordo di licenza NVIDIA AI Enterprise Software e può essere usato per 90 giorni senza una sottoscrizione di prodotto aziendale. Per altre informazioni, vedere NVIDIA AI Enterprise su Azure Machine Learning.

Prerequisiti

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

  • Ambiente Python 3.8 (o versione successiva) funzionante.

  • È necessario aver installato altri pacchetti Python per l'assegnazione dei punteggi; l’installazione può essere effettuata con il codice seguente. che includono:

    • Numpy: un array e una libreria di calcolo numerico
    • Triton Inference Server Client: facilita le richieste a Triton Inference Server
    • Pillow: una libreria per operazioni sulle immagini
    • Gevent: una libreria di rete usata per la connessione a Triton Server
pip install numpy
pip install tritonclient[http]
pip install pillow
pip install gevent
  • Accesso alle macchine virtuali serie NCv3 per la sottoscrizione di Azure.

    Importante

    Per usare questa serie di macchine virtuali, potrebbe essere necessario richiedere un aumento della quota per la sottoscrizione. Per altre informazioni, vedere Serie NCv3.

NVIDIA Triton Inference Server richiede una struttura di repository di modelli specifica che include una directory per ogni modello e sottodirectory per la versione del modello. Il contenuto di ogni sottodirectory della versione del modello è determinato dal tipo del modello e dai requisiti del back-end che supporta il modello. Per visualizzare tutta la struttura del repository dei modelli, vedere https://github.com/triton-inference-server/server/blob/main/docs/user_guide/model_repository.md#model-files

Le informazioni contenute in questo documento si basano sull'uso di un modello archiviato in formato ONNX, pertanto la struttura di directory del repository dei modelli è <model-repository>/<model-name>/1/model.onnx. In particolare, questo modello esegue l'identificazione delle immagini.

Le informazioni contenute in questo articolo si basano sugli esempi di codice contenuti nel repository azureml-examples. Per eseguire i comandi in locale senza dover copiare/incollare il file YAML e altri file, clonare il repository e passare alla directory cli nel repository:

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

Se le impostazioni predefinite per l'interfaccia della riga di comando di Azure non sono state ancora impostate, salvare le proprie impostazioni predefinite. Per evitare di passare più volte i valori per la propria sottoscrizione, area di lavoro e gruppo di risorse, usare i comandi seguenti. Sostituire i parametri seguenti con i valori della propria configurazione specifica:

  • Sostituire <subscription> con l'ID della sottoscrizione di Azure.
  • Sostituire <workspace> con il nome dell'area di lavoro di Azure Machine Learning.
  • Sostituire <resource-group> con il gruppo di risorse di Azure contenente la propria area di lavoro.
  • Sostituire <location> con l'area di Azure contenente la propria area di lavoro.

Suggerimento

È possibile visualizzare le impostazioni predefinite correnti usando il comando az configure -l.

az account set --subscription <subscription>
az configure --defaults workspace=<workspace> group=<resource-group> location=<location>

Definire la configurazione della distribuzione

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

Questa sezione illustra come distribuire un endpoint online gestito usando l'interfaccia della riga di comando di Azure con l'estensione Machine Learning (v2).

Importante

Per la distribuzione senza codice di Triton, l’esecuzione di test tramite endpoint locali attualmente non è supportata.

  1. Per evitare di digitare un percorso per più comandi, usare il comando seguente per impostare una variabile di ambiente BASE_PATH. Questa variabile punta alla directory contenente il modello e i file di configurazione YAML associati:

    BASE_PATH=endpoints/online/triton/single-model
    
  2. Usare il comando seguente per impostare il nome dell'endpoint che verrà creato. In questo esempio viene creato un nome casuale per l'endpoint:

    export ENDPOINT_NAME=triton-single-endpt-`echo $RANDOM`
    
  3. Creare un file di configurazione YAML per l'endpoint. Nell'esempio seguente viene configurato il nome e la modalità di autenticazione dell'endpoint. Quello usato nei comandi seguenti si trova in /cli/endpoints/online/triton/single-model/create-managed-endpoint.yml nel repository azureml-examples clonato in precedenza:

    create-managed-endpoint.yaml

    $schema: https://azuremlschemas.azureedge.net/latest/managedOnlineEndpoint.schema.json
    name: my-endpoint
    auth_mode: aml_token
    
  4. Creare un file di configurazione YAML per la distribuzione. Nell'esempio seguente viene configurata una distribuzione denominata blue nell'endpoint definito nel passaggio precedente. Quello usato nei comandi seguenti si trova in /cli/endpoints/online/triton/single-model/create-managed-deployment.yml nel repository azureml-examples clonato in precedenza:

    Importante

    Per il funzionamento della distribuzione senza codice di Triton, è necessario impostare type su triton_model​, type: triton_model​. Per altre informazioni, vedere Schema YAML del modello dell’interfaccia della riga di comando (v2).

    Questa distribuzione usa una macchina virtuale Standard_NC6s_v3. Per usare questa macchina virtuale potrebbe essere necessario chiedere un aumento della quota per la propria sottoscrizione. Per altre informazioni, vedere Serie NCv3.

    $schema: https://azuremlschemas.azureedge.net/latest/managedOnlineDeployment.schema.json
    name: blue
    endpoint_name: my-endpoint
    model:
      name: sample-densenet-onnx-model
      version: 1
      path: ./models
      type: triton_model
    instance_count: 1
    instance_type: Standard_NC6s_v3
    

Distribuisci in Azure

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

  1. Per creare un nuovo endpoint tramite la configurazione YAML, usare il comando seguente:

    az ml online-endpoint create -n $ENDPOINT_NAME -f $BASE_PATH/create-managed-endpoint.yaml
    
  2. Per creare la distribuzione tramite la configurazione YAML, usare il comando seguente:

    az ml online-deployment create --name blue --endpoint $ENDPOINT_NAME -f $BASE_PATH/create-managed-deployment.yaml --all-traffic
    

Testare l'endpoint

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

Al termine della distribuzione, usare il comando seguente per effettuare una richiesta di assegnazione dei punteggi all'endpoint distribuito.

Suggerimento

Per l'assegnazione dei punteggi viene usato il file /cli/endpoints/online/triton/single-model/triton_densenet_scoring.py nel repository azureml-examples. L'immagine passata all'endpoint richiede una pre-elaborazione per soddisfare i requisiti di dimensione, tipo e formato, e una post-elaborazione per mostrare l'etichetta stimata. Il file triton_densenet_scoring.py usa la libreria tritonclient.http per comunicare con Triton Inference Server. Questo file viene eseguito sul lato client.

  1. Per ottenere l’URI di assegnazione dei punteggi dell'endpoint, usare il comando seguente:

    scoring_uri=$(az ml online-endpoint show -n $ENDPOINT_NAME --query scoring_uri -o tsv)
    scoring_uri=${scoring_uri%/*}
    
  2. Per ottenere una chiave di autenticazione, usare il comando seguente:

    auth_token=$(az ml online-endpoint get-credentials -n $ENDPOINT_NAME --query accessToken -o tsv)
    
  3. Per assegnare un punteggio ai dati con l'endpoint, usare il comando seguente. Invia l'immagine di un pavone (https://aka.ms/peacock-pic) all'endpoint:

    python $BASE_PATH/triton_densenet_scoring.py --base_url=$scoring_uri --token=$auth_token --image_path $BASE_PATH/data/peacock.jpg
    

    La risposta dello script è simile al testo seguente:

    Is server ready - True
    Is model ready - True
    /azureml-examples/cli/endpoints/online/triton/single-model/densenet_labels.txt
    84 : PEACOCK
    

Eliminare l'endpoint e il modello

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

  1. Dopo aver completato le operazioni con l'endpoint, usare il comando seguente per eliminarlo:

    az ml online-endpoint delete -n $ENDPOINT_NAME --yes
    
  2. Usare il comando seguente per archiviare il modello:

    az ml model archive --name $MODEL_NAME --version $MODEL_VERSION
    

Passaggi successivi

Per altre informazioni, vedere questi articoli: