Implantação de modelo com o servidor de inferência Triton - SageMaker IA da Amazon

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

O servidor de inferência Triton é 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ários frameworks de aprendizado profundo e de machine learning, incluindo o TensorRT, TensorFlow, PyTorch, ONNX, OpenVINO, Python, RAPIDS FIL e muito mais.

Os contêineres do Triton do SageMaker AI ajudam você a implantar o Triton Inference Server na plataforma de hospedagem do SageMaker AI para oferecer modelos treinados em produção. Ele aceita os diferentes modos em que o SageMaker AI opera. Para ver uma lista dos contêineres do Triton Inference Server disponíveis no SageMaker AI, consulte NVIDIA Triton Inference Containers (SM support only).

Para exemplos completos de caderno, recomendamos dar uma olhada no repositório amazon-sagemaker-examples.

Modos de hospedagem

Os seguintes modos de hospedagem do SageMaker AI são compatíveis com contêineres do Triton:

  • Endpoints de modelo único

    • Esse é o modo de operação padrão do SageMaker AI. Nesse modo, o contêiner do Triton pode carregar um modelo único ou um modelo único de conjunto.

    • O nome do modelo deve ser transmitido como uma propriedade do ambiente de contêiner, que faz parte da chamada de API CreateModel do SageMaker AI. 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 de vários modelos, no modo de endpoint de modelo único padrão, o SageMaker AI pode tratar o conjunto propriamente dito (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 de contêiner, que faz parte da chamada de API do SageMaker CreateModel. A variável de ambiente usada para passar o nome do modelo é SAGEMAKER_TRITON_DEFAULT_MODEL_NAME.

  • Endpoints multimodelo

    • Nesse modo, o SageMaker AI pode atender a 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 de contêiner, que faz parte da chamada de API do SageMaker CreateModel.

    • 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 arquivo *.tar.gz do modelo correspondente como argumento para a propriedade TargetModel da chamada de API do SageMaker InvokeEndpoint.

  • Endpoints multimodelo com conjunto

    • Nesse modo, o SageMaker AI funciona conforme descrito para endpoints multimodelo. No entanto, o contêiner do Triton do SageMaker AI pode carregar vários modelos de conjunto, o que significa que vários pipelines de modelo podem ser executados na mesma instância. O SageMaker AI trata cada conjunto como um modelo, e o conjunto propriamente dito de cada modelo pode ser invocado especificando o arquivo correspondente *.tar.gz como o 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

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 do Triton do SageMaker AI, isso é feito usando um cabeçalho Content-Type personalizado: application/vnd.sagemaker-triton.binary+json;json-header-size={}. Isso é diferente de usar o cabeçalho Inference-Header-Content-Length em um Triton Inference Server autônomo porque não são permitidos cabeçalhos personalizados no SageMaker AI.

Uso de config.pbtxt para definir a configuração do modelo

Para o Triton Inference Server no SageMaker AI, cada modelo deve incluir um arquivo config.pbtxt que especifique, no mínimo, as seguintes configurações para o modelo:

  • name: embora isso seja opcional para modelos executados fora do SageMaker AI, recomendamos que você sempre forneça um nome para os modelos a serem executados no Triton no SageMaker AI.

  • platform e/ou backend: 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 de config.pbtxt, consulte o repositório do GitHub do Triton. 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:

  • 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.

  • dynamic_batching e sequence_batching: 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.

  • ensemble: 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. No SageMaker AI, todos os modelos em um conjunto são tratados como dependentes do modelo de conjunto e são contados como um único modelo para as métricas do SageMaker AI, como LoadedModelCount.

Publicação de métricas padrão do Triton no Amazon CloudWatch

O contêiner de inferência do NVIDIA Triton expõe métricas na porta 8002 (configurável) para os diferentes modelos e GPUs utilizados no servidor de inferência Triton. Para obter detalhes completos das métricas padrão disponíveis, consulte a página do GitHub para ver as métricas do servidor de inferência Triton. 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 do Triton do SageMaker AI passa a oferecer compatibilidade com a publicação dessas métricas no Amazon CloudWatch ao especificar algumas variáveis de ambiente. Para extrair as métricas do Prometheus, o contêiner do Triton do SageMaker AI utiliza o agente do 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 Descrição 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 esta opção para iniciar as verificações prévias necessárias para publicar as métricas no 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 o SageMaker AI 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 no SageMaker AI, tenha em mente as seguintes limitações:

  • Embora você possa gerar métricas personalizadas por meio do backend de API C e Python (v23.05 em diante), no momento, não há compatibilidade com a publicação delas no Amazon CloudWatch.

  • No modo de endpoints multimodelo (MME) do SageMaker AI, o Triton é executado em um ambiente que exige que a atribuição de namespaces de 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 no CloudWatch.

Variáveis de ambiente

A tabela a seguir lista as variáveis de ambiente compatíveis com o Triton no SageMaker AI.

Variável de ambiente Descrição Tipo Possíveis valores

SAGEMAKER_MULTI_MODEL

Permite que o Triton opere no modo de endpoints multimodelo do SageMaker AI.

Booleano

true, false

SAGEMAKER_TRITON_DEFAULT_MODEL_NAME

Especifique o modelo a ser carregado no modo de modelo único (padrão) do SageMaker AI. Para o modo de conjunto, especifique o nome do conjunto propriamente dito.

String

<model_name> conforme especificado em config.pbtxt

SAGEMAKER_TRITON_PING_MODE

'ready' é o modo padrão no modo de modelo único do SageMaker AI e 'live' é o padrão no modo de endpoints multimodelo do SageMaker AI.

String

ready, live

SAGEMAKER_TRITON_DISABLE_MODEL_NAMESPACING

No contêiner do Triton do SageMaker AI, isso é definido como true por padrão.

Booleano

true, false

SAGEMAKER_BIND_TO_PORT

No SageMaker AI, a porta padrão é 8080. Você pode personalizar para uma porta diferente em cenários de vários contêineres.

String

<port_number>

SAGEMAKER_SAFE_PORT_RANGE

Isso é definido pela plataforma do SageMaker AI ao usar o modo de vários contêineres.

String

<port_1><port_2>

SAGEMAKER_TRITON_ALLOW_GRPC

Embora o SageMaker AI não ofereça compatibilidade com o gRPC no momento, se você estiver usando o Triton na frente de um proxy reverso personalizado, poderá 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_number>

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, mas você pode desativar essa opção seletivamente.

Booleano

true, false

SAGEMAKER_TRITON_LOG_INFO

false por padrão no SageMaker AI.

Booleano

true, false

SAGEMAKER_TRITON_LOG_WARNING

false por padrão no SageMaker AI.

Booleano

true, false

SAGEMAKER_TRITON_LOG_ERROR

false por padrão no SageMaker AI.

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 no SageMaker AI.

Booleano

true, false

SAGEMAKER_TRITON_METRICS_PORT

A porta padrão é 8002.

String

<number>

SAGEMAKER_TRITON_PUBLISH_METRICS_TO_CLOUDWATCH

false por padrão no SageMaker AI. Defina essa variável true para permitir o envio das métricas padrão do Triton para o Amazon CloudWatch. Se essa opção estiver ativada, você será responsável pelos custos do CloudWatch quando as métricas forem publicadas em sua conta.

Booleano

true, false

SAGEMAKER_TRITON_CLOUDWATCH_LOG_GROUP

Obrigatório se você tiver ativado a publicação de métricas no CloudWatch.

String

<cloudwatch_log_group_name>

SAGEMAKER_TRITON_CLOUDWATCH_METRIC_NAMESPACE

Obrigatório se você tiver ativado a publicação de métricas no CloudWatch.

String

<cloudwatch_metric_namespace>

SAGEMAKER_TRITON_ADDITIONAL_ARGS

Acrescenta quaisquer argumentos adicionais ao iniciar o servidor Triton.

String

<additional_args>