Skip to content

English · Español

Lab 00 — Derivar el tamaño del caché en papel

Objetivo: confirmar que la fórmula bytes = 2 · L · H · d_h · S · B · s ha aterrizado antes de tocar código.

Tiempo estimado: 60–90 minutos.

Prerrequisito: theory/00..04.md leídos. Config de spec para el MiniGPT de la Fase 17 confirmada (revisar de nuevo src/minimodel/README.md).


Lo que produces

Un fichero markdown experiments/22-cache-sizing/derivations.md que contenga:

  • Seis derivaciones trabajadas (una por fila de la tabla de escalado de theory/02-memory-cost.md).
  • Dos derivaciones "inversas" (dado un presupuesto de memoria, hallar \(S_\text{max}\)).
  • Una sección numerada de "cosas que me equivoqué en el primer intento". (Si está vacía, no hiciste bastante; rehazlo con atención.)

Sin código en este laboratorio. Usa una calculadora si la necesitas. Cita cada número desde la config de la spec — Phase-17 README.md para MiniGPT, configs públicas para GPT-2 / Llama-2 / GPT-3.

TODOs

Bloque A — derivar hacia delante

Para cada modelo de la tabla de abajo, calcula:

Modelo \(L\) \(H\) \(d_h\) dtype Por token ctx 4k ctx 32k
MiniGPT (de la config de la Fase 17) fp32 __ __ __
GPT-2 small 12 12 64 fp16 __ __ __
Llama-2-7B 32 32 128 fp16 __ __ __
Llama-2-13B 40 40 128 fp16 __ __ __
Llama-2-70B (MHA) 80 64 128 fp16 __ __ __
GPT-3 175B 96 96 128 fp16 __ __ __

Rellena las columnas por-token, 4k y 32k. Muestra tu aritmética en la página, p. ej.:

Llama-2-7B per-token: 2 * 32 * 32 * 128 * 1 * 2 = 524288 bytes = 512 KiB. ✓

Bloque B — derivar a la inversa

  1. A100 40 GB, Llama-2-7B fp16, pesos del modelo 14 GiB, batch 1. ¿Cuál es \(S_\text{max}\)? ¿Cuál es la respuesta si batch = 8?
  2. H100 80 GB, GPT-3-175B fp16, pesos del modelo 350 GiB. Trampa: los pesos no caben en una sola GPU. ¿Cuántas H100 necesitas solo para contener los pesos en fp16? ¿En int8?

Bloque C — verificar una afirmación de ahorro por GQA

Un post de papers-with-code afirma "Mistral-7B ahorra 4× la memoria de caché vs Llama-2-7B usando GQA con \(H_{KV} = 8\) en vez de 32 cabezas para K, V". Verifica:

  1. Misma fórmula por token pero \(H \to H_{KV}\) para el caché: \(\Delta = 2 \cdot L \cdot H_{KV} \cdot d_h \cdot B \cdot s\).
  2. ¿Ratio entre el caché de Mistral-7B y el de Llama-2-7B, mismo contexto, mismo batch?
  3. ¿Es la afirmación "4×" exactamente correcta, una aproximación, o errónea? Muestra la matemática.

Bloque D — escollos (un párrafo cada uno)

Escribe un párrafo corto sobre cada escollo, con tus propias palabras, con un contraejemplo o un número:

  1. El factor 2. ¿Por qué está ahí? ¿De dónde viene en theory/02?
  2. \(d\) vs \(H \cdot d_h\). ¿Cuándo importa la diferencia (pista: GQA)?
  3. fp32 vs fp16. ¿Es el caché siempre del mismo dtype que el modelo? ¿Por qué HuggingFace te deja mezclar?
  4. Desperdicio de pre-asignación. Para Llama-2-7B con \(S_\text{max} = 32768\) pero longitud real media \(1024\), ¿qué fracción de la memoria del caché se desperdicia? Con batch 32, ¿cuántos GiB desperdiciados?

Condiciones de parada

Hecho cuando:

  1. Las seis filas del Bloque A rellenas con aritmética mostrada.
  2. Los dos problemas inversos del Bloque B resueltos con aritmética.
  3. Bloque C verificado con un sí/no/por qué.
  4. Los cuatro párrafos del Bloque D escritos.
  5. La sección "cosas que me equivoqué en el primer intento" tiene al menos una entrada (si no: rehacer con más cuidado).
  6. Fichero commiteado en experiments/22-cache-sizing/derivations.md.

Escollos (leer antes de depurar)

  • Bytes vs bits. \(s = 2\) para fp16, no 16. El 16 es el conteo de bits.
  • GiB vs GB. "2 GiB" = \(2 \cdot 2^{30}\) bytes; "2 GB" = \(2 \cdot 10^9\). La diferencia (7%) importa cuando comparas con specs de fabricante (que usan GB).
  • Confusión de batch. Un "batch de 32 secuencias" significa \(B = 32\). Cada una tiene su propio caché. Caché total \(\times 32\).
  • GQA en el eje equivocado. GQA comparte K, V entre cabezas de query. El caché usa \(H_{KV}\), el cómputo de atención usa \(H\). La gente confunde las dos constantemente.

Cuándo consultar solutions/

Después de que las cinco condiciones de parada se cumplan. La solución en solutions/00-derive-cache-size-ref.md (escrita al abrir la fase) compara tus números y señala cualquier error aritmético.


Siguiente lab: lab/01-implement-cache.md.