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:
L'interfaccia della riga di comando di Azure e l'estensione
ml
per l'interfaccia della riga di comando di Azure. Per altre informazioni, vedere Installare, configurare e usare l'interfaccia della riga di comando (v2).Importante
Gli esempi dell'interfaccia della riga di comando in questo articolo presuppongono che si usi la shell Bash (o compatibile). Ad esempio, un sistema Linux o un sottosistema Windows per Linux.
Un'area di lavoro di Azure Machine Learning. Se non è disponibile, usare la procedura descritta in Installare, configurare e usare l'interfaccia della riga di comando (v2) per crearne una.
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.
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
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`
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
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
sutriton_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)
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
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.
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%/*}
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)
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)
Dopo aver completato le operazioni con l'endpoint, usare il comando seguente per eliminarlo:
az ml online-endpoint delete -n $ENDPOINT_NAME --yes
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:
- Distribuire modelli con REST
- Creare e usare endpoint online gestiti in Studio
- Implementazione sicura per gli endpoint online
- Come usare la scalabilità automatica per gli endpoint online gestiti
- Visualizzare i costi per un endpoint online gestito di Azure Machine Learning
- Accedere alle risorse di Azure con un endpoint online gestito e un'identità gestita
- Risolvere problemi relativi alla distribuzione di endpoint online gestiti