¿Cómo puedo optimizar una aplicación de inferencia?

La optimización de la inferencia es la práctica de mejorar el rendimiento y la eficiencia de los modelos de IA que se ejecutan en producción. A medida que los modelos de lenguaje extenso (LLMs) crecen hasta alcanzar decenas o cientos de miles de millones de parámetros, y las arquitecturas de inferencia se vuelven más complejas, la dificultad de diseñar y mantener aplicaciones no hace más que aumentar. La optimización es el proceso de gestionar, monitorizar y actualizar estas cargas de trabajo que requieren mucha computación, lo que permite obtener tiempos de respuesta inferiores a un segundo y un mayor rendimiento a un coste más bajo.

Implica un conjunto de técnicas, que van desde la compresión de modelos hasta la gestión avanzada de la memoria, que cambian el enfoque de "ejecutar un modelo" a "escalar un servicio de inteligencia". De esta forma, los desarrolladores pueden crear aplicaciones con mayor capacidad de respuesta y, al mismo tiempo, mantener una huella de infraestructura sostenible.

En la práctica, la optimización de la inferencia se aplica generalmente de dos formas:

Optimización a nivel de infraestructura: se centra en cómo se ejecuta el modelo en el hardware. Esto incluye el uso de tiempos de ejecución optimizados (como NVIDIA NIM o vLLM), la gestión de la memoria de la GPU con técnicas como PagedAttention y el uso de la agrupación en vuelo para procesar varias solicitudes simultáneamente. Esta suele ser la ruta más práctica para los desarrolladores que usan modelos de código abierto o propietarios.

Optimización a nivel de modelo: consiste en modificar el modelo en sí para reducir su tamaño o complejidad. Técnicas como la cuantificación (reducción de la precisión de 16 a 4 bits), la destilación (entrenamiento de un modelo "alumno" más pequeño para que imite a un modelo "profesor" más grande) y la dispersión (eliminación de parámetros poco importantes) pueden reducir drásticamente la memoria y la computación necesarias para cada token.

Cómo funciona el proceso de inferencia

El flujo de trabajo a nivel de código

Para optimizar de forma eficaz, debes tener claras las dos fases de la inferencia de LLMs:

Fase

Descripción

Característica principal

Relleno automático

El modelo procesa la prompt introducida para calcular los estados intermedios.

Altamente paralelizado y limitado por la computación (satura la GPU).

Decodificado

El modelo genera tokens de salida uno por uno, de forma autorregresiva.

Secuencial; limitado por la memoria (limitado por la velocidad de transferencia de datos).

Fase

Descripción

Característica principal

Relleno automático

El modelo procesa la prompt introducida para calcular los estados intermedios.

Altamente paralelizado y limitado por la computación (satura la GPU).

Decodificado

El modelo genera tokens de salida uno por uno, de forma autorregresiva.

Secuencial; limitado por la memoria (limitado por la velocidad de transferencia de datos).

  1. Describe el objetivo: empiezas con un despliegue de modelo no optimizado.
  2. Aplicar cuantización: reduce los pesos del modelo (por ejemplo, a 4 bits) para que quepan lotes más grandes en la memoria.
  3. Optimizar la atención: usa FlashAttention o la atención de consultas agrupadas (GQA) para minimizar los costes de movimiento de memoria.
  4. Gestión de la memoria: implementa PagedAttention para almacenar las cachés de KV en bloques no contiguos, lo que elimina la fragmentación.
  5. Ejecutar y supervisar: despliega el procesamiento por lotes en tiempo de ejecución para iniciar nuevas solicitudes en cuanto se completen otras.

Optimización de la inferencia frente a la implementación estándar

Así es como se compara la inferencia optimizada con la aplicación de modelos "ingenua" tradicional:

Función

Despliegue estándar

Inferencia optimizada

Rendimiento

Limitado por tamaños de lote estáticos y tiempo de inactividad.

Alto; utiliza el procesamiento por lotes en tránsito y la iteración continua.

Latencia

Crecimiento lineal con la longitud de la secuencia; TTFT (tiempo hasta el primer token) alto.

Optimizado; utiliza la aceleración de relleno automático y la decodificación especulativa.

Gestión de la memoria

Asignación estática (sobreaprovisionamiento para la longitud máxima).

Dinámico (paginación); mínimo desperdicio gracias a PagedAttention.

Eficiencia del hardware

A menudo, no aprovecha al máximo las capacidades de computación de las GPUs o las TPUs.

Maximizado; usa kernels optimizados (TFE-IE, XLA).

Coste por solicitud

Mayor; requiere más hardware para la misma carga.

Menor; incluye más solicitudes en la misma infraestructura.

Función

Despliegue estándar

Inferencia optimizada

Rendimiento

Limitado por tamaños de lote estáticos y tiempo de inactividad.

Alto; utiliza el procesamiento por lotes en tránsito y la iteración continua.

Latencia

Crecimiento lineal con la longitud de la secuencia; TTFT (tiempo hasta el primer token) alto.

Optimizado; utiliza la aceleración de relleno automático y la decodificación especulativa.

Gestión de la memoria

Asignación estática (sobreaprovisionamiento para la longitud máxima).

Dinámico (paginación); mínimo desperdicio gracias a PagedAttention.

Eficiencia del hardware

A menudo, no aprovecha al máximo las capacidades de computación de las GPUs o las TPUs.

Maximizado; usa kernels optimizados (TFE-IE, XLA).

Coste por solicitud

Mayor; requiere más hardware para la misma carga.

Menor; incluye más solicitudes en la misma infraestructura.

Primeros pasos: elegir tu entorno de orquestación

Google Cloud ofrece una serie de herramientas diseñadas para distintos niveles de conocimientos y necesidades arquitectónicas.

Herramienta

Punto de partida

Nivel de habilidad

Método

Característica principal

Cloud Run (con GPUs)

Un servicio de IA ligero y basado en eventos

Principiante

Sin servidor

Inferencia con escalado a cero para cargas de trabajo con picos de uso y baja latencia

Un modelo de software libre (como Llama 3)

Principiante o intermedio

Gestionado o con poco código

Despliegue con un solo clic con los tiempos de ejecución optimizados de vLLM o NVIDIA NIM


Cargas de trabajo de producción de alto rendimiento

Nivel intermedio o avanzado

Inferencia acelerada

Microservicios predefinidos con optimizaciones de TensorRT-LLM de última generación

Una infraestructura personalizada y multimodelo

Avanzado

Nativo de la nube o personalizado

Control total sobre la fragmentación de la GPU, la orquestación y los servidores de inferencia personalizados

Desarrollo a gran escala con TPUs como prioridad

Avanzado

Optimizado para TPUs o XLA

Diseñado para XLA con procesamiento por lotes continuo y PagedAttention en TPU de Cloud

Herramienta

Punto de partida

Nivel de habilidad

Método

Característica principal

Cloud Run (con GPUs)

Un servicio de IA ligero y basado en eventos

Principiante

Sin servidor

Inferencia con escalado a cero para cargas de trabajo con picos de uso y baja latencia

Un modelo de software libre (como Llama 3)

Principiante o intermedio

Gestionado o con poco código

Despliegue con un solo clic con los tiempos de ejecución optimizados de vLLM o NVIDIA NIM


Cargas de trabajo de producción de alto rendimiento

Nivel intermedio o avanzado

Inferencia acelerada

Microservicios predefinidos con optimizaciones de TensorRT-LLM de última generación

Una infraestructura personalizada y multimodelo

Avanzado

Nativo de la nube o personalizado

Control total sobre la fragmentación de la GPU, la orquestación y los servidores de inferencia personalizados

Desarrollo a gran escala con TPUs como prioridad

Avanzado

Optimizado para TPUs o XLA

Diseñado para XLA con procesamiento por lotes continuo y PagedAttention en TPU de Cloud

Cómo optimizar la inferencia con Vertex AI Model Garden

Usar Model Garden es la forma más rápida de desplegar versiones optimizadas de modelos abiertos líderes en el sector, como Llama, Gemma y Mistral.

Paso 1: Selecciona y configura tu modelo

Ve a Model Garden y busca un modelo de código abierto compatible. Haz clic en Desplegar. En la configuración, selecciona un tiempo de ejecución optimizado, como vLLM o NVIDIA NIM.

Paso 2: Aplica la cuantización

Elige una versión cuantificada del modelo (por ejemplo, de 4 u 8 bits) para reducir su uso de memoria. Esto te permite servir tamaños de lote más grandes en la misma GPU, lo que aumenta directamente el rendimiento.

Paso 3: Habilita la gestión avanzada de memoria

Asegúrate de que el contenedor de publicación esté configurado para usar PagedAttention. Esta técnica permite que el modelo almacene su "memoria" (caché de clave-valor) en bloques no contiguos, lo que evita el desperdicio de memoria y permite ventanas de contexto más largas.

Paso 4: Despliega y monitoriza

Una vez implementado, Vertex AI se encarga automáticamente de agrupar las solicitudes en curso y de procesar las nuevas en cuanto una solicitud existente completa un token. Usa Vertex AI Model Monitoring para hacer un seguimiento de la latencia y asegurarte de que el "mood" de la salida siga siendo de alta calidad.

Cómo optimizar la inferencia con GKE

Para los equipos que necesitan un control granular sobre su orquestación y sus kernels de inferencia personalizados, GKE es la opción estándar del sector.

Paso 1: Inicializa tu clúster con GPUs de NVIDIA o TPUs en la nube

Aprovisiona un clúster de GKE con nodos de GPU especializados (por ejemplo, L4 o H100). Instala el operador de GPU NVIDIA para gestionar automáticamente la gestión de controladores y el ajuste del rendimiento.

Paso 2: Despliega un servidor de inferencia optimizado

Usa un motor de inferencia en contenedores como vLLM o Triton Inference Server. Estos servidores admiten el procesamiento por lotes continuo y el paralelismo de tensores, lo que te permite fragmentar modelos grandes en varias GPUs. vLLM también te da la posibilidad de cambiar entre TPUs y GPUs con una cantidad mínima de código adicional.

Paso 3: Implementa la decodificación especulativa

Para las necesidades de latencia de misión crítica, configura la decodificación especulativa. Esto implica usar un modelo a modo de "borrador" más pequeño y rápido para predecir tokens, que luego se verifican en paralelo con tu modelo "objetivo" más grande, lo que suele traducirse en un aumento de la velocidad de 2 a 3 veces.

Paso 4: Optimiza el despliegue con GKE Inference Quickstart

GKE Inference Quickstart actúa como base de datos preconfigurada de configuraciones de pila de inferencia probadas. Al especificar tu modelo, los requisitos de latencia y las prioridades de costes, la herramienta proporciona un conjunto de recomendaciones basadas en prácticas recomendadas y en las últimas comparativas. De esta forma, puedes monitorizar métricas de rendimiento específicas de la inferencia y ajustar dinámicamente tu despliegue para asegurarte de que siempre se ejecuta con tecnología optimizada.

Paso 5: Escala con GKE Inference Gateway

GKE Inference Gateway ya está disponible de forma general y ofrece dos funciones avanzadas para gestionar aplicaciones complejas de IA generativa.

  • Enrutamiento con reconocimiento de prefijos: en aplicaciones como las conversaciones multiturno o el análisis de documentos, esta función enruta las solicitudes a los mismos aceleradores que ya tienen el contexto en caché, lo que mejora los tiempos de respuesta.
  • Servicio desagregado: esta técnica separa la fase inicial de "relleno automático" (procesamiento de la petición) de la fase de "decodificación" (generación de tokens). Como estas fases tienen diferentes necesidades de recursos, puedes ejecutarlas en grupos de máquinas independientes y optimizados para maximizar la eficiencia.

Paso 6: Agiliza el acceso a los datos con Anywhere Cache

Anywhere Cache es una nueva caché de lectura totalmente coherente que funciona con los segmentos de Google Cloud Storage (GCS) que ya tengas para almacenar datos en caché en la misma zona que tus aceleradores. Esto reduce la latencia de lectura hasta un 96 % y minimiza los costes de red asociados a las cargas de trabajo con muchas lecturas.

Paso 7: Conecta cargas de trabajo globales con Cloud WAN

Cloud WAN, una red global totalmente gestionada y basada en la infraestructura de Google a escala planetaria, es lo que une toda la infraestructura. Cloud WAN conecta recursos de computación de IA en diferentes regiones, nubes y entornos on-premise, lo que supone una mejora del 40 % en la experiencia de las aplicaciones de inferencia y un 40 % menos de coste total de propiedad en comparación con las soluciones de WAN tradicionales.

Soluciona los retos empresariales que se te presenten con Google Cloud

Los nuevos clientes reciben 300 USD en crédito sin coste para invertirlos en Google Cloud.

Ve un paso más allá

Empieza a crear en Google Cloud con 300 USD en crédito de regalo y más de 20 productos que siempre se ofrecen sin coste económico.

Google Cloud