La consolidación de cargas de trabajo subutilizadas en GPUs es crucial para maximizar el rendimiento de la infraestructura de IA. En los entornos de producción de Kubernetes, las diferencias entre los requisitos de los modelos y el tamaño de las GPUs generan ineficiencias. Por ejemplo, modelos ligeros como el reconocimiento automático de voz (ASR) o la conversión de texto a voz (TTS) pueden requerir solo 10 GB de VRAM, pero ocupan una GPU entera en implementaciones estándar de Kubernetes.
Este artículo detalla cómo implementar y evaluar estrategias de particionamiento de GPU, utilizando específicamente NVIDIA Multi-Instance GPU (MIG) y la técnica de time-slicing. El objetivo es optimizar la densidad del clúster para atender a más usuarios concurrentes utilizando el mismo hardware de alta calidad.
Fragmentación de recursos de GPU
Por defecto, el Plugin de Dispositivos NVIDIA para Kubernetes muestra las GPUs como recursos enteros. Un pod solicita nvidia.com/gpu: 1, y el programador lo asigna a un dispositivo físico. Modelos de lenguaje grandes (LLMs) como NVIDIA Nemotron o Llama 3 requieren computación dedicada para mantener un bajo tiempo hasta el primer token (TTFT) y un alto rendimiento por lote.
Sin embargo, los modelos de soporte en una tubería de IA generativa, como los modelos de incrustación, ASR y TTS, utilizan solo una fracción de los recursos de la GPU. Esto da como resultado:
- Baja utilización: La utilización de computación de GPU suele estar entre el 0-10%.
- Expansión del clúster: Se necesitan más nodos para ejecutar el mismo número de pods.
- Dificultades de escalado: Agregar una nueva capacidad requiere una nueva GPU física.
Para resolver esto, es esencial romper la relación 1:1 entre pods y GPUs.
Estrategias de particionamiento
Se evaluaron dos estrategias principales para el particionamiento de GPUs apoyadas por el NVIDIA GPU Operator. La primera es el particionamiento basado en software, que incluye el time-slicing y el MPS (Multi-Process Service). El time-slicing permite que múltiples procesos CUDA compartan una GPU intercalando la ejecución, similar a un programador de CPU.
Esto maximiza la utilización y permite el uso completo de la GPU cuando un pod está inactivo. Sin embargo, no proporciona aislamiento de hardware, lo que significa que un desbordamiento de memoria en un pod puede afectar la ejecución compartida.
MIG: La opción de hardware
El MIG particiona físicamente la GPU en instancias separadas, cada una con su propia memoria y recursos dedicados. Esto garantiza un aislamiento estricto de calidad de servicio (QoS), evitando que una carga de trabajo afecte el rendimiento de otra. A pesar de su rigidez, es preferido en entornos de producción donde se requiere aislamiento de fallos a nivel de hardware.
Configuración experimental: La tubería de IA de voz
Para validar estas estrategias, se utilizó una tubería de IA de voz multimodal. Antes de optimizar, es fundamental entender el perfil de latencia, donde el LLM representa el cuello de botella, especialmente bajo cargas pesadas.
La consolidación de modelos de soporte como ASR y TTS permite maximizar la utilización de hardware mientras se mantiene la capacidad de respuesta. Aunque puede introducir un ligero ajuste de latencia, los beneficios en el rendimiento son significativos.
Nuestra hipótesis
La consolidación de las cargas de trabajo de ASR y TTS en una sola GPU preserva la latencia y libera recursos de computación para instancias adicionales de LLM.
Resultados
Se probaron distintas configuraciones y se evaluó el rendimiento bajo cargas ligeras y pesadas. En la comparación de la eficiencia de inferencia de IA generativa, el MIG mostró la mayor eficiencia con un rendimiento de ~1.00 req/s por GPU, mientras que el time-slicing alcanzó ~0.76 req/s.
La consolidación de ASR y TTS en una sola GPU optimiza la tubería, permitiendo que el clúster soporte más flujos de IA simultáneos, aunque con un pequeño compromiso en la latencia.
Recomendaciones para particionamiento
Se recomienda utilizar MIG para escalas de producción y estabilidad, mientras que el time-slicing puede ser útil para desarrollo y aplicaciones de baja concurrencia.
Comienza ahora
Experimenta más y sigue nuestra guía de implementación para configurar perfiles MIG y eliminar la fragmentación de recursos en tu clúster.


