Sistema de inferencia de TensorFlow escalable

Last reviewed 2023-11-02 UTC

En esta serie de arquitectura de referencia, se describe cómo puedes implementar y diseñar un sistema de inferencia en línea de alto rendimiento para modelos de aprendizaje profundo mediante el uso de una GPU NVIDIA® T4 y una Inferencia de Triton Servidor.

Con esta arquitectura, puedes crear un sistema que use modelos de aprendizaje automático y pueda aprovechar la aceleración de GPU. Google Kubernetes Engine (GKE) te permite escalar el sistema según una cantidad cada vez mayor de clientes. Puedes mejorar la capacidad de procesamiento y reducir la latencia del sistema si aplicas las técnicas de optimización que se describen en esta serie.

Esta serie está dirigida a desarrolladores familiarizados con Google Kubernetes Engine y con los marcos de trabajo de aprendizaje automático (AA), incluidos TensorFlow y NVIDIA TensorRT.

Los siguientes documentos se incluyen en esta serie:

Arquitectura

En el siguiente diagrama, se muestra la arquitectura del sistema de inferencia.

Arquitectura del sistema de inferencia

Esta arquitectura incluye los siguientes componentes:

  • Cloud Load Balancing: Envía el tráfico de solicitudes al clúster de GKE más cercano al cliente.

  • Clúster de GKE: Contiene los nodos del clúster y los servidores de supervisión. Si los clientes envían solicitudes desde varias regiones, puedes implementar clústeres de GKE en varias regiones. Implementas la herramienta de prueba de carga de Locust en el mismo clúster.

  • Nodos de clúster con un acelerador de GPU: contiene Pods de Triton Inference Server. Se implementa un solo Pod para cada nodo (una sola GPU no se puede compartir con varios Pods).

  • Servidor de inferencia de Triton: Entrega modelos ResNet-50 que creas. El servidor proporciona un servicio de inferencia a través de un extremo HTTP o gRPC. El servicio de inferencia permite que los clientes remotos soliciten inferencias para cualquier modelo que administre el servidor.

  • NVIDIA T4: Mejora el rendimiento de la inferencia. Debe haber un NVIDIA T4 para cada Pod. Esta GPU cuenta con núcleos de tensor, que son unidades de procesamiento especializadas que admiten y aceleran los cálculos INT8 y FP16.

  • Servidores de Monitoring: Recopila datos de métricas sobre el uso de GPU y el uso de memoria de Triton. Usa Prometheus para la supervisión y la generación de alertas de eventos. Puedes usar Grafana para visualizar y analizar datos de rendimiento almacenados en Prometheus.

Consideraciones del diseño

Los siguientes lineamientos pueden ayudarte a desarrollar una arquitectura que satisfaga los requisitos de tu organización respecto a la confiabilidad y el rendimiento.

Confiabilidad

Esta arquitectura usa GKE para la escalabilidad y la administración flexible de recursos.

Si implementas el sistema en GKE, puedes escalar el sistema según la cantidad de clientes. Puedes implementar clústeres de GKE en varias regiones y aumentar la cantidad de nodos en el clúster.

Optimización del rendimiento

Cuando ajustes el rendimiento, sigue estos lineamientos generales:

  • Define las métricas de rendimiento y el rendimiento objetivo en función del caso de uso del sistema.
  • Mide el rendimiento de referencia antes de aplicar el ajuste de rendimiento.
  • Aplica un cambio y observa la mejora. Si aplicas varios cambios a la vez, no puedes saber qué cambio causó la mejora.
  • Recopila métricas apropiadas para comprender las características del rendimiento y decidir las próximas acciones para el ajuste del rendimiento.

Con los lineamientos, puedes medir la mejora del rendimiento en función de los siguientes factores:

  • TensorRT (optimización de grafos). TensorRT aplica optimizaciones de grafos para NVIDIA T4. Por ejemplo, modifica de forma automática los modelos de aprendizaje profundo para que se puedan procesar con Tensor Core. Primero, observa el rendimiento de la inferencia sin TensorRT como modelo de referencia. Luego, observa la mejora del rendimiento después de aplicar la optimización del grafo de TensorRT.

  • Conversión a FP16. NVIDIA T4 admite FP32 (punto flotante de 32 bits) y FP16 para cálculos de punto flotante. Cuando conviertes la precisión de variables de FP32 predeterminado a FP16, puedes mejorar el rendimiento de la inferencia.

  • Cuantización INT8. La cuantización es una técnica de optimización para los modelos de aprendizaje profundo que mejora el rendimiento de los procesamientos en las GPU. NVIDIA T4 admite tipos de variables INT8 (número entero de 8 bits) para la cuantización. En comparación con la conversión a FP16, la cuantización con INT8 puede proporcionar un rendimiento mejorado, pero puede reducir la exactitud. Sin embargo, TensorRT usa un proceso de calibración que minimiza la pérdida de información durante los cálculos.

  • Tamaño del lote y cantidad de grupos de instancias. Puedes ajustar el tamaño del lote y la cantidad de grupos de instancias con Triton. Por ejemplo, cuando configuras un tamaño de lote en 16, las solicitudes de inferencia se almacenan en una cola de lotes y 16 solicitudes se procesan en un solo lote. Del mismo modo, si configuras un número de grupos de instancias en 4, se procesan varias solicitudes con 4 subprocesos en paralelo. En este caso, hay 16 solicitudes en cada lote y 4 subprocesos de procesamiento en paralelo, lo que significa que 64 solicitudes se procesan de forma simultánea en una sola GPU.

    Aumentar la cantidad de grupos de instancias permite que TensorRT logre un uso mayor de GPU. Al mismo tiempo, mediante el ajuste del tamaño del lote, permites que Triton optimice los cálculos en la GPU. Por ejemplo, puede combinar cálculos múltiples de diferentes solicitudes en una sola tarea de procesamiento en núcleos de Tensor.

Implementación

Para implementar esta arquitectura, consulta Implementa un sistema de inferencia de TensorFlow escalable.

Para medir y ajustar la implementación, consulta Mide y ajusta el rendimiento de un sistema de inferencia de TensorFlow.

¿Qué sigue?