¿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 la ejecución de modelos de IA en producción. A medida que los modelos de lenguaje grandes (LLM) crecen a 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 solo aumenta. La optimización es el acto de administrar, supervisar y actualizar estas cargas de trabajo de procesamiento intensivo, lo que permite tiempos de respuesta de menos de un segundo y una mayor capacidad de procesamiento a un costo más bajo.

Implica un conjunto de técnicas, que van desde la compresión de modelos hasta la administración avanzada de la memoria, que cambian el enfoque de simplemente "ejecutar un modelo" a "escalar un servicio de inteligencia". Esto permite a los desarrolladores crear aplicaciones más responsivas mientras mantienen una huella de infraestructura sustentable.

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

Optimización a nivel de la infraestructura: Se enfoca en cómo se ejecuta el modelo en el hardware. Esto incluye usar entornos de ejecución optimizados (como NVIDIA NIM o vLLM), administrar la memoria de GPU con técnicas como PagedAttention y usar el procesamiento por lotes continuo para procesar varias solicitudes simultáneamente. Este suele ser el camino más práctico para los desarrolladores que usan modelos de código abierto o de propiedad específica.

Optimización a nivel del modelo: Esto implica modificar el modelo en sí para reducir su tamaño o complejidad. Las técnicas como la cuantización (reducir la precisión de 16 bits a 4 bits), la síntesis (entrenar un modelo "estudiante" más pequeño para que imite a un "profesor" más grande) y la dispersión (reducir los parámetros sin importancia) pueden reducir drásticamente la memoria y el procesamiento necesarios para cada token.

Comprender cómo funciona el proceso de inferencia

El flujo de trabajo a nivel de código

Para optimizar de manera eficaz, debes comprender las dos fases distintas de la inferencia de LLM:

Fase

Descripción

Característica clave

Completado previo

El modelo procesa toda la instrucción de entrada para calcular los estados intermedios.

Altamente paralelizado; limitado por el procesamiento (satura la GPU).

Decodifica

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

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

Fase

Descripción

Característica clave

Completado previo

El modelo procesa toda la instrucción de entrada para calcular los estados intermedios.

Altamente paralelizado; limitado por el procesamiento (satura la GPU).

Decodifica

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

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

  1. Describe el objetivo: Comienzas con una implementación de modelo no optimizada.
  2. Aplica la cuantización: Reduce los pesos del modelo (por ejemplo, a 4 bits) para ajustar lotes más grandes a la memoria.
  3. Optimiza la atención: Usa FlashAttention o la atención de consultas agrupadas (GQA) para minimizar los costos de movimiento de memoria.
  4. Administra la memoria: Implementa PagedAttention para almacenar cachés de KV en bloques no contiguos, lo que elimina la fragmentación.
  5. Ejecuta y supervisa: Implementa con procesamiento por lotes continuo para iniciar de inmediato nuevas solicitudes a medida que se completan otras.

Optimización de la inferencia en comparación con la implementación estándar

Aquí se compara la inferencia optimizada con la entrega de modelos tradicional "simple":

Función

Implementación estándar

Inferencia optimizada

Capacidad de procesamiento

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

Alta; utiliza el procesamiento por lotes continuo y la iteración continua.

Latencia

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

Optimizada; utiliza la aceleración del completado previo y la decodificación especulativa.

Administración de la memoria

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

Dinámica (paginación); desperdicio mínimo a través de PagedAttention.

Eficiencia del hardware

A menudo, no se aprovechan las capacidades de procesamiento de GPU y TPU.

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

Costo por solicitud

Más alto; requiere más hardware para la misma carga.

Más bajo; agrupa más solicitudes en la misma infraestructura.

Función

Implementación estándar

Inferencia optimizada

Capacidad de procesamiento

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

Alta; utiliza el procesamiento por lotes continuo y la iteración continua.

Latencia

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

Optimizada; utiliza la aceleración del completado previo y la decodificación especulativa.

Administración de la memoria

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

Dinámica (paginación); desperdicio mínimo a través de PagedAttention.

Eficiencia del hardware

A menudo, no se aprovechan las capacidades de procesamiento de GPU y TPU.

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

Costo por solicitud

Más alto; requiere más hardware para la misma carga.

Más bajo; agrupa más solicitudes en la misma infraestructura.

Introducción: Elige tu entorno de organización

Google Cloud ofrece una variedad de herramientas diseñadas para diferentes niveles de habilidad y necesidades arquitectónicas.

Herramienta

Punto de partida

Nivel de habilidad

Enfoque

Función clave

Cloud Run con GPU.

Un servicio de IA ligero y basado en eventos

Principiante

Sin servidores

Inferencia de escalamiento a cero para cargas de trabajo intermitentes y de baja latencia

Un modelo de OSS (como Llama 3)

De principiante a intermedio.

Administrado o con poco código

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


Cargas de trabajo de producción de alto rendimiento

De intermedio a avanzado

Inferencia acelerada

Microservicios precompilados con optimizaciones de TensorRT-LLM de vanguardia

Una infraestructura personalizada de varios modelos

Avanzadas

Nativo de la nube / personalizado

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

Desarrollo a gran escala con prioridad en TPU

Avanzadas

Optimizado para TPU / XLA

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

Herramienta

Punto de partida

Nivel de habilidad

Enfoque

Función clave

Cloud Run con GPU.

Un servicio de IA ligero y basado en eventos

Principiante

Sin servidores

Inferencia de escalamiento a cero para cargas de trabajo intermitentes y de baja latencia

Un modelo de OSS (como Llama 3)

De principiante a intermedio.

Administrado o con poco código

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


Cargas de trabajo de producción de alto rendimiento

De intermedio a avanzado

Inferencia acelerada

Microservicios precompilados con optimizaciones de TensorRT-LLM de vanguardia

Una infraestructura personalizada de varios modelos

Avanzadas

Nativo de la nube / personalizado

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

Desarrollo a gran escala con prioridad en TPU

Avanzadas

Optimizado para TPU / XLA

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

Cómo optimizar la inferencia con Vertex AI Model Garden

Model Garden es la ruta más rápida para implementar versiones optimizadas de modelos abiertos líderes como Llama, Gemma y Mistral.

Paso 1: Elige y configura tu modelo

Ve a Model Garden y busca un modelo de OSS compatible. Haz clic en Implementar. En la configuración, selecciona un entorno de ejecución optimizado, como vLLM o NVIDIA NIM.

Paso 2: Aplica la cuantización

Elige una versión cuantizada del modelo (por ejemplo, de 4 bits o de 8 bits) para reducir su huella de memoria. Esto te permite entregar tamaños de lote más grandes en la misma GPU, lo que aumenta directamente la capacidad de procesamiento.

Paso 3: Habilita la administración avanzada de memoria

Asegúrate de que el contenedor de entrega 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 5: Implementa y supervisa

Una vez implementado, Vertex AI maneja automáticamente el procesamiento por lotes en tránsito y procesa las nuevas solicitudes tan pronto como una solicitud existente completa un token. Usar Vertex AI Model Monitoring para hacer un seguimiento de la latencia y garantizar que la “vibra” del resultado siga siendo de alta calidad.

Cómo optimizar la inferencia con GKE

Para los equipos que necesitan un control detallado sobre su organización y los kernels de inferencia personalizados, GKE es la opción estándar de la industria.

Paso 1: Inicializa tu clúster con GPUs de NVIDIA o Cloud TPU

Aprovisiona un clúster de GKE con nodos de GPU especializados (como L4 o H100). Instala el operador de GPU de NVIDIA para controlar la administración de controladores y el ajuste de rendimiento de forma automática.

Paso 2: Implementa un servidor de inferencia optimizado

Usar 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 permite cambiar entre TPU y GPUs con una mínima codificación adicional.

Paso 3: Implementa la decodificación especulativa

Para necesidades de latencia esenciales, configura la decodificación especulativa. Esto implica usar un modelo de “borrador” más pequeño y rápido para predecir tokens, que luego son verificados en paralelo por tu modelo “objetivo” más grande, lo que a menudo proporciona una aceleración de 2x a 3x.

Paso 4: Optimiza la implementación con la guía de inicio rápido de inferencia de GKE

GKE Inference Quickstart actúa como una base de datos preconfigurada de configuraciones de pila de inferencia probadas. Cuando especificas tu modelo, los requisitos de latencia y las prioridades de costo, la herramienta proporciona un conjunto de recomendaciones basadas en prácticas recomendadas y los comparativos más recientes. Esto te permite supervisar las métricas de rendimiento específicas de la inferencia y ajustar dinámicamente tu implementación para garantizar que siempre se ejecute con tecnología optimizada.

Paso 5: Escala con la puerta de enlace de inferencia de GKE

GKE Inference Gateway ya está disponible de forma general y presenta dos capacidades avanzadas para administrar aplicaciones complejas de IA generativa.

  • Enrutamiento con reconocimiento de prefijos: Para aplicaciones como el chat de varios turnos o el análisis de documentos, esta función enruta las solicitudes a los mismos aceleradores que ya tienen el contexto almacenado en caché, lo que mejora los tiempos de respuesta.
  • Entrega desagregada: Esta técnica separa la fase inicial de “relleno previo” (procesamiento de instrucciones) de la fase de “decodificación” (generación de tokens). Como estas etapas tienen diferentes necesidades de recursos, puedes ejecutarlas en grupos de máquinas separados y optimizados para maximizar la eficiencia.

Paso 6: Acelera el acceso a los datos con la caché en cualquier lugar

Anywhere cache es una nueva caché de lectura totalmente coherente que funciona con buckets de Google Cloud Storage (GCS) existentes para almacenar en caché los datos dentro de la misma zona que tus aceleradores. Esto reduce la latencia de lectura hasta un 96% y minimiza los costos de red asociados con cargas de trabajo con muchas lecturas.

Paso 7: Conecta cargas de trabajo globales con Cloud WAN

Cloud WAN, una red global completamente administrada creada en la infraestructura a escala planetaria de Google, une toda la infraestructura. Cloud WAN conecta recursos de computación de IA en diferentes regiones, nubes y entornos locales, lo que ofrece una mejora del 40% en la experiencia de la aplicación de inferencia y un TCO un 40% más bajo en comparación con las soluciones WAN tradicionales.

Resuelve tus desafíos más difíciles con Google Cloud

Los clientes nuevos obtienen $300 en créditos gratuitos que pueden usar en Google Cloud.

Da el siguiente paso

Comienza a desarrollar en Google Cloud con el crédito gratis de $300 y los más de 20 productos del nivel Siempre gratuito.

Google Cloud