English · Español
Fase 22 — KV Cache: de la matemática a la memoria¶
Requiere: 15 — Attention desde cero · 21 — Internals de inferencia y sampling Enseña:
kv-cache·prefill·decode·memory-bound·arithmetic-intensitySalta a cualquier capítulo desde el índice de referencia de fases.
Mapa del capítulo¶
Pre-escrito según §A12. Esta entrada de fase existe antes de que Borja comience el estudio. Los enunciados de teoría y laboratorio son borradores estables; las soluciones se escriben just-in-time al abrir la fase.
Tema: gramática de verbos en inglés según §A13. Las demostraciones del KV cache usan prompts como
"Yesterday I"extendidos a"Yesterday I worked"— el decode autorregresivo que el caché existe para acelerar.🇪🇸 Sin caché KV, cada token nuevo recalcula la atención sobre todos los anteriores: O(n³) total. Con caché, cada token mira una sola fila contra las claves ya guardadas: O(n²) total, a cambio de memoria que crece linealmente. Esta fase es donde la inferencia deja de ser una broma y empieza a ser un sistema.
Objetivo¶
Construir un KV cache denso en NumPy que:
- Convierta la generación autorregresiva del MiniGPT de la Fase 17 (entrenado con gramática de verbos) de cómputo cuadrático por token a cómputo lineal por token.
- Produzca salidas byte a byte idénticas al camino sin caché (cada divergencia es un bug, no una feature).
- Tenga una huella de memoria que Borja pueda derivar en papel antes de medirla.
Esta es la segunda fase de derivación más importante después de la Fase 15 (la atención en sí). Las páginas de teoría son densas y merecen lectura lenta.
Orden de lectura¶
theory/00-motivation.md— por qué existe un caché en absoluto; la dicotomía prefill/decode mediante el ejemplo trabajado"Yesterday I worked".theory/01-prefill-vs-decode.md— las dos fases de la inferencia; contabilidad de FLOPs con prompts del corpus de gramática.theory/02-memory-cost.md— la fórmula de tamaño2 · L · H · d_h · S · B · s; coste marginal por token; escalado a modelos reales.theory/03-decode-as-memory-bound.md— intensidad aritmética de la atención de un solo token; por qué el decode está limitado por ancho de banda; vista previa de Flash-decoding (Fase 24) y PagedAttention (Fase 27).theory/04-toward-paged-attention.md— vista previa corta de por qué la pre-asignación densa se rompe bajo servicio por lotes de longitud variable; solo el enunciado del problema, solución diferida a la Fase 27.lab/00-derive-cache-size.md— ejercicio en papel: derivar el coste de memoria para MiniGPT de gramática, Llama-2-7B, GPT-3-175B en tres longitudes de contexto. Sin código.lab/01-implement-cache.md— implementarsrc/minicache/cache.py. Los tests fallidos viven entests/test_minicache.py.lab/02-correctness-test.md— test de propiedad: con-caché igual a sin-caché, byte a byte, sobre 50 prompts de gramática × 64 tokens; volcado emblemático a nivel de slot de"Yesterday I"→"worked".lab/03-cost-curves.md— medir memoria + latencia vs longitud de contexto; superponer curvas teóricas; commitexperiments/22-kv-cost/.
solutions/ está vacío durante el pre-escrito — se rellena al abrir la fase tras confirmar el API de atención de la Fase 15 de Borja.
Definition of Done¶
Ver PHASE_22_PLAN.md §6. Brevemente:
src/minicache/{cache,layout}.pyimplementados; mypy-strict limpio; pytest verde.experiments/22-kv-cost/muestra curvas de memoria y latencia dentro del 10% de las predicciones teóricas.experiments/22-cache-correctness/confirma generación byte a byte idéntica con vs sin caché sobre 50 × 64 tokens.experiments/22-yesterday-worked/muestra que el slot K, V para"I"coincide entre el decode con caché y el recálculo completo.- Borja puede derivar la fórmula de tamaño del caché en una pizarra a partir de
(L, H, d_h, S, B, s)sin mirar, y proyectarla a Llama-2-7B y GPT-3.
Lo que esta fase intencionadamente NO cubre¶
- KV cache en GPU. La Fase 22 se queda en CPU + NumPy. El caché se mueve a memoria GPU en la Fase 24, y el layout cambia (HBM vs L2 vs SMEM) — pero la matemática derivada aquí se traslada literalmente. El layout específico del hardware es trabajo de la Fase 24.
- Implementación de PagedAttention. La Fase 22 previsualiza el problema (fragmentación bajo lotes de longitud variable). La implementación es la Fase 27.
- Continuous batching. Fase 33 (infraestructura de serving). La Fase 22 es de un único stream.
- Speculative decoding. Fase 36 — requiere múltiples cabezas del modelo o un modelo borrador.
- Cuantización del caché. La Fase 26 mantiene el caché en fp32 (igual que el resto del MiniGPT) y solo calcula lo que ahorrarían int8 / fp16.
- Sliding-window o eviction LRU. Territorio de la Fase 27. El caché de la Fase 22 es ilimitado — pre-asignado a
S_maxy punto. - PyTorch. Se importa por primera vez en la Fase 24. La Fase 22 es solo NumPy, según
CLAUDE.md§0.4.
El alcance de la Fase 22 es: un modelo, un stream, un caché, matemática exacta, sin eviction. Todo lo demás es para más adelante.
Vista previa de la siguiente fase: docs/phase-23-gpu-fundamentals/ — el pivote a GPU en la nube. El modelo mental construido aquí (decode memory-bound, caché como artefacto de crecimiento lineal) se traslada; solo cambia el hardware.
Lecturas recomendadas¶
Opcional — enriquece pero no es necesario para aprobar la fase.
- 📄 Efficiently Scaling Transformer Inference — Pope et al. · 2022. la aritmética de la KV cache y el coste de decode.