

As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.

# Implantação de modelo com o servidor de inferência Triton
<a name="deploy-models-frameworks-triton"></a>

O [servidor de inferência Triton](https://github.com/triton-inference-server/server) é um software de serviço de inferência de código aberto que simplifica a inferência de IA. Com o Triton, você pode implantar qualquer modelo criado com várias estruturas de aprendizado profundo e de aprendizado de máquina, incluindo TensorRT,,, PyTorch ONNX, OpenVINO TensorFlow, Python, RAPIDS FIL e muito mais.

Os contêineres SageMaker AI Triton ajudam você a implantar o Triton Inference Server na plataforma SageMaker AI Hosting para oferecer modelos treinados em produção. Ele suporta os diferentes modos em que a SageMaker IA opera. Para obter uma lista dos contêineres do Triton Inference Server disponíveis na SageMaker IA, consulte Contêineres de [inferência NVIDIA Triton (somente suporte para SM](https://github.com/aws/deep-learning-containers/blob/master/available_images.md#nvidia-triton-inference-containers-sm-support-only)). 

Para exemplos de end-to-end notebooks, recomendamos dar uma olhada no [amazon-sagemaker-examples repositório.](https://github.com/aws/amazon-sagemaker-examples/tree/main/sagemaker-triton)

## Modos de hospedagem
<a name="deploy-models-frameworks-triton-modes"></a>

Os seguintes modos de hospedagem de SageMaker IA são compatíveis com os contêineres Triton:
+ Endpoints de modelo único
  + Esse é o modo de operação padrão da SageMaker IA. Nesse modo, o contêiner do Triton pode carregar um modelo único ou um modelo único de conjunto.
  + O nome do modelo deve ser passado como uma propriedade do ambiente de contêiner, que faz parte da chamada da API de `CreateModel` SageMaker IA. A variável de ambiente usada para passar o nome do modelo é `SAGEMAKER_TRITON_DEFAULT_MODEL_NAME`.
+ Endpoints de modelo único com conjunto
  + O servidor de inferência Triton é compatível com um *conjunto*, que é um pipeline ou um DAG (gráfico acíclico direcionado) de modelos. Embora um conjunto seja tecnicamente composto por vários modelos, no modo de endpoint de modelo único padrão, a SageMaker IA pode tratar o *conjunto adequado* (o metamodelo que representa o pipeline) como o modelo principal a ser carregado e, posteriormente, carregar os modelos associados.
  + O nome do modelo do conjunto propriamente dito deve ser usado para carregar o modelo. Ele deve ser passado como uma propriedade do ambiente do contêiner, que faz parte da chamada da `CreateModel` SageMaker API. A variável de ambiente usada para passar o nome do modelo é `SAGEMAKER_TRITON_DEFAULT_MODEL_NAME`.
+ Endpoints multimodelo
  + Nesse modo, a SageMaker IA pode servir vários modelos em um único endpoint. Você pode usar esse modo especificando a variável de ambiente `‘MultiModel’: true` como uma propriedade do ambiente do contêiner, que faz parte da chamada da `CreateModel` SageMaker API.
  + Por padrão, nenhum modelo é carregado quando a instância é iniciada. Para executar uma solicitação de inferência em um modelo específico, especifique o `*.tar.gz` arquivo do modelo correspondente como um argumento para a `TargetModel` propriedade da chamada da `InvokeEndpoint` SageMaker API.
+ Endpoints multimodelo com conjunto
  + Nesse modo, a SageMaker IA funciona conforme descrito para endpoints de vários modelos. No entanto, o contêiner SageMaker AI Triton pode carregar vários modelos de conjunto, o que significa que vários pipelines de modelos podem ser executados na mesma instância. SageMaker A IA trata cada conjunto como um modelo, e o conjunto próprio de cada modelo pode ser invocado especificando o arquivo correspondente como o. `*.tar.gz` `TargetModel`
  + Para um melhor gerenciamento de memória durante a memória dinâmica `LOAD` e `UNLOAD`, recomendamos que você mantenha o tamanho do conjunto pequeno.

## Tipos de carga útil de inferência
<a name="deploy-models-frameworks-triton-payloads"></a>

O Triton oferece aceita dois métodos de envio de uma carga útil de inferência pela rede: `json` e `binary+json` (ou json codificado em binário). A carga útil JSON em ambos os casos inclui o tipo de dados, a forma e o tensor real da solicitação de inferência. O tensor da solicitação deve ser um tensor binário.

Com o formato `binary+json`, você deve especificar o tamanho dos metadados da solicitação no cabeçalho para permitir que o Triton analise corretamente a carga útil binária. No contêiner SageMaker AI Triton, isso é feito usando um `Content-Type` cabeçalho personalizado:`application/vnd.sagemaker-triton.binary+json;json-header-size={}`. Isso é diferente de usar o `Inference-Header-Content-Length` cabeçalho em um servidor de inferência Triton autônomo porque cabeçalhos personalizados não são permitidos na IA. SageMaker 

## Uso de config.pbtxt para definir a configuração do modelo
<a name="deploy-models-frameworks-triton-config"></a>

Para servidores de inferência Triton em SageMaker IA, cada modelo deve incluir um `config.pbtxt` arquivo que especifique, no mínimo, as seguintes configurações para o modelo:
+ `name`: Embora isso seja opcional para modelos executados fora da SageMaker IA, recomendamos que você sempre forneça um nome para os modelos a serem executados no Triton on SageMaker AI.
+ [`platform` e/ou `backend`](https://github.com/triton-inference-server/backend/blob/main/README.md#backends): Configurar um backend é essencial para especificar o tipo do modelo. Alguns backends têm classificação adicional, como `tensorflow_savedmodel` ou ` tensorflow_graphdef`. Essas opções podem ser especificadas como parte da chave `platform`, além da chave `backend`. Os backends mais comuns são `tensorrt`, `onnxruntime`, `tensorflow`, `pytorch`, `python`, `dali`, `fil` e `openvino`.
+ `input`: Especifique três atributos para a entrada: `name`, `data_type` e `dims` (a forma).
+ `output`: Especifique três atributos para a saída: `name`, `data_type` e `dims` (a forma).
+ `max_batch_size`: Defina o tamanho do lote para um valor maior ou igual a 1 que indica o tamanho máximo do lote que o Triton deve usar com o modelo.

[Para obter mais detalhes sobre a configuração`config.pbtxt`, consulte o repositório do GitHub Triton.](https://github.com/triton-inference-server/server/blob/main/docs/user_guide/model_configuration.md) O Triton fornece várias configurações para ajustar o comportamento do modelo. Algumas das opções de configuração mais comuns e importantes são:
+ [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): Os grupos de instâncias ajudam a especificar o número e a localização de um determinado modelo. Eles têm os atributos `count`, `kind` e `gpus` (usados quando `kind` é `KIND_GPU`). O atributo `count` é equivalente ao número de operadores. Para um serviço de modelo regular, cada operador tem a sua própria cópia do modelo. Da mesma forma, no Triton, `count` especifica o número de cópias do modelo por dispositivo. Por exemplo, se o tipo `instance_group` for `KIND_CPU`, a CPU terá `count` cópias do modelo.
**nota**  
Em uma instância de GPU, a configuração `instance_group` se aplica a cada dispositivo de GPU. Por exemplo, `count` cópias do modelo são colocadas em cada dispositivo de GPU, a menos que você especifique explicitamente quais dispositivos de GPU devem carregar o modelo.
+ [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): O lote dinâmico é usado para modelos sem estado, e o lote de sequência é usado para modelos com estado (onde você deseja rotear uma solicitação para a mesma instância do modelo todas as vezes). Os agendadores de lotes habilitam uma fila por modelo, o que ajuda a aumentar o throughput, dependendo da configuração dos lotes.
+ [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): Um modelo de conjunto representa um *pipeline* de um ou mais modelos e a conexão dos tensores de entrada e saída entre esses modelos. Ele pode ser configurado especificando `platform` como `ensemble`. A configuração do conjunto é apenas uma representação do pipeline do modelo. Na SageMaker IA, todos os modelos em um conjunto são tratados como dependentes do modelo de conjunto e são contados como um único modelo para métricas de SageMaker IA, como. `LoadedModelCount`

## Publicação de métricas padrão do Triton na Amazon CloudWatch
<a name="deploy-models-frameworks-triton-metrics"></a>

O NVIDIA Triton Inference Container expõe métricas na porta 8002 (configurável) para os diferentes modelos e GPUs que são utilizadas no Triton Inference Server. Para obter detalhes completos das métricas padrão que estão disponíveis, consulte a GitHub página das métricas do [Triton Inference Server](https://github.com/triton-inference-server/server/blob/main/docs/user_guide/metrics.md). Essas métricas estão no formato do Prometheus e podem ser copiadas usando uma configuração de extração do Prometheus.

A partir da versão v23.07, o contêiner SageMaker AI Triton suporta a publicação dessas métricas na Amazon CloudWatch especificando algumas variáveis de ambiente. Para extrair as métricas do Prometheus, o contêiner AI SageMaker Triton usa o agente da Amazon. CloudWatch 

As variáveis de ambiente necessárias que você deve especificar para coletar métricas são as seguintes:


| Variável de ambiente | Description | Valor de exemplo | 
| --- | --- | --- | 
|  `SAGEMAKER_TRITON_ALLOW_METRICS`  |  Especifique esta opção para permitir que o Triton publique métricas em seu endpoint do Prometheus.  | "true" | 
|  `SAGEMAKER_TRITON_PUBLISH_METRICS_TO_CLOUDWATCH`  |  Especifique essa opção para iniciar as pré-verificações necessárias para publicar métricas na Amazon CloudWatch.  | "true" | 
|  `SAGEMAKER_TRITON_CLOUDWATCH_LOG_GROUP`  |  Especifique esta opção para apontar para o grupo de logs no qual as métricas são gravadas.  | "/aws/SageMaker AI/Endpoints/TritonMetrics/SageMakerTwoEnsemblesTest" | 
|  `SAGEMAKER_TRITON_CLOUDWATCH_METRIC_NAMESPACE`  |  Especifique esta opção para apontar para o namespace da métrica em que você deseja ver e plotar as métricas.  | "/aws/SageMaker AI/Endpoints/TritonMetrics/SageMakerTwoEnsemblesPublicTest" | 
|  `SAGEMAKER_TRITON_METRICS_PORT`  |  Especifique isto como 8002 ou qualquer outra porta. Se a SageMaker IA não tiver bloqueado a porta especificada, ela será usada. Caso contrário, outra porta não bloqueada será escolhida automaticamente.  | "8002" | 

Ao publicar métricas com o Triton on SageMaker AI, tenha em mente as seguintes limitações:
+ Embora você possa gerar métricas personalizadas por meio do back-end C-API e Python (v23.05 em diante), elas atualmente não são suportadas para publicação na Amazon. CloudWatch
+ No modo de endpoints multimodelo (MME) de SageMaker IA, o Triton é executado em um ambiente que exige que o namespace do modelo seja ativado porque cada modelo (exceto os modelos de conjunto) é tratado como se estivesse em seu próprio repositório de modelos. No momento, isso cria uma limitação para as métricas. Quando o namespacing de modelo está ativado, o Triton não distingue as métricas entre dois modelos com o mesmo nome pertencentes a conjuntos diferentes. Como solução alternativa, verifique se cada modelo que está sendo implantado tem um nome exclusivo. Isso também facilita a consulta de suas métricas em CloudWatch.

## Variáveis de ambiente
<a name="deploy-models-frameworks-triton-variables"></a>

A tabela a seguir lista as variáveis de ambiente suportadas pelo Triton on SageMaker AI.


| Variável de ambiente | Description | Tipo | Possíveis valores | 
| --- | --- | --- | --- | 
| `SAGEMAKER_MULTI_MODEL` | Permite que o Triton opere no modo de endpoints multimodelo SageMaker AI. | Booleano | `true`, `false` | 
| `SAGEMAKER_TRITON_DEFAULT_MODEL_NAME` | Especifique o modelo a ser carregado no modo de modelo único SageMaker AI (padrão). Para o modo de conjunto, especifique o nome do conjunto propriamente dito. | String | *<model\$1name>*conforme especificado em config.pbtxt | 
| `SAGEMAKER_TRITON_PING_MODE` | `'ready'`é o modo padrão no modo de modelo único da SageMaker IA e `'live'` é o padrão no modo de endpoints multimodelo da SageMaker IA. | String | `ready`, `live` | 
| `SAGEMAKER_TRITON_DISABLE_MODEL_NAMESPACING` | No contêiner SageMaker AI Triton, isso é definido como `true` padrão. | Booleano | `true`, `false` | 
| `SAGEMAKER_BIND_TO_PORT` | Enquanto estiver na SageMaker IA, a porta padrão é 8080. Você pode personalizar para uma porta diferente em cenários de vários contêineres. | String | *<port\$1number>* | 
| `SAGEMAKER_SAFE_PORT_RANGE` | Isso é definido pela plataforma de SageMaker IA ao usar o modo de vários contêineres. | String | *<port\$11>*–*<port\$12>* | 
| `SAGEMAKER_TRITON_ALLOW_GRPC` | Embora a SageMaker IA não ofereça suporte ao GRPC atualmente, se você estiver usando o Triton na frente de um proxy reverso personalizado, poderá optar por habilitar o GRPC. | Booleano | `true`, `false` | 
| `SAGEMAKER_TRITON_GRPC_PORT` | A porta padrão para o GRPC é 8001, mas você pode alterá-la. | String | *<port\$1number>* | 
| `SAGEMAKER_TRITON_THREAD_COUNT` | Você pode definir o número de threads padrão do manipulador de solicitações HTTP. | String | *<number>* | 
| `SAGEMAKER_TRITON_LOG_VERBOSE` | `true`por padrão no SageMaker AI, mas você pode desativar essa opção seletivamente. | Booleano | `true`, `false` | 
| `SAGEMAKER_TRITON_LOG_INFO` | `false`por padrão na SageMaker IA. | Booleano | `true`, `false` | 
| `SAGEMAKER_TRITON_LOG_WARNING` | `false`por padrão na SageMaker IA. | Booleano | `true`, `false` | 
| `SAGEMAKER_TRITON_LOG_ERROR` | `false`por padrão na SageMaker IA. | Booleano | `true`, `false` | 
| `SAGEMAKER_TRITON_SHM_DEFAULT_BYTE_SIZE` | Especifique o tamanho de shm para o backend do Python, em bytes. O valor padrão é 16 MB, mas pode ser aumentado. | String | *<number>* | 
| `SAGEMAKER_TRITON_SHM_GROWTH_BYTE_SIZE` | Especifique o tamanho de crescimento de shm para o backend do Python, em bytes. O valor padrão é 1 MB, mas pode ser aumentado para permitir maiores incrementos. | String | *<number>* | 
| `SAGEMAKER_TRITON_TENSORFLOW_VERSION` | O valor padrão é `2`. O Triton não oferece mais compatibilidade com o Tensorflow 2 no Triton v23.04. É possível configurar essa variável para as versões anteriores. | String | *<number>* | 
| `SAGEMAKER_TRITON_MODEL_LOAD_GPU_LIMIT` | Restrinja a porcentagem máxima de memória da GPU usada para carregamento do modelo, permitindo que o restante seja usado para as solicitações de inferência. | String | *<number>* | 
| `SAGEMAKER_TRITON_ALLOW_METRICS` | `false`por padrão na SageMaker IA. | Booleano | `true`, `false` | 
| `SAGEMAKER_TRITON_METRICS_PORT` | A porta padrão é 8002. | String | *<number>* | 
| `SAGEMAKER_TRITON_PUBLISH_METRICS_TO_CLOUDWATCH` | `false`por padrão na SageMaker IA. Defina essa variável `true` para permitir o envio das métricas padrão do Triton para a Amazon. CloudWatch Se essa opção estiver ativada, você será responsável pelos CloudWatch custos quando as métricas forem publicadas em sua conta. | Booleano | `true`, `false` | 
| `SAGEMAKER_TRITON_CLOUDWATCH_LOG_GROUP` | Obrigatório se você ativou a publicação de métricas em CloudWatch. | String | *<cloudwatch\$1log\$1group\$1name>* | 
| `SAGEMAKER_TRITON_CLOUDWATCH_METRIC_NAMESPACE` | Obrigatório se você ativou a publicação de métricas em CloudWatch. | String | *<cloudwatch\$1metric\$1namespace>* | 
| `SAGEMAKER_TRITON_ADDITIONAL_ARGS` | Acrescenta quaisquer argumentos adicionais ao iniciar o servidor Triton. | String | *<additional\$1args>* | 