¿Por qué la decodificación de un LLM está limitada por la memoria y el prefill por el cómputo?

Traducción automática

Este artículo se tradujo automáticamente a partir de la versión original en inglés.

La decodificación de un LLM suele estar limitada por la memoria porque un lote pequeño reutiliza cada peso del modelo solo unas pocas veces antes de cargar los siguientes pesos. El prefill de secuencias largas o de lotes suficientemente grandes reutiliza los pesos entre muchos tokens del prompt, por lo que el cálculo matricial puede convertirse en el recurso limitante. Son condiciones de la carga de trabajo, no propiedades permanentes de cada fase.

La intensidad aritmética ayuda a decidir si conviene reducir el movimiento de datos o mejorar la ejecución de operaciones matriciales.

Comparar los cálculos con los bytes transferidos

La intensidad aritmética es el número de operaciones de coma flotante realizadas por cada byte transferido desde la memoria. El modelo roofline la compara con el cociente entre la capacidad máxima de cómputo y el ancho de banda de memoria.

Las especificaciones de la H100 SXM de NVIDIA indican aproximadamente 989 TFLOPS para cálculos densos FP16/BF16 en Tensor Cores y 3.35 TB/s de ancho de banda de memoria. La cifra de 1,979 TFLOPS publicada presupone dispersión estructurada. Su cociente es de unos 295 FLOPs por byte. Es un límite teórico calculado con especificaciones de hardware correspondientes entre sí.

Una multiplicación simplificada de una matriz densa por un vector realiza unas dos operaciones por cada peso de dos bytes: aproximadamente un FLOP por byte. Un decodificador con un lote de tamaño uno no puede aprovechar la capacidad máxima de cálculo matricial de la GPU en estas condiciones. Los lotes mayores permiten que un peso cargado contribuya al cálculo de varios tokens. El prefill también reutiliza los pesos entre los tokens del prompt. Splitwise describe estas diferencias entre fases.

Elegir un cambio a partir del límite medido

ObservaciónCambio que investigarQué puede impedir una mejora
La decodificación con lotes pequeños dedica tiempo a transferir pesosCuantización de pesos compatible; lotes de decodificación mayoresKernels de cuantización, pérdida de calidad, límites de latencia
La decodificación con contextos largos dedica tiempo a leer el historial de atenciónMenos cabezas KV; cuantización KV compatible; atención eficienteArquitectura del modelo y compatibilidad con la precisión de la caché
Un prefill grande utiliza intensivamente las unidades matricialesKernels matriciales eficientes; cómputo de menor precisión compatiblePrompts cortos, lotes pequeños, otras operaciones
Muchos kernels cortos dejan intervalos sin ejecución en la GPUFusión o reducción del coste de lanzamientoMayor uso de registros y memoria compartida

Mide tanto la latencia hasta el primer token como los intervalos entre los tokens posteriores después de cada cambio. Un lote mayor puede mejorar el total de tokens por segundo y, a la vez, ralentizar cada petición. El cociente del hardware identifica un posible límite; una traza determina a qué recurso espera realmente tu carga de trabajo.

Guía de ingeniería: inferencia limitada por memoria frente a inferencia limitada por cómputo incluye el diagrama roofline y optimizaciones específicas para cada fase.