Implementación de modelos con Triton Inference Server - Amazon SageMaker AI

Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.

Implementación de modelos con Triton Inference Server

Servidor de inferencia Triton es un software de servidor de inferencias de código abierto que optimiza la inferencia de IA. Con Triton, puede implementar cualquier modelo creado con múltiples marcos de aprendizaje profundo y machine learning, incluidos TensorRT, TensorFlow, PyTorch, ONNX, OpenVINO, Python, RAPIDS FIL y mucho más.

Los contenedores Triton de SageMaker AI le ayudan a implementar el servidor de inferencia Triton en la plataforma de alojamiento de SageMaker AI para ofrecer modelos entrenados en producción. Es compatible con los distintos modos en los que funciona SageMaker AI. Para obtener una lista de los contenedores del servidor de inferencia Triton disponibles en SageMaker AI, consulte Contenedores de inferencia Triton de NVIDIA (solo compatibles con SM).

Para ver ejemplos de cuadernos integrales, le recomendamos que consulte el repositorio amazon-sagemaker-examples.

Modos de alojamiento

Los contenedores Triton admiten los siguientes modos de alojamiento de SageMaker AI:

  • Puntos de conexión de modelo único

    • Este es el modo de funcionamiento predeterminado de SageMaker AI. En este modo, el contenedor Triton puede cargar un solo modelo o un solo modelo de conjunto.

    • El nombre del modelo debe pasarse como propiedad del entorno del contenedor, que forma parte de la llamada a la API de CreateModel SageMaker AI. La variable de entorno que se utiliza para pasar el nombre del modelo es SAGEMAKER_TRITON_DEFAULT_MODEL_NAME.

  • Puntos de conexión de modelo único con conjunto

    • El servidor de inferencia Triton admite un conjunto, que es una canalización, o un DAG (gráfico acíclico dirigido) de modelos. Si bien un conjunto se compone técnicamente de varios modelos, en el modo de punto de conexión de modelo único predeterminado, SageMaker AI puede tratar el propio conjunto (el metamodelo que representa la canalización) como el modelo principal a cargar y, posteriormente, cargar los modelos asociados.

    • Se debe utilizar el nombre del modelo del propio conjunto para cargar el modelo. Debe pasarse como una propiedad del entorno de contenedores, que forma parte de la llamada a la API de CreateModel SageMaker. La variable de entorno que se utiliza para pasar el nombre del modelo es SAGEMAKER_TRITON_DEFAULT_MODEL_NAME.

  • Puntos de conexión multimodelo

    • En este modo, SageMaker AI puede servir varios modelos en un único punto de conexión. Puede utilizar este modo especificando la variable de entorno ‘MultiModel’: true como una propiedad del entorno del contenedor, que forma parte de la llamada a la API de CreateModel SageMaker.

    • De forma predeterminada, no se carga ningún modelo cuando se inicia la instancia. Para ejecutar una solicitud de inferencia en un modelo concreto, especifique el archivo *.tar.gz del modelo correspondiente como argumento de la propiedad TargetModel de la llamada a la API de InvokeEndpoint SageMaker.

  • Puntos de conexión multimodelo con conjunto

    • En este modo, SageMaker AI funciona como se describe para puntos de conexión multimodelo. Sin embargo, el contenedor Triton de SageMaker AI puede cargar varios modelos de conjunto, lo que significa que se pueden ejecutar múltiples canalizaciones de modelos en la misma instancia. SageMaker AI trata cada conjunto como un modelo, y es posible invocar el conjunto propio de cada modelo especificando el correspondiente archivo *.tar.gz como TargetModel.

    • Para una mejor gestión de la memoria durante la memoria dinámica LOAD y UNLOAD, le recomendamos que mantenga el tamaño del conjunto pequeño.

Tipos de carga de inferencia

Triton admite dos métodos para enviar una carga útil de inferencia a través de la red json y binary+json (o json codificado en binario). En ambos casos, la carga útil de JSON incluye el tipo de datos, la forma y el tensor real de la solicitud de inferencia. El tensor de solicitud debe ser un tensor binario.

Con el formato binary+json, debe especificar la longitud de los metadatos de la solicitud en el encabezado para que Triton pueda analizar correctamente la carga binaria. En el contenedor Triton de SageMaker AI, esto se hace mediante un encabezado personalizado Content-Type: application/vnd.sagemaker-triton.binary+json;json-header-size={}. Esto es diferente a usar el encabezado Inference-Header-Content-Length en un servidor de inferencia Triton independiente porque los encabezados personalizados no están permitidos en SageMaker AI.

Uso de config.pbtxt para establecer la configuración del modelo

Para los servidores de inferencia Triton de SageMaker AI, cada modelo debe incluir un archivo config.pbtxt que especifique, como mínimo, las siguientes configuraciones del modelo:

  • name: si bien esto es opcional para los modelos que se ejecutan fuera de SageMaker AI, le recomendamos que siempre proporcione un nombre para los modelos que se ejecutarán en Triton en SageMaker AI.

  • platform y/o backend: configurar un backend es esencial para especificar el tipo de modelo. Algunos backends tienen una clasificación adicional, como tensorflow_savedmodel o tensorflow_graphdef. Es posible especificar estas opciones como parte de la clave platform además de la clave backend. Los backends más comunes son tensorrt, onnxruntime, tensorflow, pytorch, python, dali, fil y openvino.

  • input: especifique tres atributos para la entrada: name, data_type y dims (la forma).

  • output: especifique tres atributos para la salida: name, data_type y dims (la forma).

  • max_batch_size: establezca el tamaño del lote en un valor mayor o igual a 1 que indique el tamaño máximo de lote que Triton debe utilizar con el modelo.

Para obtener más detalles sobre la configuraciónconfig.pbtxt, consulte el repositorio GitHub de Triton. Triton proporciona varias configuraciones para ajustar el comportamiento del modelo. Algunas de las opciones de configuración más comunes e importantes son:

  • instance_groups: los grupos de instancias ayudan a especificar el número y la ubicación de un modelo determinado. Tienen los atributos count, kind, y gpus (usados cuando kind es KIND_GPU). El atributo count equivale a la cantidad de trabajadores. Para el servicio de modelos normal, cada trabajador tiene su propia copia de modelo. Del mismo modo, en Triton, el count especifica el número de copias del modelo por dispositivo. Por ejemplo, si el tipo instance_group es KIND_CPU, entonces la CPU tiene el número count de copias del modelo.

    nota

    En una instancia de GPU, la configuración instance_group se aplica a cada dispositivo de GPU. Por ejemplo, se coloca el número count de copias del modelo en cada dispositivo de GPU, a menos que especifique explícitamente qué dispositivos de GPU deben cargar el modelo.

  • dynamic_batching y sequence_batching: el procesamiento por lotes dinámico se usa para los modelos sin estado y el procesamiento por lotes secuencial se usa para los modelos con estado (en los que se desea enrutar una solicitud a la misma instancia del modelo cada vez). Los programadores de procesamiento por lotes permiten una cola por modelo, lo que ayuda a aumentar el rendimiento, en función de la configuración del procesamiento por lotes.

  • ensemble: un modelo de conjunto representa una canalización de uno o más modelos y la conexión de los tensores de entrada y salida entre esos modelos. Es posible configurarlo especificando platform comoensemble. La configuración del conjunto es solo una representación de la canalización del modelo. En SageMaker AI, todos los modelos de un conjunto se tratan como dependientes del modelo de conjunto y se cuentan como un modelo único para las métricas de SageMaker AI, como LoadedModelCount.

Publicación de métricas de Triton predeterminadas en Amazon CloudWatch

El contenedor de inferencias Triton de NVIDIA expone las métricas en el puerto 8002 (configurable) para los distintos modelos y GPU que se utilizan en el servidor de inferencia Triton. Para obtener todos los detalles de las métricas predeterminadas que están disponibles, consulte la página de GitHub para ver las métricas del servidor de inferencia Triton. Estas métricas están en formato Prometheus y pueden extraerse mediante una configuración de scraper de Prometheus.

A partir de la versión 23.07 en adelante, el contenedor Triton de SageMaker AI permite publicar estas métricas en Amazon CloudWatch especificando algunas variables de entorno. Para extraer las métricas de Prometheus, el contenedor Triton de SageMaker AI utiliza el agente Amazon CloudWatch.

Las variables de entorno obligatorias que debe especificar para recopilar las métricas son las siguientes:

Variable de entorno Descripción Ejemplo de valor

SAGEMAKER_TRITON_ALLOW_METRICS

Especifique esta opción para permitir que Triton publique métricas en su punto final de Prometheus.

"true"

SAGEMAKER_TRITON_PUBLISH_METRICS_TO_CLOUDWATCH

Especifique esta opción para iniciar las comprobaciones previas necesarias para publicar las métricas en Amazon CloudWatch.

"true"

SAGEMAKER_TRITON_CLOUDWATCH_LOG_GROUP

Especifique esta opción para apuntar al grupo de registros en el que se escriben las métricas.

"/aws/SageMaker AI/Endpoints/TritonMetrics/SageMakerTwoEnsemblesTest"

SAGEMAKER_TRITON_CLOUDWATCH_METRIC_NAMESPACE

Especifique esta opción para apuntar al espacio de nombres de las métricas en el que quiera ver y trazar las métricas.

"/aws/SageMaker AI/Endpoints/TritonMetrics/SageMakerTwoEnsemblesPublicTest"

SAGEMAKER_TRITON_METRICS_PORT

Especifique esto como 8002 o cualquier otro puerto. Se utiliza si SageMaker AI no ha bloqueado el puerto especificado. De lo contrario, se elige automáticamente otro puerto no bloqueado.

"8002"

Tenga en cuenta las siguientes limitaciones al publicar métricas con Triton en SageMaker AI:

  • Si bien puede generar métricas personalizadas a través de la C-API y el backend de Python (a partir de la versión 23.05), actualmente no se admiten para su publicación en Amazon CloudWatch.

  • En el modo de puntos de conexión multimodelo (MME) de SageMaker AI, Triton se ejecuta en un entorno que requiere que el espacio de nombres de los modelos esté habilitado, ya que cada modelo (excepto los modelos de conjunto) se trata como si estuviera en su propio repositorio de modelos. En la actualidad, esto crea una limitación para las métricas. Cuando el espaciado de nombres de los modelos está activado, Triton no distingue las métricas entre dos modelos con el mismo nombre que pertenecen a conjuntos diferentes. Como solución alternativa, asegúrese de que cada modelo que se esté implementando tenga un nombre único. Esto también facilita la búsqueda de las métricas en CloudWatch.

Variables de entorno

La siguiente tabla muestra las variables de entorno admitidas para Triton en SageMaker AI.

Variable de entorno Descripción Tipo Valores posibles

SAGEMAKER_MULTI_MODEL

Permite que Triton funcione en el modo de puntos de conexión multimodelo de SageMaker AI.

Booleano

true, false

SAGEMAKER_TRITON_DEFAULT_MODEL_NAME

Especifique el modelo que se va a cargar en el modo modelo único de SageMaker AI (predeterminado). Para el modo conjunto, especifique el nombre del propio conjunto.

Cadena

<model_name> como se especifica en config.pbtxt

SAGEMAKER_TRITON_PING_MODE

'ready' es el modo predeterminado en el modo de modelo único de SageMaker AI y 'live' es el predeterminado en el modo de puntos de conexión multimodelo de SageMaker AI.

Cadena

ready, live

SAGEMAKER_TRITON_DISABLE_MODEL_NAMESPACING

En el contenedor Triton de SageMaker AI, está configurado como true de forma predeterminada.

Booleano

true, false

SAGEMAKER_BIND_TO_PORT

En SageMaker AI, el puerto predeterminado es el 8080. Puede personalizarlo para un puerto diferente en escenarios con varios contenedores.

Cadena

<port_number>

SAGEMAKER_SAFE_PORT_RANGE

Esto lo establece la plataforma SageMaker AI cuando se utiliza el modo multicontenedor.

Cadena

<port_1><port_2>

SAGEMAKER_TRITON_ALLOW_GRPC

Si bien SageMaker AI no admite GRPC actualmente, si utiliza Triton delante de un proxy inverso personalizado, puede optar por activar GRPC.

Booleano

true, false

SAGEMAKER_TRITON_GRPC_PORT

El puerto predeterminado del GRPC es el 8001, pero puede cambiarlo.

Cadena

<port_number>

SAGEMAKER_TRITON_THREAD_COUNT

Puede establecer el número de subprocesos predeterminados del controlador de solicitudes HTTP.

Cadena

<number>

SAGEMAKER_TRITON_LOG_VERBOSE

true de forma predeterminada en SageMaker AI, pero puede desactivar esta opción de forma selectiva.

Booleano

true, false

SAGEMAKER_TRITON_LOG_INFO

false de forma predeterminada en SageMaker AI.

Booleano

true, false

SAGEMAKER_TRITON_LOG_WARNING

false de forma predeterminada en SageMaker AI.

Booleano

true, false

SAGEMAKER_TRITON_LOG_ERROR

false de forma predeterminada en SageMaker AI.

Booleano

true, false

SAGEMAKER_TRITON_SHM_DEFAULT_BYTE_SIZE

Especifique el tamaño de shm para el backend de Python (en bytes). El valor predeterminado es 16 MB, pero se puede aumentar.

Cadena

<number>

SAGEMAKER_TRITON_SHM_GROWTH_BYTE_SIZE

Especifique el tamaño de crecimiento de shm para el backend de Python (en bytes). El valor predeterminado es 1 MB, pero se puede aumentar para permitir mayores incrementos.

Cadena

<number>

SAGEMAKER_TRITON_TENSORFLOW_VERSION

El valor predeterminado es 2. Triton ya no es compatible con Tensorflow 2 desde la versión 23.04 de Triton. Puede configurar esta variable para versiones anteriores.

Cadena

<number>

SAGEMAKER_TRITON_MODEL_LOAD_GPU_LIMIT

Restrinja el porcentaje máximo de memoria de la GPU que se utiliza para cargar los modelos y permitir que el resto se utilice para las solicitudes de inferencia.

Cadena

<number>

SAGEMAKER_TRITON_ALLOW_METRICS

false de forma predeterminada en SageMaker AI.

Booleano

true, false

SAGEMAKER_TRITON_METRICS_PORT

El puerto predeterminado es 8002.

Cadena

<number>

SAGEMAKER_TRITON_PUBLISH_METRICS_TO_CLOUDWATCH

false de forma predeterminada en SageMaker AI. Establezca esta variable en true para permitir enviar las métricas predeterminadas de Triton a Amazon CloudWatch. Si esta opción está habilitada, usted será responsable de los costos de CloudWatch cuando se publiquen las métricas en su cuenta.

Booleano

true, false

SAGEMAKER_TRITON_CLOUDWATCH_LOG_GROUP

Obligatorio si ha activado la publicación de métricas en CloudWatch.

Cadena

<cloudwatch_log_group_name>

SAGEMAKER_TRITON_CLOUDWATCH_METRIC_NAMESPACE

Obligatorio si ha activado la publicación de métricas en CloudWatch.

Cadena

<cloudwatch_metric_namespace>

SAGEMAKER_TRITON_ADDITIONAL_ARGS

Añade cualquier argumento adicional al iniciar el servidor Triton.

Cadena

<additional_args>