Arquitectura y Análisis de Memoria
¿Qué es el KV Cache? Cálculo, Fórmulas y Tamaño de VRAM
Comprende cómo el almacenamiento en caché de Claves y Valores acelera la generación autorregresiva, por qué satura la VRAM en contextos largos y cómo reducir su consumo entre un 50% y un 75%.
Interactive KV Cache Calculator
See how architecture, context tokens, and precision dictate real GPU memory consumption.
32 layers · 32 query heads · 8 KV heads (4:1 GQA group)
Multi-user servers (like vLLM) multiply the KV cache by active parallel requests.
Formula: 2 (Keys + Values) × 32 layers × 8 KV heads × 128 head dim × 32,768 tokens × 2 bytes
Because this model uses GQA (8:1 ratio), this KV cache is 4x smaller than it would be with legacy MHA (which would have required 16.0 GiB).
1. Por Qué la Generación Autorregresiva Requiere KV Cache
Durante la inferencia en transformers, las palabras se predicen de forma secuencial, token por token. Para predecir el token N, el modelo debe prestar atención a los N-1 tokens previos. Sin un caché KV, las matrices de claves y valores tendrían que recalcularse por completo en cada paso, derivando en un coste computacional cuadrático O(N²).
Al guardar los vectores de Clave (Key) y Valor (Value) calculados en VRAM, la complejidad se mantiene lineal O(N) por paso. Sin embargo, esto intercambia cómputo por memoria: cada nuevo token añadido incrementa el peso del caché en VRAM.
2. La Fórmula Matemática Exacta
El factor 2 corresponde a la separación entre Claves y Valores. n_capas es la profundidad de capas, n_cabezas_kv el número de cabezas KV, dim_cabeza la dimensión interna y long_secuencia la longitud del contexto activo.
Ejemplo: Llama 3 8B con GQA (8 cabezas KV, dimensión 128, 32 capas) a 16k tokens en precisión FP16 (2 bytes): 2 x 32 x 8 x 128 x 16,384 x 1 x 2 = 2.15 GB de VRAM para una sola conversación.
3. Evolución de Arquitecturas: MHA vs GQA vs MLA
4. Cómo Cuantizar el KV Cache (Ahorro del 50% al 75%)
Por defecto, los motores de inferencia guardan el caché en precisión FP16 (2 bytes por valor). Al cuantizar el caché a FP8 (1 byte) o INT4 (0.5 bytes), se reduce el espacio consumido en un 50% o 75% sin alterar los pesos del modelo.
En vLLM, añade el parámetro --kv-cache-dtype fp8. En llama.cpp, utiliza -ctk q8_0 -ctv q8_0 o -ctk q4_0 -ctv q4_0 para liberar gigabytes de VRAM en contextos de más de 32k tokens.
Preguntas Frecuentes
El motor de inferencia produce un bloqueo por falta de memoria (CUDA Out of Memory) o descarta tokens previos si el contexto rotativo está habilitado. Es fundamental dejar un margen holgado de VRAM para evitar cierres inesperados durante la respuesta.
Depende de la suma total de tokens en la secuencia (prompt inicial más tokens de salida). Un prompt de 20k tokens con respuesta de 2k tokens ocupa exactamente la misma memoria que un prompt de 2k con respuesta de 20k.
Sí. Numerosas evaluaciones demuestran que la cuantización FP8 en el caché introduce una degradación casi imperceptible en pruebas lógicas, liberando valiosos gigabytes de VRAM para contextos más amplios.
Escala de manera estrictamente lineal. Si 4 usuarios interactúan simultáneamente con contextos de 8k tokens, el consumo se multiplica por 4. Motores modernos como vLLM integran PagedAttention para eliminar la fragmentación entre peticiones.
MLA comprime los vectores KV en un vector latente comprimido antes de guardarlos en el caché, reduciendo la memoria requerida hasta en un 93% en comparación con MHA. Por ello, DeepSeek gestiona contextos de 128k con un consumo de VRAM asombrosamente bajo.
Calcula el consumo exacto de tu KV Cache
Utiliza nuestra Calculadora VRAM para proyectar consumos con diferentes contextos y tamaños de lote en cientos de modelos.
Knowledge & Deep Dives
Centro de Conocimiento sobre VRAM e IA Local
Guías técnicas exhaustivas, análisis de arquitecturas y manuales de hardware para configurar y ejecutar modelos de lenguaje locales con total precisión.