¿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ón | Cambio que investigar | Qué puede impedir una mejora |
|---|---|---|
| La decodificación con lotes pequeños dedica tiempo a transferir pesos | Cuantización de pesos compatible; lotes de decodificación mayores | Kernels 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ón | Menos cabezas KV; cuantización KV compatible; atención eficiente | Arquitectura del modelo y compatibilidad con la precisión de la caché |
| Un prefill grande utiliza intensivamente las unidades matriciales | Kernels matriciales eficientes; cómputo de menor precisión compatible | Prompts cortos, lotes pequeños, otras operaciones |
| Muchos kernels cortos dejan intervalos sin ejecución en la GPU | Fusión o reducción del coste de lanzamiento | Mayor 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.