

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
<a name="deploy-models-frameworks-triton"></a>

[Triton Inference Server](https://github.com/triton-inference-server/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,, ONNX, OpenVINO, Python TensorFlow PyTorch, RAPIDS FIL e altri.

I contenitori SageMaker AI Triton ti aiutano a implementare Triton Inference Server sulla piattaforma di hosting AI per servire modelli addestrati in produzione. SageMaker Supporta le diverse modalità in cui opera l'IA. SageMaker Per un elenco dei contenitori Triton Inference Server disponibili su SageMaker AI, consulta [NVIDIA Triton Inference Containers (](https://github.com/aws/deep-learning-containers/blob/master/available_images.md#nvidia-triton-inference-containers-sm-support-only)solo supporto SM). 

[Per esempi di end-to-end notebook, consigliamo di dare un'occhiata al repository. amazon-sagemaker-examples ](https://github.com/aws/amazon-sagemaker-examples/tree/main/sagemaker-triton)

## Modalità di hosting
<a name="deploy-models-frameworks-triton-modes"></a>

Le seguenti modalità di hosting SageMaker AI sono supportate dai contenitori Triton:
+ Endpoint per modelli singoli
  + Questa è 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 contenitore, 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 insieme sia tecnicamente composto da più modelli, nella modalità endpoint a modello singolo predefinita, l' SageMaker intelligenza artificiale può considerare l'*insieme vero e proprio* (il metamodello che rappresenta la pipeline) come modello principale da caricare e può successivamente caricare i modelli associati.
  + Il nome del modello dell'ensemble vero e proprio deve essere utilizzato per caricare il modello. Deve essere passato come proprietà dell'ambiente contenitore, che fa parte della chiamata API. `CreateModel` SageMaker La variabile di ambiente utilizzata da inserire nel nome del modello è `SAGEMAKER_TRITON_DEFAULT_MODEL_NAME`.
+ Endpoint multimodello
  + In questa modalità, l' SageMaker intelligenza artificiale può servire più modelli su un singolo endpoint. È possibile utilizzare questa modalità specificando la variabile di ambiente `‘MultiModel’: true` come proprietà dell'ambiente contenitore, che fa parte della chiamata `CreateModel` SageMaker API.
  + Per impostazione predefinita, nessun modello viene caricato all'avvio dell'istanza. Per eseguire una richiesta di inferenza su un particolare modello, specificate il `*.tar.gz` file del modello corrispondente come argomento della `TargetModel` proprietà della chiamata `InvokeEndpoint` SageMaker API.
+ Endpoint multimodello con ensemble
  + In questa modalità, l' SageMaker intelligenza artificiale funziona come descritto per gli endpoint multimodello. Tuttavia, il contenitore SageMaker AI Triton può caricare più modelli di ensemble, il che significa che più pipeline di modelli possono essere eseguite sulla stessa istanza. SageMaker L'intelligenza artificiale tratta ogni ensemble come un unico modello e l'insieme vero e proprio di ogni modello può essere richiamato specificando l'archivio corrispondente come. `*.tar.gz` `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
<a name="deploy-models-frameworks-triton-payloads"></a>

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 contenitore SageMaker AI Triton, questa operazione viene eseguita utilizzando un'intestazione personalizzata:. `Content-Type` `application/vnd.sagemaker-triton.binary+json;json-header-size={}` Questo è diverso dall'utilizzo dell'`Inference-Header-Content-Length`intestazione su un Triton Inference Server autonomo perché le intestazioni personalizzate non sono consentite nell'intelligenza artificiale. SageMaker 

## Utilizzo di config.pbtxt per impostare la configurazione dei modelli
<a name="deploy-models-frameworks-triton-config"></a>

Per Triton Inference Servers on SageMaker AI, ogni modello deve includere un `config.pbtxt` file che specifichi, come minimo, le seguenti configurazioni per il modello:
+ `name`: Sebbene questo sia facoltativo per i modelli che funzionano al di fuori dell' SageMaker IA, ti consigliamo di fornire sempre un nome per i modelli da eseguire in Triton on AI. SageMaker 
+ [`platform` e/o `backend`](https://github.com/triton-inference-server/backend/blob/main/README.md#backends): 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 dettagli sulla configurazione`config.pbtxt`, consulta il repository di Triton. GitHub ](https://github.com/triton-inference-server/server/blob/main/docs/user_guide/model_configuration.md) Triton fornisce diverse configurazioni per modificare il comportamento dei modelli. Alcune delle opzioni di configurazione più comuni e importanti sono:
+ [https://github.com/triton-inference-server/server/blob/main/docs/user_guide/model_configuration.md#instance-groups](https://github.com/triton-inference-server/server/blob/main/docs/user_guide/model_configuration.md#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.
+ [https://github.com/triton-inference-server/server/blob/main/docs/user_guide/model_configuration.md#dynamic-batcher](https://github.com/triton-inference-server/server/blob/main/docs/user_guide/model_configuration.md#dynamic-batcher) e [https://github.com/triton-inference-server/server/blob/main/docs/user_guide/architecture.md#stateful-models](https://github.com/triton-inference-server/server/blob/main/docs/user_guide/architecture.md#stateful-models): 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.
+ [https://github.com/triton-inference-server/server/blob/main/docs/user_guide/architecture.md#ensemble-models](https://github.com/triton-inference-server/server/blob/main/docs/user_guide/architecture.md#ensemble-models): 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. Per quanto riguarda l' SageMaker intelligenza artificiale, tutti i modelli di un insieme vengono trattati come dipendenti del modello di insieme e contati come un unico modello per SageMaker le metriche di intelligenza artificiale, ad esempio. `LoadedModelCount`

## Pubblicazione dei parametri Triton predefiniti su Amazon CloudWatch
<a name="deploy-models-frameworks-triton-metrics"></a>

NVIDIA Triton Inference Container espone i parametri sulla porta 8002 (configurabile) per i diversi modelli e GPUs che vengono utilizzati nel Triton Inference Server. [Per tutti i dettagli sulle metriche predefinite disponibili, consulta la pagina relativa alle metriche del Triton Inference Server. GitHub ](https://github.com/triton-inference-server/server/blob/main/docs/user_guide/metrics.md) Questi parametri sono in formato Prometheus e possono essere sottoposti a scraping utilizzando una configurazione dello scraper Prometheus.

A partire dalla versione v23.07 in poi, il contenitore SageMaker AI Triton supporta la pubblicazione di queste metriche su Amazon CloudWatch specificando alcune variabili di ambiente. Per analizzare i parametri di Prometheus, il container SageMaker AI Triton sfrutta l'agente Amazon. CloudWatch 

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


| Variabile di ambiente | Description | 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`  |  Specificate questa opzione per avviare i controlli preliminari necessari per pubblicare le metriche 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 l' SageMaker IA non ha bloccato la porta specificata, viene utilizzata. Altrimenti, viene scelta automaticamente un'altra porta non bloccata.  | "8002" | 

Quando pubblichi metriche con Triton on SageMaker AI, tieni presente le seguenti limitazioni:
+ Sebbene sia possibile generare metriche personalizzate tramite il backend C-API e Python (dalla versione 23.05 in poi), al momento non sono supportate per la pubblicazione su Amazon. CloudWatch
+ In modalità SageMaker AI multimodel endpoint (MME), Triton viene eseguito in un ambiente che richiede l'abilitazione del namespace dei modelli perché ogni modello (eccetto i modelli 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 delle metriche. CloudWatch

## Variabili di ambiente
<a name="deploy-models-frameworks-triton-variables"></a>

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


| Variabile di ambiente | Description | Tipo | Valori possibili | 
| --- | --- | --- | --- | 
| `SAGEMAKER_MULTI_MODEL` | Consente a Triton di operare in modalità endpoint multimodello SageMaker AI. | Booleano | `true`, `false` | 
| `SAGEMAKER_TRITON_DEFAULT_MODEL_NAME` | Specificate il modello da caricare nella modalità SageMaker AI modello singolo (predefinita). Per la modalità ensemble, specifica il nome dell'ensemble vero e proprio. | Stringa | *<model\$1name>*come specificato in config.pbtxt | 
| `SAGEMAKER_TRITON_PING_MODE` | `'ready'`è la modalità predefinita nella modalità modello singolo di SageMaker AI ed `'live'` è l'impostazione predefinita nella modalità endpoint multimodello di SageMaker AI. | Stringa | `ready`, `live` | 
| `SAGEMAKER_TRITON_DISABLE_MODEL_NAMESPACING` | Nel contenitore SageMaker AI Triton, questa opzione è impostata per `true` impostazione predefinita. | Booleano | `true`, `false` | 
| `SAGEMAKER_BIND_TO_PORT` | In SageMaker AI, la porta predefinita è 8080. È possibile eseguire la personalizzazione utilizzando una porta diversa in scenari con più container. | Stringa | *<port\$1number>* | 
| `SAGEMAKER_SAFE_PORT_RANGE` | Questo è impostato dalla piattaforma SageMaker AI quando si utilizza la modalità multi-contenitore. | Stringa | *<port\$11>*–*<port\$12>* | 
| `SAGEMAKER_TRITON_ALLOW_GRPC` | Sebbene l' SageMaker IA non supporti attualmente GRPC, se utilizzi Triton davanti a un reverse proxy personalizzato, puoi scegliere di abilitare GRPC. | Booleano | `true`, `false` | 
| `SAGEMAKER_TRITON_GRPC_PORT` | La porta predefinita per GRPC è 8001, ma è possibile modificarla. | Stringa | *<port\$1number>* | 
| `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 puoi 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 `true` per consentire l'invio delle metriche predefinite di Triton ad Amazon. CloudWatch Se questa opzione è abilitata, sei responsabile dei CloudWatch costi quando le metriche vengono pubblicate sul tuo account. | Booleano | `true`, `false` | 
| `SAGEMAKER_TRITON_CLOUDWATCH_LOG_GROUP` | Obbligatorio se hai abilitato la pubblicazione delle metriche su. CloudWatch | Stringa | *<cloudwatch\$1log\$1group\$1name>* | 
| `SAGEMAKER_TRITON_CLOUDWATCH_METRIC_NAMESPACE` | Obbligatorio se hai abilitato la pubblicazione delle metriche su. CloudWatch | Stringa | *<cloudwatch\$1metric\$1namespace>* | 
| `SAGEMAKER_TRITON_ADDITIONAL_ARGS` | Aggiunge eventuali argomenti aggiuntivi all'avvio del server Triton. | Stringa | *<additional\$1args>* | 