Explicador en lenguaje claro
La KV cache, explicada
La KV cache es la memoria que un modelo de lenguaje mantiene mientras genera: las Keys y los Values de cada token procesado hasta ahora. Guardarlos permite que cada token nuevo calcule solo su fila en vez de rehacer toda la historia, y así la generación es rápida. Su tamaño crece con el contexto, y por eso los contextos largos consumen memoria de GPU.
¿Qué es la KV cache y por qué importa para la velocidad y el costo?
Cuando un modelo genera texto, cada token nuevo tiene que mirar hacia atrás a todos los anteriores mediante attention. Recalcular esa mirada desde cero en cada paso sería lentísimo. La KV cache guarda las claves y valores de attention de cada token la primera vez que se calculan, así cada paso posterior los reutiliza y solo calcula el token más nuevo. El precio es memoria: la cache crece con el largo del context, y por eso las conversaciones largas consumen memoria de GPU.
Revisado por última vez el
Leer es el camino lento. Empieza con una lección gratis que puedes operar ahora mismo.
Empieza gratis: Predice la siguiente palabra →Gratis, sin código, sin registro.
Diez segundos, sin lección: juega con el widget independiente, e insértalo en tu propia página.
Y después ve más a fondo: Ventana de contexto y caché KV Bloqueada
Cómo funciona la KV cache, paso a paso
Dentro de cada capa de attention, cada token produce tres vectores: una Query, una Key y un Value. Para escribir el siguiente token, el modelo compara la Query de ese token con la Key de cada token anterior y después mezcla sus Values. La Query se usa una sola vez. Las Keys y los Values de los tokens anteriores se vuelven a necesitar en cada paso posterior.
Esas Keys y Values anteriores nunca cambian. Un token solo puede mirar hacia atrás, así que nada de lo que se escribe después altera lo que calculó un token anterior. Por eso se pueden guardar. La KV cache es ese almacén: una Key y un Value por token, por capa y por head de attention, guardados en la memoria de la GPU mientras dura la petición.
- Prefill: todo el prompt se procesa en una pasada en paralelo, y las Keys y Values de cada token del prompt se escriben en la cache. Es la espera antes de que aparezca la primera palabra.
- Decode: cada token nuevo calcula solo su propia Query, Key y Value, lee todo lo demás de la cache y añade su Key y su Value. Un token por paso.
- Liberación: cuando termina la respuesta, la cache se libera, salvo que el proveedor guarde el prefijo para el prompt caching.
¿Cuánta memoria ocupa la KV cache? Un ejemplo con números
El tamaño sale de una fórmula: 2 (una Key y un Value) por el número de capas, por el número de heads de key y value, por el tamaño de cada head, por los bytes de cada número, por el número de tokens.
Toma Llama 3.1 8B: 32 capas, 8 heads de key y value, 128 números por head, guardados con 2 bytes cada uno. Eso da 2 × 32 × 8 × 128 × 2 = 131.072 bytes, o 128 KB por cada token. Con 8.192 tokens la cache ocupa 1 GB. Con el contexto completo de 128.000 tokens ocupa unos 16 GB, más o menos lo mismo que los propios pesos del modelo con la misma precisión.
El anterior Llama 2 7B daba a cada head de attention sus propias Keys y Values, 32 por capa en vez de 8, así que necesitaba 512 KB por token, cuatro veces más. Llama 3.1 70B, con 80 capas, necesita 320 KB por token, así que una sola conversación de largo completo guarda unos 40 GB de cache. Multiplica por la gente que atiende un servidor a la vez y verás que muchas veces lo que llena la GPU es la cache, no el modelo.
| Modelo | Por token | Con 4K tokens | Con 128K tokens |
|---|---|---|---|
| Llama 2 7B (32 heads KV) | 512 KB | 2 GB | 64 GB, más allá de su límite de 4K |
| Llama 3.1 8B (8 heads KV) | 128 KB | 0,5 GB | 16 GB |
| Llama 3.1 70B (8 heads KV) | 320 KB | 1,25 GB | 40 GB |
Por qué la KV cache importa en los modelos reales
Casi todos los cambios recientes en attention existen para achicar esta cache. La grouped-query attention, que usan Llama 2 70B, Llama 3 y Mistral, hace que varias heads de Query compartan un mismo juego de Keys y Values. De ahí sale el ahorro de 4 veces de arriba. DeepSeek-V2 fue más lejos con la multi-head latent attention, que guarda una versión comprimida de las Keys y Values, y su paper reporta una cache un 93% más pequeña que la del modelo anterior de 67B de DeepSeek.
El software que sirve modelos también gira a su alrededor. PagedAttention, de vLLM, guarda la cache en bloques de tamaño fijo, como las páginas de memoria de un ordenador. Sus autores midieron que los sistemas anteriores desperdiciaban entre el 60 y el 80% de la memoria de la cache en huecos y reservas, y que paginarla bajó el desperdicio por debajo del 4%, así una GPU atendía de dos a cuatro veces más peticiones. Muchos servidores además guardan la cache en 8 bits en vez de 16 para que quepa el doble de contexto.
Y lo ves en la factura. El prompt caching mantiene viva entre peticiones la cache de un prefijo repetido, como un system prompt largo o un documento. Anthropic cobra esas lecturas en cache a una décima parte del precio normal de entrada, y OpenAI descuenta los prefijos repetidos de forma automática. El descuento es la cache que no hubo que reconstruir.
KV cache vs prompt caching vs ventana de contexto
Las tres están relacionadas y se confunden a menudo. La ventana de contexto es el límite de tokens que un modelo puede tener en cuenta. La KV cache es la memoria de trabajo que guarda las Keys y Values de esos tokens durante una petición. El prompt caching es una función de producto que conserva parte de esa memoria entre peticiones.
| Qué es | Cuánto dura | Quién la controla | |
|---|---|---|---|
| Ventana de contexto | El máximo de tokens por petición | Es una propiedad fija del modelo | El diseño del modelo |
| KV cache | Las Keys y Values guardados de los tokens hasta ahora | Una petición | El software que sirve el modelo, solo |
| Prompt caching | Una KV cache de un prefijo repetido, guardada entre peticiones | Minutos, a veces horas | Tú, según cómo armes tus prompts |
Lo que la gente entiende mal
- La KV cache es la memoria que el modelo tiene de ti. Es memoria de trabajo por petición, se descarta al terminar y nunca cambia el modelo.
- La cache guarda tu texto. Guarda claves y valores de attention, los vectores que el modelo derivó de tu texto.
- Una ventana de contexto más larga es solo una caja de texto más grande. Las claves y valores de cada token deben caber en la memoria de la GPU a la vez, así que el largo del context es un presupuesto de hardware.
Dónde lo ves en productos reales
- Los chats muy largos se vuelven lentos y chocan con límites porque la cache no deja de crecer.
- Las APIs venden tokens de entrada cacheados más baratos: las claves y valores de un prefijo repetido ya existen.
- Las especificaciones de context de los modelos hablan tanto de memoria de GPU como del modelo en sí.
Preguntas frecuentes
- ¿Qué guarda en realidad la KV cache?
- Los vectores key y value ya calculados para cada token del contexto. Sin ella, generar el token 500 obligaría a reprocesar los 499 anteriores desde cero. Con ella, solo se procesa el token nuevo y el resto se vuelve a leer.
- ¿Por qué el primer token tarda mucho más que los demás?
- Eso es el prefill: se procesa todo el prompt de una vez para construir la cache. Todo lo que viene después es un paso barato de un token que lee de esa cache. Por eso los proveedores dan el tiempo hasta el primer token y los tokens por segundo como dos números distintos.
- ¿Por qué el contexto largo consume tanta memoria?
- La cache crece con cada token y tiene que quedarse en memoria rápida durante toda la petición. Con un contexto largo puede competir con los propios pesos del modelo, y por eso las peticiones de contexto largo cuestan más y achicar la cache es un área de investigación activa.
- ¿Qué tan grande llega a ser la KV cache?
- Escala con tokens por capas por el tamaño de las keys y values. Para un modelo grande con un contexto largo, son gigabytes por conversación, y por eso servir chats largos necesita tanta memoria de GPU y por eso se inventó la grouped-query attention para achicarla.
- ¿El prompt caching es lo mismo que la KV cache?
- El prompt caching es una función de producto construida sobre la KV cache. Cuando un proveedor guarda las keys y values de un prefijo de prompt en memoria entre peticiones, se salta recalcularlas y te cobra menos por esos tokens de entrada en cache. El mecanismo de abajo es la misma cache.
- ¿La KV cache cambia la respuesta del modelo?
- No. Reutilizar las Keys y Values guardados da el mismo resultado que recalcularlos, salvo diferencias mínimas de redondeo. La cache solo ahorra trabajo. Lo que sí cambia la respuesta es achicarla con trucos con pérdida, como descartar tokens viejos o guardarla con muy poca precisión, y por eso se prueban con cuidado.
Explicadores relacionados
Más en Velocidad, costo y control
- ¿Qué es el routing de modelos, y cómo eliges qué modelo de IA usar?
- ¿Qué es la cuantización y cómo permite correr modelos grandes en hardware pequeño?
- ¿Qué hace de verdad el ajuste de temperatura en un modelo de IA?
- ¿Por qué las GPUs, y no las CPUs, son el hardware del boom de la IA?
- ¿Cómo funcionan de verdad los modelos de razonamiento?
- ¿Por qué operar IA es tan caro y qué estás pagando?
Una idea a la vez, en tu correo
Lecciones y explicadores nuevos, escritos como están escritas estas páginas. De vez en cuando, no a diario, y nunca una secuencia de venta.
Primero te enviamos un enlace de confirmación. Puedes darte de baja con un clic, cuando quieras. Privacidad.
Parte de See How AI Works, un curso interactivo gratuito, donde aprendes cómo funciona la IA moderna operándola, no viendo videos.