Implementazione di modelli con Triton Inference Server - Amazon SageMaker AI

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

Implementazione di modelli con Triton Inference Server

Triton Inference Server è un software di distribuzione delle inferenze open source che semplifica l'inferenza dell'intelligenza artificiale. Con Triton, puoi implementare qualsiasi modello costruito con più framework di deep learning e machine learning, tra cui TensorRT, TensorFlow, PyTorch, ONNX, OpenVINO, Python, RAPIDS FIL e altri.

I container SageMaker AI Triton semplificano l’implementazione di Triton Inference Server sulla piattaforma SageMaker AI Hosting per fornire modelli addestrati in produzione e supportano le diverse modalità operative di SageMaker AI. Per un elenco dei container Triton Inference Server disponibili su SageMaker AI, consulta Container NVIDIA Triton Inference (solo supporto SM).

Per esempi di notebook end-to-end, consigliamo di dare un'occhiata al repository amazon-sagemaker-examples.

Modalità di hosting

I container Triton supportano le seguenti modalità di SageMaker AI Hosting:

  • Endpoint per modelli singoli

    • È la modalità operativa predefinita di SageMaker AI. In questa modalità, il container Triton può caricare un modello singolo o un modello di ensemble singolo.

    • Il nome del modello deve essere passato come proprietà dell’ambiente del container, che fa parte della chiamata API CreateModel SageMaker AI. La variabile di ambiente utilizzata da inserire nel nome del modello è SAGEMAKER_TRITON_DEFAULT_MODEL_NAME.

  • Endpoint di modello singoli con ensemble

    • Triton Inference Server supporta l'ensemble, che è una pipeline, o un DAG (grafico aciclico diretto) di modelli. Sebbene un ensemble sia tecnicamente composto da più modelli, nella modalità di endpoint a modello singolo predefinita, SageMaker AI può trattare l’ensemble vero e proprio (il meta-modello che rappresenta la pipeline) come modello principale da caricare, per poi caricare successivamente i modelli associati.

    • Il nome del modello dell'ensemble vero e proprio deve essere utilizzato per caricare il modello. Deve essere inserito come proprietà dell'ambiente del container, che fa parte della chiamata all'API di SageMaker CreateModel. La variabile di ambiente utilizzata da inserire nel nome del modello è SAGEMAKER_TRITON_DEFAULT_MODEL_NAME.

  • Endpoint multimodello

    • In questa modalità, SageMaker AI può servire più modelli su un unico endpoint. È possibile utilizzare questa modalità specificando la variabile di ambiente ‘MultiModel’: true come proprietà dell'ambiente del container, che fa parte della chiamata API di SageMaker CreateModel.

    • Per impostazione predefinita, nessun modello viene caricato all'avvio dell'istanza. Per eseguire una richiesta di inferenza su un particolare modello, specifica il file *.tar.gz del modello corrispondente come argomento della proprietà TargetModel della chiamata API di SageMaker InvokeEndpoint.

  • Endpoint multimodello con ensemble

    • In questa modalità, SageMaker AI funziona come descritto per gli endpoint multi-modello. Tuttavia, il container SageMaker AI Triton può caricare più modelli ensemble, consentendo di eseguire più pipeline di modelli sulla stessa istanza. SageMaker AI tratta ogni ensemble come un unico modello e l’ensemble vero e proprio di ogni modello può essere invocato specificando l’archivio *.tar.gz corrispondente come TargetModel.

    • Per una migliore gestione della memoria durante la memoria dinamica LOAD e UNLOAD, si consiglia di mantenere un ensemble di piccole dimensioni.

Tipi di payload di inferenza

Triton supporta due metodi per inviare un payload di inferenza sulla rete: json e binary+json (o json con codifica binaria). Il payload JSON in entrambi i casi include il tipo di dati, la forma e l'effettivo tensore di richiesta di inferenza. Il tensore di richiesta deve essere un tensore binario.

Con il formato binary+json, è necessario specificare la lunghezza dei metadati della richiesta nell'intestazione per consentire a Triton di analizzare correttamente il payload binario. Nel container SageMaker AI Triton, questo avviene utilizzando un’intestazione Content-Type personalizzata: application/vnd.sagemaker-triton.binary+json;json-header-size={}. Ciò differisce dall’utilizzo dell’intestazione Inference-Header-Content-Length su un Triton Inference Server standalone, perché le intestazioni personalizzate non sono consentite in SageMaker AI.

Utilizzo di config.pbtxt per impostare la configurazione dei modelli

Per i Triton Inference Server su SageMaker AI, ogni modello deve includere un file config.pbtxt che specifichi almeno le seguenti configurazioni per il modello:

  • name: sebbene sia facoltativo per i modelli eseguiti al di fuori di SageMaker AI, consigliamo di indicare sempre un nome per i modelli da eseguire in Triton su SageMaker AI.

  • platform e/o backend: l'impostazione di un backend è essenziale per specificare il tipo di modello. Alcuni backend hanno un'ulteriore classificazione, come tensorflow_savedmodel o tensorflow_graphdef. Tali opzioni possono essere specificate come parte della chiave platform oltre alla chiave backend. I backend più diffusi sono tensorrt, onnxruntime, tensorflow, pytorch, python, dali, fil e openvino.

  • input: specifica tre attributi per l'input: name, data_type e dims (la forma).

  • output: specifica tre attributi per l'output: name, data_type e dims (la forma).

  • max_batch_size: imposta la dimensione del batch su un valore maggiore o uguale a 1 che indichi la dimensione massima del batch che Triton dovrebbe utilizzare con il modello.

Per maggiori informazioni sulla configurazione di config.pbtxt, consulta il repository GitHub di Triton. Triton fornisce diverse configurazioni per modificare il comportamento dei modelli. Alcune delle opzioni di configurazione più comuni e importanti sono:

  • instance_groups: i gruppi di istanze contribuiscono a specificare il numero e la posizione di un determinato modello. Hanno gli attributi count, kind e gpus (usati quando kind è KIND_GPU). L'attributo count è equivalente al numero di worker. Per la distribuzione di modelli ordinari, ogni worker dispone di una propria copia del modello. Analogamente, in Triton, count specifica il numero di copie del modello per dispositivo. Ad esempio, se il tipo instance_group è KIND_CPU, la CPU ha un numero di copie del modello pari a count.

    Nota

    In un'istanza GPU, la configurazione instance_group si applica a ciascun dispositivo GPU. Ad esempio, il numero count di copie del modello viene inserito su ciascun dispositivo GPU a meno che non si specifichi esplicitamente quali dispositivi GPU dovrebbero caricare il modello.

  • dynamic_batching e sequence_batching: il batching dinamico viene utilizzato per i modelli stateless e il batching in sequenza viene utilizzato per i modelli stateful (in cui si desidera instradare ogni volta una richiesta alla stessa istanza del modello). I pianificatori di batch abilitano una coda per modello, che aiuta ad aumentare il throughput, a seconda della configurazione di batching.

  • ensemble: un modello ensemble rappresenta una pipeline di uno o più modelli e la connessione dei tensori di input e output tra tali modelli. Può essere configurato specificando platform come ensemble. La configurazione dell'ensemble è solo una rappresentazione della pipeline del modello. In SageMaker AI, tutti i modelli in un ensemble vengono trattati come dipendenti del modello di ensemble e contati come un unico modello per le metriche di SageMaker AI, ad esempio LoadedModelCount.

Pubblicazione dei parametri Triton predefiniti su Amazon CloudWatch

Il container di inferenza Triton di NVIDIA fornisce i parametri alla porta 8002 (configurabile) per i diversi modelli e GPU utilizzati nel Triton Inference Server. Per tutte le informazioni sui parametri predefiniti disponibili, consulta la pagina GitHub per i parametri del Triton Inference Server. Questi parametri sono in formato Prometheus e possono essere sottoposti a scraping utilizzando una configurazione dello scraper Prometheus.

A partire dalla versione v23.07, il container Triton di SageMaker AI supporta la pubblicazione di queste metriche su Amazon CloudWatch specificando alcune variabili di ambiente. Per effettuare lo scraping delle metriche di Prometheus, il container Triton di SageMaker AI sfrutta l’agente Amazon CloudWatch.

Le variabili di ambiente obbligatorio che è necessario specificare per raccogliere i parametri sono le seguenti:

Variabile di ambiente Descrizione Valore di esempio

SAGEMAKER_TRITON_ALLOW_METRICS

Specifica questa opzione per consentire a Triton di pubblicare i parametri sul suo endpoint Prometheus.

"true"

SAGEMAKER_TRITON_PUBLISH_METRICS_TO_CLOUDWATCH

Specifica questa opzione per avviare i controlli preliminari necessari per pubblicare i parametri su Amazon CloudWatch.

"true"

SAGEMAKER_TRITON_CLOUDWATCH_LOG_GROUP

Specifica questa opzione per puntare al gruppo di log in cui vengono scritti i parametri.

“/aws/SageMaker AI/Endpoints/TritonMetrics/SageMakerTwoEnsemblesTest”

SAGEMAKER_TRITON_CLOUDWATCH_METRIC_NAMESPACE

Specifica questa opzione per puntare allo spazio dei nomi del parametro in cui desideri visualizzare e tracciare i parametri.

“/aws/SageMaker AI/Endpoints/TritonMetrics/SageMakerTwoEnsemblesPublicTest”

SAGEMAKER_TRITON_METRICS_PORT

Indica 8002 o qualsiasi altra porta. Se SageMaker AI non ha bloccato la porta specificata, questa viene utilizzata. Altrimenti, viene scelta automaticamente un'altra porta non bloccata.

"8002"

Quando pubblichi le metriche con Triton su SageMaker AI, tieni presente le seguenti limitazioni:

  • Sebbene sia possibile generare parametri personalizzati tramite il backend C-API e Python (dalla versione 23.05 in poi), al momento non sono supportati per la pubblicazione su Amazon CloudWatch.

  • Nella modalità endpoint multi-modello (MME) di SageMaker AI, Triton viene eseguito in un ambiente che richiede l’abilitazione del namespace dei modelli, perché ogni modello (eccetto i modelli di ensemble) viene trattato come se si trovasse nel proprio repository di modelli. Attualmente, ciò crea una limitazione per i Parametri. Quando lo spazio dei nomi dei modelli è abilitato, Triton non distingue i parametri tra due modelli con lo stesso nome appartenenti a ensemble diversi. Come soluzione alternativa, assicurati che ogni modello implementato abbia un nome univoco. Ciò semplifica anche la ricerca dei parametri in CloudWatch.

Variabili di ambiente

La tabella seguente elenca le variabili di ambiente supportate per Triton su SageMaker AI.

Variabile di ambiente Descrizione Tipo Valori possibili

SAGEMAKER_MULTI_MODEL

Consente a Triton di funzionare in modalità endpoint multi-modello di SageMaker IA.

Booleano

true, false

SAGEMAKER_TRITON_DEFAULT_MODEL_NAME

Specifica il modello da caricare nella modalità con modello singolo (predefinita) di SageMaker AI. Per la modalità ensemble, specifica il nome dell'ensemble vero e proprio.

Stringa

<model_name> specificato in config.pbtxt

SAGEMAKER_TRITON_PING_MODE

'ready' è la modalità predefinita nella modalità con modello singolo di SageMaker AI, mentre 'live' è l’impostazione predefinita nella modalità con endpoint multi-modello.

Stringa

ready, live

SAGEMAKER_TRITON_DISABLE_MODEL_NAMESPACING

Nel container SageMaker AI Triton, il valore predefinito di questa opzione è true.

Booleano

true, false

SAGEMAKER_BIND_TO_PORT

In SageMaker AI, la porta predefinita è la 8080. È possibile eseguire la personalizzazione utilizzando una porta diversa in scenari con più container.

Stringa

<port_number>

SAGEMAKER_SAFE_PORT_RANGE

È impostato dalla piattaforma SageMaker AI quando si utilizza la modalità multi-container.

Stringa

<port_1><port_2>

SAGEMAKER_TRITON_ALLOW_GRPC

Sebbene SageMaker AI non supporti attualmente GRPC, se utilizzi Triton davanti a un proxy inverso personalizzato, puoi scegliere di abilitare GRPC.

Booleano

true, false

SAGEMAKER_TRITON_GRPC_PORT

La porta predefinita per GRPC è 8001, ma è possibile modificarla.

Stringa

<port_number>

SAGEMAKER_TRITON_THREAD_COUNT

È possibile impostare il numero di thread predefiniti del gestore di richieste HTTP.

Stringa

<number>

SAGEMAKER_TRITON_LOG_VERBOSE

true per impostazione predefinita su SageMaker AI, ma è possibile disattivare selettivamente questa opzione.

Booleano

true, false

SAGEMAKER_TRITON_LOG_INFO

false per impostazione predefinita su SageMaker AI.

Booleano

true, false

SAGEMAKER_TRITON_LOG_WARNING

false per impostazione predefinita su SageMaker AI.

Booleano

true, false

SAGEMAKER_TRITON_LOG_ERROR

false per impostazione predefinita su SageMaker AI.

Booleano

true, false

SAGEMAKER_TRITON_SHM_DEFAULT_BYTE_SIZE

Specifica la dimensione shm per il backend Python, in byte. Il valore predefinito è 16 MB ma può essere aumentato.

Stringa

<number>

SAGEMAKER_TRITON_SHM_GROWTH_BYTE_SIZE

Specifica la dimensione di aumento di shm per il backend Python, in byte. Il valore predefinito è 1 MB, ma può essere aumentato per consentire incrementi maggiori.

Stringa

<number>

SAGEMAKER_TRITON_TENSORFLOW_VERSION

Il valore predefinito è 2. Triton non supporta più Tensorflow 2 di Triton v23.04. Puoi configurare questa variabile per le versioni precedenti.

Stringa

<number>

SAGEMAKER_TRITON_MODEL_LOAD_GPU_LIMIT

Limita la percentuale massima di memoria della GPU utilizzata per il caricamento dei modelli, permettendo di utilizzare il resto per le richieste di inferenza.

Stringa

<number>

SAGEMAKER_TRITON_ALLOW_METRICS

false per impostazione predefinita su SageMaker AI.

Booleano

true, false

SAGEMAKER_TRITON_METRICS_PORT

La porta predefinita è 8002.

Stringa

<number>

SAGEMAKER_TRITON_PUBLISH_METRICS_TO_CLOUDWATCH

false per impostazione predefinita su SageMaker AI. Imposta questa variabile su true per consentire il trasferimento dei parametri predefiniti di Triton ad Amazon CloudWatch. Se questa opzione è abilitata, si è responsabili dei costi di CloudWatch quando i parametri vengono pubblicati sul proprio account.

Booleano

true, false

SAGEMAKER_TRITON_CLOUDWATCH_LOG_GROUP

Obbligatorio se hai abilitato la pubblicazione dei parametri su CloudWatch.

Stringa

<cloudwatch_log_group_name>

SAGEMAKER_TRITON_CLOUDWATCH_METRIC_NAMESPACE

Obbligatorio se hai abilitato la pubblicazione dei parametri su CloudWatch.

Stringa

<cloudwatch_metric_namespace>

SAGEMAKER_TRITON_ADDITIONAL_ARGS

Aggiunge eventuali argomenti aggiuntivi all'avvio del server Triton.

Stringa

<additional_args>