Saltar al contenido

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.

Tamaño de la KV cache con precisión de 16 bits, según las capas y heads publicados de cada modelo.
ModeloPor tokenCon 4K tokensCon 128K tokens
Llama 2 7B (32 heads KV)512 KB2 GB64 GB, más allá de su límite de 4K
Llama 3.1 8B (8 heads KV)128 KB0,5 GB16 GB
Llama 3.1 70B (8 heads KV)320 KB1,25 GB40 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é esCuánto duraQuién la controla
Ventana de contextoEl máximo de tokens por peticiónEs una propiedad fija del modeloEl diseño del modelo
KV cacheLas Keys y Values guardados de los tokens hasta ahoraUna peticiónEl software que sirve el modelo, solo
Prompt cachingUna KV cache de un prefijo repetido, guardada entre peticionesMinutos, a veces horasTú, 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

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.