Questa pagina descrive come gestire le richieste di previsione con Server di inferenza NVIDIA Triton con Vertex AI Prediction. Server di inferenza NVIDIA Triton (Triton) è un servizio di inferenza di soluzioni NVIDIA, ottimizzata sia per CPU che per GPU, e semplifica dell'inferenza che gestisce il processo.
NVIDIA Triton su Vertex AI Prediction
Vertex AI Prediction supporta il deployment di modelli su Triton server di inferenza in esecuzione su un container personalizzato pubblicato da NVIDIA GPU Cloud (NGC) - Immagine del server di inferenza NVIDIA Triton. Le immagini Triton di NVIDIA includono tutti i pacchetti richiesti che soddisfano i requisiti di Vertex AI per la pubblicazione personalizzata immagini container. L'immagine contiene il server di inferenza Triton con supporto per Modelli TensorFlow, PyTorch, TensorRT, ONNX e OpenVINO. L'immagine include anche FIL (Forest Inference Library) che supporta l'esecuzione di framework ML come XGBoost, LightGBM, e Scikit-Learn.
Triton carica i modelli ed espone inferenza, integrità e modello gestione degli endpoint REST che utilizzano l'inferenza standard protocolli. Durante il deployment di un modello in Vertex AI, Triton riconosce Ambienti Vertex AI e adotta il protocollo Vertex AI Prediction per controlli di integrità e richieste di previsione.
Nell'elenco che segue vengono descritte le funzionalità principali e i casi d'uso del server di inferenza NVIDIA Triton:
- Supporto di più framework di deep learning e machine learning: Triton supporta l'implementazione di più modelli e una combinazione framework e formati di modelli: TensorFlow (SavedModel e GraphDef), Backend PyTorch (TorchScript), TensorRT, ONNX, OpenVINO e FIL da supportare come XGBoost, LightGBM, Scikit-Learn e qualsiasi Python o C++.
- Esecuzione simultanea di più modelli. Triton consente più istanze dello stesso modello o entrambi da eseguire contemporaneamente la stessa risorsa di computing con zero o più GPU.
- Assemblaggio dei modelli (chaining o pipelining): Triton ensemble supporta i casi d'uso in cui più modelli sono composti come una pipeline (o un DAG, Directed Acyclic Graph) con ingressi e tensori di uscita collegati tra di loro. Inoltre, con un backend Triton Python, puoi includono qualsiasi logica di flusso di pre-elaborazione, post-elaborazione o controllo definita Business Logic Scripting (BLS).
- Esegui su backend CPU e GPU: Triton supporta l'inferenza per di cui è stato eseguito il deployment su nodi con CPU e GPU.
- Raggruppamento dinamico in batch delle richieste di previsione: per i modelli che supportano il raggruppamento in batch, Triton dispone di algoritmi integrati per la pianificazione e la gestione dei batch. Questi algoritmi di combinare dinamicamente le singole richieste di inferenza in batch sul lato server per migliorare la velocità effettiva di inferenza e aumentare l'utilizzo della GPU.
Per ulteriori informazioni sul server di inferenza NVIDIA Triton, consulta Triton documentazione.
Immagini container NVIDIA Triton disponibili
La tabella seguente mostra le immagini Triton Docker disponibili su NVIDIA NGC Catalogo. Scegli un'immagine in base al framework del modello, al backend e alle dimensioni dell'immagine container che utilizzi.
xx
e yy
fanno riferimento alle versioni maggiori e minori di Tritone,
rispettivamente.
Immagine NVIDIA Triton | Supporti |
---|---|
xx.yy-py3 |
Container completo con supporto per i modelli TensorFlow, PyTorch, TensorRT, ONNX e OpenVINO |
xx.yy-pyt-python-py3 |
Solo backend PyTorch e Python |
xx.yy-tf2-python-py3 |
Solo backend TensorFlow 2.x e Python |
xx.yy-py3-min |
Personalizza il container Triton in base alle tue esigenze |
Per iniziare: pubblicazione di previsioni con NVIDIA Triton
La figura seguente mostra l'architettura generale di Triton su Vertex AI Prediction -
- È registrato un modello ML che deve essere gestito da Triton. Vertex AI Model Registry. I metadati del modello fanno riferimento a una posizione gli artefatti del modello in Cloud Storage, il container di pubblicazione personalizzato e la sua configurazione.
- Il deployment del modello da Vertex AI Model Registry viene eseguito in una Endpoint Vertex AI Prediction che esegue l'inferenza di Triton come container personalizzato sui nodi di computing con CPU e GPU.
- Le richieste di inferenza arrivano al server di inferenza di Triton attraverso un endpoint Vertex AI Prediction e indirizzato allo scheduler appropriato.
- Il backend esegue l'inferenza utilizzando gli input forniti nella e restituisce una risposta.
- Triton fornisce endpoint per il recupero e l'attività, che consentono l'integrazione di Triton negli ambienti di deployment come Vertex AI Prediction.
Questo tutorial mostra come utilizzare un container personalizzato che esegue il server di inferenza NVIDIA Triton per eseguire il deployment di un modello di machine learning (ML) Vertex AI Prediction, che fornisce previsioni online. Esegui il deployment di un container che esegue Triton per fornire previsioni da un modello per il rilevamento di oggetti TensorFlow Hub che è stato preaddestrato sulla base Set di dati COCO 2017. Puoi e poi usare Vertex AI Prediction per rilevare oggetti in un'immagine.
Puoi anche eseguire il tutorial su Vertex AI Workbench seguendo questo Blocco note Jupyter.
Prima di iniziare
- Accedi al tuo account Google Cloud. Se non conosci Google Cloud, crea un account per valutare le prestazioni dei nostri prodotti in scenari reali. I nuovi clienti ricevono anche 300 $di crediti gratuiti per l'esecuzione, il test e il deployment dei carichi di lavoro.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Assicurati che la fatturazione sia attivata per il tuo progetto Google Cloud.
-
Abilita le API Vertex AI API and Artifact Registry API.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Assicurati che la fatturazione sia attivata per il tuo progetto Google Cloud.
-
Abilita le API Vertex AI API and Artifact Registry API.
-
Nella console Google Cloud, attiva Cloud Shell.
Nella parte inferiore della console Google Cloud viene avviata una sessione di Cloud Shell che mostra un prompt della riga di comando. Cloud Shell è un ambiente shell con Google Cloud CLI già installato e con valori già impostati per il progetto attuale. L'inizializzazione della sessione può richiedere alcuni secondi.
Per tutto questo tutorial, ti consigliamo di usare Cloud Shell per interagire con Google Cloud. Se vuoi una shell Bash diversa da Cloud Shell eseguire la seguente configurazione aggiuntiva:
- Installa Google Cloud CLI.
-
Per initialize gcloud CLI, esegui questo comando:
gcloud init
- Segui la documentazione di Artifact Registry per installare e Docker.
Creazione e push dell'immagine container
Per utilizzare un container personalizzato, devi specificare un'immagine container Docker che soddisfi i requisiti i requisiti dei container personalizzati. Questa sezione descrive come creare l'immagine container ed eseguirne il push a Artifact Registry.
Scarica artefatti del modello
Gli artefatti del modello sono file creati dall'addestramento ML che puoi utilizzare per pubblicare per le previsioni. Contengono almeno la struttura e ponderazioni di per il modello ML addestrato. Il formato degli artefatti del modello dipende da quale ML il framework che usi per l'addestramento.
Per questo tutorial, anziché addestrare un modello da zero, scarica l'oggetto
di rilevamento del traffico
TensorFlow Hub
che è stato
addestrato sul set di dati COCO 2017.
Tritone si aspetta
repository di modelli
nella seguente struttura per la pubblicazione
Formato TensorFlow SavedModel
:
└── model-repository-path
└── model_name
├── config.pbtxt
└── 1
└── model.savedmodel
└── <saved-model-files>
Il file config.pbtxt
descrive
configurazione del modello
per il modello. Per impostazione predefinita, il file di configurazione del modello che contiene le informazioni richieste
è necessario specificare le impostazioni predefinite. Tuttavia, se Tritone inizia con
--strict-model-config=false
e, in alcuni casi, il modello
la configurazione può essere
generati automaticamente
di Triton e non deve essere fornito esplicitamente.
Nello specifico, i modelli TensorRT, TensorFlow SavedModel e ONNX non richiedono un
di configurazione del modello perché Triton può ricavare tutti i
automaticamente le impostazioni richieste. Tutti gli altri tipi di modello devono fornire un modello
di configurazione del deployment.
# Download and organize model artifacts according to the Triton model repository spec
mkdir -p models/object_detector/1/model.savedmodel/
curl -L "https://tfhub.dev/tensorflow/faster_rcnn/resnet101_v1_640x640/1?tf-hub-format=compressed" | \
tar -zxvC ./models/object_detector/1/model.savedmodel/
ls -ltr ./models/object_detector/1/model.savedmodel/
Dopo aver scaricato il modello in locale, il repository dei modelli verrà organizzato seguenti:
./models
└── object_detector
└── 1
└── model.savedmodel
├── saved_model.pb
└── variables
├── variables.data-00000-of-00001
└── variables.index
Copia gli artefatti del modello in un bucket Cloud Storage
Viene eseguito il push degli artefatti del modello scaricati, incluso il file di configurazione del modello
un bucket Cloud Storage specificato da MODEL_ARTIFACTS_REPOSITORY
, che può essere utilizzato
quando crei la risorsa del modello Vertex AI.
gsutil cp -r ./models/object_detector MODEL_ARTIFACTS_REPOSITORY/
Crea un repository Artifact Registry
Crea un repository Artifact Registry per archiviare l'immagine container che creerai nella prossima sezione.
Abilita il servizio API Artifact Registry per il tuo progetto.
gcloud services enable artifactregistry.googleapis.com
Esegui questo comando nella shell per creare il repository Artifact Registry:
gcloud artifacts repositories create getting-started-nvidia-triton \
--repository-format=docker \
--location=LOCATION \
--description="NVIDIA Triton Docker repository"
Sostituisci LOCATION con la regione in cui Artifact Registry
per archiviare l'immagine container. Poi devi creare un'istanza Vertex AI
su un endpoint a livello di regione che corrisponde a questa regione, quindi scegli una regione
in cui Vertex AI ha una regione
endpoint,
ad esempio us-central1
.
Dopo aver completato l'operazione, il comando visualizza il seguente output:
Created repository [getting-started-nvidia-triton].
Crea l'immagine container
NVIDIA fornisce
Immagini Docker
per creare un'immagine container che esegue Triton
e si allinea con il container personalizzato di Vertex AI
di sicurezza per
in fase di pubblicazione. Puoi eseguire il pull dell'immagine utilizzando docker
e taggare Artifact Registry
percorso a cui verrà eseguito il push dell'immagine.
NGC_TRITON_IMAGE_URI="nvcr.io/nvidia/tritonserver:22.01-py3"
docker pull $NGC_TRITON_IMAGE_URI
docker tag $NGC_TRITON_IMAGE_URI LOCATION-docker.pkg.dev/PROJECT_ID/getting-started-nvidia-triton/vertex-triton-inference
Sostituisci quanto segue:
- LOCATION: la regione del tuo repository Artifact Registry, come specificato in una sezione precedente
- PROJECT_ID: l'ID del tuo account Google Cloud progetto
Il comando potrebbe essere eseguito per diversi minuti.
Prepara il file del payload per testare le richieste di previsione
Per inviare al server del container una richiesta di previsione, prepara il payload con un file immagine di esempio che utilizza Python. Esegui il seguente script Python genera il file del payload:
import json
import requests
# install required packages before running
# pip install pillow numpy --upgrade
from PIL import Image
import numpy as np
# method to generate payload from image url
def generate_payload(image_url):
# download image from url and resize
image_inputs = Image.open(requests.get(image_url, stream=True).raw)
image_inputs = image_inputs.resize((200, 200))
# convert image to numpy array
image_tensor = np.asarray(image_inputs)
# derive image shape
image_shape = [1] + list(image_tensor.shape)
# create payload request
payload = {
"id": "0",
"inputs": [
{
"name": "input_tensor",
"shape": image_shape,
"datatype": "UINT8",
"parameters": {},
"data": image_tensor.tolist(),
}
],
}
# save payload as json file
payload_file = "instances.json"
with open(payload_file, "w") as f:
json.dump(payload, f)
print(f"Payload generated at {payload_file}")
return payload_file
if __name__ == '__main__':
image_url = "https://github.com/tensorflow/models/raw/master/research/object_detection/test_images/image2.jpg"
payload_file = generate_payload(image_url)
Lo script Python genera il payload e stampa la seguente risposta:
Payload generated at instances.json
Esegui il container in locale (facoltativo)
Prima di eseguire il push dell'immagine container in Artifact Registry per utilizzarla con Vertex AI Prediction, puoi eseguirlo come container per verificare che il server funzioni come previsto:
Per eseguire l'immagine container in locale, esegui questo comando della tua shell:
docker run -t -d -p 8000:8000 --rm \ --name=local_object_detector \ -e AIP_MODE=True \ LOCATION-docker.pkg.dev/PROJECT_ID/getting-started-nvidia-triton/vertex-triton-inference \ --model-repository MODEL_ARTIFACTS_REPOSITORY \ --strict-model-config=false
Sostituisci quanto segue, come hai fatto nella sezione precedente:
- LOCATION: la regione del tuo repository Artifact Registry, come specificato in una sezione precedente
- PROJECT_ID: l'ID del tuo account Google Cloud progetto
- MODEL_ARTIFACTS_REPOSITORY: il percorso di Cloud Storage in cui gli artefatti del modello
Questo comando esegue un container in , mappatura la porta
8000
del container alla porta8000
del dell'ambiente locale. L'immagine di Triton di NGC configura Triton per utilizzare la porta8000
.Per inviare al server del container un controllo, esegui questo comando nella shell:
curl -s -o /dev/null -w "%{http_code}" http://localhost:8000/v2/health/ready
In caso di esito positivo, il server restituisce il codice di stato
200
.Esegui questo comando per inviare una previsione al server del container utilizzando il payload generato in precedenza e ottieni le risposte di previsione:
curl -X POST \ -H "Content-Type: application/json" \ -d @instances.json \ localhost:8000/v2/models/object_detector/infer | jq -c '.outputs[] | select(.name == "detection_classes")'
Questa richiesta utilizza uno dei prova immagini incluse nell'esempio di rilevamento degli oggetti TensorFlow.
In caso di esito positivo, il server restituisce la previsione seguente:
{"name":"detection_classes","datatype":"FP32","shape":[1,300],"data":[38,1,...,44]}
Per arrestare il container, esegui questo comando nella shell:
docker stop local_object_detector
esegui il push dell'immagine container in Artifact Registry
Configurare Docker per accedere ad Artifact Registry. Poi esegui il push dell'immagine container del repository Artifact Registry.
per concedere alla tua installazione Docker locale l'autorizzazione per eseguire il push a Artifact Registry nella regione scelta, esegui questo comando shell:
gcloud auth configure-docker LOCATION-docker.pkg.dev
- Sostituisci LOCATION con la regione in cui hai creato il repository in una sezione precedente.
Per eseguire il push dell'immagine container solo ad Artifact Registry, esegui questo comando nella tua shell:
docker push LOCATION-docker.pkg.dev/PROJECT_ID/getting-started-nvidia-triton/vertex-triton-inference
Sostituisci quanto segue, come hai fatto nella sezione precedente:
- LOCATION: la regione del tuo repository Artifact Registry, come specificato in una sezione precedente
- PROJECT_ID: l'ID del tuo account Google Cloud progetto
Deployment del modello
Crea un modello
Per creare una risorsa Model
che utilizza un container personalizzato in esecuzione
Tritone, esegui questo gcloud ai models upload
comando:
gcloud ai models upload \
--region=LOCATION \
--display-name=DEPLOYED_MODEL_NAME \
--container-image-uri=LOCATION-docker.pkg.dev/PROJECT_ID/getting-started-nvidia-triton/vertex-triton-inference \
--artifact-uri=MODEL_ARTIFACTS_REPOSITORY \
--container-args='--strict-model-config=false'
- LOCATION_ID: la regione in cui stai utilizzando Vertex AI.
- PROJECT_ID: l'ID del tuo account Google Cloud progetto
-
DEPLOYED_MODEL_NAME: un nome per
DeployedModel
. Puoi utilizzare il nome visualizzatoModel
anche perDeployedModel
.
L'argomento --container-args='--strict-model-config=false'
consente
Triton per generare automaticamente la configurazione del modello.
Creazione di un endpoint
Devi eseguire il deployment del modello su un endpoint prima che il modello possa essere utilizzato
le previsioni online. Se esegui il deployment di un modello in un endpoint esistente,
puoi saltare questo passaggio. L'esempio seguente utilizza il metodo
gcloud ai endpoints create
comando:
gcloud ai endpoints create \
--region=LOCATION \
--display-name=ENDPOINT_NAME
Sostituisci quanto segue:
- LOCATION_ID: la regione in cui stai utilizzando Vertex AI.
- ENDPOINT_NAME: il nome visualizzato dell'endpoint.
Lo strumento Google Cloud CLI potrebbe richiedere alcuni secondi per creare l'endpoint.
esegui il deployment del modello nell'endpoint
Quando l'endpoint è pronto, esegui il deployment del modello nell'endpoint. Quando esegui il deployment un modello a un endpoint, il servizio associa le risorse fisiche al modello che esegue Triton per fornire previsioni online.
L'esempio seguente utilizza la classe gcloud ai endpoints deploy-model
comando per eseguire il deployment Model
a un Triton endpoint
in esecuzione su GPU per accelerare la previsione
e senza suddividere il traffico tra più DeployedModel
di risorse:
ENDPOINT_ID=$(gcloud ai endpoints list \
--region=LOCATION \
--filter=display_name=ENDPOINT_NAME \
--format="value(name)")
MODEL_ID=$(gcloud ai models list \
--region=LOCATION \
--filter=display_name=DEPLOYED_MODEL_NAME \
--format="value(name)")
gcloud ai endpoints deploy-model $ENDPOINT_ID \
--region=LOCATION \
--model=$MODEL_ID \
--display-name=DEPLOYED_MODEL_NAME \
--machine-type=MACHINE_TYPE \
--min-replica-count=MIN_REPLICA_COUNT \
--max-replica-count=MAX_REPLICA_COUNT \
--accelerator=count=ACCELERATOR_COUNT,type=ACCELERATOR_TYPE \
--traffic-split=0=100
Sostituisci quanto segue:
- LOCATION_ID: la regione in cui stai utilizzando Vertex AI.
- ENDPOINT_NAME: il nome visualizzato dell'endpoint.
-
DEPLOYED_MODEL_NAME: un nome per
DeployedModel
. Puoi utilizzare il nome visualizzatoModel
anche perDeployedModel
. -
MACHINE_TYPE: facoltativo. Le risorse macchina utilizzate per ogni nodo
e deployment continuo. L'impostazione predefinita è
n1-standard-2
. Scopri di più sui tipi di macchina. - MIN_REPLICA_COUNT: numero minimo di nodi per questo deployment. Il conteggio dei nodi può essere aumentato o diminuito in base al carico della previsione. fino al numero massimo di nodi e mai meno di questo numero.
- MAX_REPLICA_COUNT: il numero massimo di nodi per questo deployment. Il conteggio dei nodi può essere aumentato o diminuito in base al carico della previsione. fino a questo numero di nodi e mai meno del numero minimo di nodi.
- ACCELERATOR_TYPE: gestisci la configurazione dell'acceleratore per la pubblicazione delle GPU. Durante il deployment di un modello con tipi di macchina Compute Engine, viene usato un acceleratore GPU e il tipo deve essere specificato. Le scelte sono 'nvidia-tesla-a100', 'nvidia-tesla-p100', "nvidia-tesla-p4", "nvidia-tesla-t4", "nvidia-tesla-v100".
- ACCELERATOR_COUNT: il numero di acceleratori da collegare a ogni acceleratore macchina che esegue il job. Solitamente, è 1. Se non specificato, il valore predefinito è 1.
Lo strumento Google Cloud CLI potrebbe richiedere alcuni secondi per eseguire il deployment del modello endpoint. Una volta eseguito il deployment del modello, questo comando visualizza il seguente output:
Deployed a model to the endpoint xxxxx. Id of the deployed model: xxxxx.
Generazione di previsioni online dal modello di cui è stato eseguito il deployment
Per richiamare il modello tramite l'endpoint Vertex AI Prediction, formatta
la richiesta di previsione mediante un oggetto JSON standard Inference Request
.
oppure un oggetto JSON di richiesta di inferenza con estensione binaria
e invia una richiesta a Vertex AI Prediction REST rawPredict
endpoint.
L'esempio seguente utilizza la classe gcloud ai endpoints raw-predict
comando:
ENDPOINT_ID=$(gcloud ai endpoints list \
--region=LOCATION \
--filter=display_name=ENDPOINT_NAME \
--format="value(name)")
gcloud ai endpoints raw-predict $ENDPOINT_ID \
--region=LOCATION \
--http-headers=Content-Type=application/json \
--request @instances.json
Sostituisci quanto segue:
- LOCATION_ID: la regione in cui stai utilizzando Vertex AI.
- ENDPOINT_NAME: il nome visualizzato dell'endpoint.
L'endpoint restituisce la seguente risposta per una richiesta valida:
{
"id": "0",
"model_name": "object_detector",
"model_version": "1",
"outputs": [{
"name": "detection_anchor_indices",
"datatype": "FP32",
"shape": [1, 300],
"data": [2.0, 1.0, 0.0, 3.0, 26.0, 11.0, 6.0, 92.0, 76.0, 17.0, 58.0, ...]
}]
}
esegui la pulizia
Per evitare ulteriori incorrere in Vertex AI addebiti e Artifact Registry addebiti, elimina le risorse Google Cloud che hai creato durante questo tutorial:
Per annullare il deployment del modello nell'endpoint ed eliminare l'endpoint, esegui questo comando nella shell:
ENDPOINT_ID=$(gcloud ai endpoints list \ --region=LOCATION \ --filter=display_name=ENDPOINT_NAME \ --format="value(name)") DEPLOYED_MODEL_ID=$(gcloud ai endpoints describe $ENDPOINT_ID \ --region=LOCATION \ --format="value(deployedModels.id)") gcloud ai endpoints undeploy-model $ENDPOINT_ID \ --region=LOCATION \ --deployed-model-id=$DEPLOYED_MODEL_ID gcloud ai endpoints delete $ENDPOINT_ID \ --region=LOCATION \ --quiet
Sostituisci LOCATION con la regione in cui hai creato il modello una sezione precedente.
Per eliminare il modello, esegui questo comando nella shell:
MODEL_ID=$(gcloud ai models list \ --region=LOCATION \ --filter=display_name=DEPLOYED_MODEL_NAME \ --format="value(name)") gcloud ai models delete $MODEL_ID \ --region=LOCATION \ --quiet
Sostituisci LOCATION con la regione in cui hai creato il modello una sezione precedente.
Per eliminare il repository Artifact Registry e l'immagine container al suo interno, esegui questo comando nella shell:
gcloud artifacts repositories delete getting-started-nvidia-triton \ --location=LOCATION \ --quiet
Sostituisci LOCATION con la regione in cui hai creato il Repository Artifact Registry in una sezione precedente.
Limitazioni
- Il container personalizzato Triton non è compatibile con Vertex Explainable AI o Vertex AI Model Monitoring.
Passaggi successivi
- Consulta il blocco note Jupyter di Vertex AI tutorial per i pattern di deployment con il server di inferenza NVIDIA Triton su Vertex AI Prediction.