𝗞𝗩 𝗖𝗮𝗰𝗵𝗲 𝘆 𝗣𝗮𝗴𝗲𝗱𝗔𝘁𝘁𝗲𝗻𝘁𝗶𝗼𝗻: 𝗣𝗼𝗿 qué 𝘀𝗲 𝗿𝗲𝗱𝘂𝗰𝗲 𝗹𝗮 𝘃𝗲𝗹𝗼𝗰𝗶𝗱𝗮𝗱 𝗱𝗲 𝘁𝘂 𝘀𝗲𝗿𝘃𝗶𝗱𝗼𝗿 𝗟𝗟𝗠

Tu servidor LLM funciona lento.

Has desplegado un modelo de 70B en cuatro GPUs A100. Todo parece estar bien a las 8 AM. Para la hora del almuerzo, la latencia se ha duplicado. Revisas tu memoria. La mayor parte está ocupada por "tensor buffers". En realidad, se trata de estados en caché de conversaciones anteriores.

Este es el problema del KV cache. Es el mayor cuello de botella en el despliegue de LLMs en producción.

¿Qué es el KV cache?

Cada modelo transformer genera tokens uno por uno. Para crear un nuevo token, el modelo necesita los tensores Key y Value de todos los tokens anteriores. Recomputar estos cada vez es demasiado lento. En su lugar, el motor los almacena. Este almacenamiento es el KV cache.

El problema de la memoria:

Para un modelo Llama 3.1 70B, una sola secuencia de 4096 tokens necesita aproximadamente 1.3 GB de memoria.

Si tienes 256 usuarios a la vez, necesitas 336 GB de memoria. Esto es más de lo que pueden contener cuatro GPUs A100. El KV cache crece tan rápido que a menudo utiliza más memoria que los propios pesos del modelo.

La gestión de memoria tradicional falla porque:

  • Fragmentación interna: Asignas espacio para 4096 tokens pero solo usas 300. Desperdicias el 93% de ese espacio.
  • Sin uso compartido: Dos usuarios con el mismo system prompt almacenan cada uno su propia copia de ese prompt.
  • Expulsión de todo o nada (all-or-nothing eviction): Cuando la memoria se agota, debes mover la secuencia completa a la CPU. Esto detiene la GPU.

Cómo PagedAttention soluciona esto:

PagedAttention funciona como un sistema operativo. Divide el KV cache en bloques pequeños de tamaño fijo llamados páginas (pages).

Esto resuelve tres problemas principales:

  • Asignación bajo demanda: Una secuencia solo ocupa páginas a medida que crece. No desperdicias memoria en capacidad no utilizada.
  • Soporte para prefijos compartidos: Múltiples usuarios pueden compartir las mismas páginas físicas para un system prompt común. Esto utiliza la lógica "copy-on-write" para ahorrar cantidades masivas de memoria.
  • Expulsión de grano fino (fine-grained eviction): Cuando la memoria está llena, el sistema mueve páginas pequeñas a la CPU en lugar de secuencias enormes.

El Resultado:

El uso de PagedAttention (la tecnología dentro de vLLM) puede aumentar el rendimiento (throughput) de 2 a 4 veces en comparación con los métodos tradicionales.

Cuándo usarlo:

  • Alta concurrencia.
  • Secuencias de diferentes longitudes.
  • Prompts que comparten el mismo inicio.

Cuándo evitarlo:

  • Inferencia local para un solo usuario.
  • Modelos muy pequeños.
  • Tareas donde cada secuencia tiene exactamente la misma longitud.

Source: https://dev.to/tech_nuggets/kv-cache-and-pagedattention-what-they-do-and-why-they-matter-jce

Optional learning community: https://t.me/GyaanSetuAi