La inferencia de Large Language Models (LLM) en producción presenta un desafío fundamental de optimización: cómo maximizar el rendimiento (throughput) y minimizar la latencia por usuario, a la vez que se gestiona el costo computacional. Este problema se enmarca en el concepto de 'frontera eficiente', donde las mejoras en una métrica a menudo implican sacrificios en otra. La complejidad de los LLM modernos, con miles de millones o billones de parámetros, y la necesidad de servirlos a escala de hyperscaler, hacen que la ingeniería de inferencia sea un campo crítico.

Históricamente, la optimización de sistemas distribuidos ha girado en torno a la gestión de recursos compartidos y la minimización de cuellos de botella. En el contexto de LLM, esto se traduce en la gestión eficiente de GPUs, memoria de alto ancho de banda y la coordinación de operaciones masivamente paralelas. La aparición de modelos cada vez más grandes y la demanda de respuestas en tiempo real han intensificado la necesidad de técnicas sofisticadas que no solo permitan navegar esta frontera eficiente, sino que la expandan, logrando simultáneamente mejor latencia y mayor throughput.

Arquitectura del Sistema

La arquitectura de inferencia de LLM se basa en la ejecución de un modelo preentrenado sobre hardware acelerador, típicamente GPUs. El proceso de inferencia se divide conceptualmente en dos fases: 'prefill' (procesamiento de la secuencia de entrada para generar el estado inicial del KV cache) y 'decode' (generación iterativa de tokens de salida, utilizando el KV cache). La interacción entre estas fases y la gestión del KV cache son críticas para el rendimiento.

Las decisiones de diseño clave incluyen la estrategia de paralelismo del modelo (Tensor Parallelism, Expert Parallelism, Attention Data Parallelism) para distribuir la carga computacional y de memoria a través de múltiples GPUs. El 'batch sizing' es un parámetro fundamental que controla el número de solicitudes procesadas concurrentemente, impactando directamente la latencia por usuario y el throughput global. La 'cuantización' de pesos y activaciones reduce la precisión numérica del modelo (ej. de FP16 a MXFP4 o NVFP4), disminuyendo el consumo de memoria y aumentando la eficiencia computacional. A un nivel más bajo, la 'optimización de kernels CUDA' es esencial para mejorar la eficiencia de operaciones fundamentales como la multiplicación de matrices. Técnicas avanzadas como la 'decodificación especulativa' (ej. EAGLE-3, DSpark, DFlash) utilizan un modelo auxiliar más pequeño para predecir tokens, validándolos con el modelo principal y reduciendo el número de pasadas completas. Finalmente, la 'desagregación P/D' separa las fases de prefill y decode en workers dedicados, permitiendo optimizar cada fase de forma independiente y escalar sus recursos de manera granular.

Flujo de Inferencia con Decodificación Especulativa

  1. 1 Usuario Envía solicitud de inferencia
  2. 2 Modelo Pequeño (Draft) Genera una secuencia de tokens candidatos rápidamente
  3. 3 Modelo Grande (Verificador) Evalúa y valida los tokens candidatos en paralelo
  4. 4 Modelo Grande (Verificador) Si son válidos, acepta los tokens y avanza el estado
  5. 5 Modelo Grande (Verificador) Si no son válidos, genera el siguiente token de forma estándar
  6. 6 Usuario Recibe tokens generados

Flujo de Inferencia con Desagregación P/D

  1. 1 Usuario Envía solicitud de inferencia (prompt)
  2. 2 Worker de Prefill Procesa el prompt, genera KV cache inicial
  3. 3 KV Cache Almacena el estado del modelo para el prompt
  4. 4 Worker de Decode Genera tokens de salida iterativamente usando el KV cache
  5. 5 Usuario Recibe tokens generados
CapaTecnologíaJustificación
compute GPUs (NVIDIA, etc.) Hardware acelerador principal para la ejecución de modelos LLM debido a su capacidad de procesamiento paralelo masivo. vs TPUs, FPGAs, CPUs (para inferencia de menor escala) Interconexiones de alta velocidad como NVLink para Tensor Parallelism.
compute CUDA Kernels Funciones de bajo nivel optimizadas para la ejecución en GPUs, fundamentales para operaciones como multiplicación de matrices y atención. vs OpenCL, ROCm
data-processing KV Cache Almacena las claves (keys) y valores (values) de las activaciones de la capa de atención para evitar recálculos en cada paso de decodificación, mejorando la eficiencia. vs Recalcular atención en cada paso (ineficiente) KV-aware routing para optimización de acceso.
data-processing MXFP4 / NVFP4 Formatos de números de punto flotante de baja precisión utilizados en la cuantización para reducir el uso de memoria y aumentar la velocidad de cálculo. vs FP16, BF16, INT8

Trade-offs

Ganancias
  • Throughput
  • Costo por token
Costes
  • Latencia por usuario

Fundamentos Teóricos

El problema de optimización de la inferencia de LLM se conecta directamente con principios fundamentales de la computación paralela y distribuida. La gestión de trade-offs entre latencia y throughput es un tema recurrente en sistemas de alto rendimiento, similar a los desafíos abordados en la optimización de bases de datos transaccionales o sistemas de procesamiento de eventos complejos.

Conceptos como el 'scheduling' de tareas y la 'gestión de memoria' son centrales. La decodificación especulativa, por ejemplo, puede verse como una forma de 'predicción de ramas' o 'ejecución especulativa' a nivel de aplicación, un concepto bien establecido en la arquitectura de CPUs para mejorar el rendimiento. La desagregación de fases de inferencia refleja patrones de diseño de sistemas distribuidos donde la separación de responsabilidades y la optimización de componentes especializados (como en arquitecturas de microservicios o pipelines de procesamiento de datos) es clave para la escalabilidad. La cuantización tiene sus raíces en la teoría de la información y el procesamiento de señales, buscando representar datos con la menor cantidad de bits posible sin una pérdida significativa de calidad, un principio explorado en trabajos sobre compresión de datos y representación numérica en computación de alto rendimiento.