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 · sha aterrizado antes de tocar código.Tiempo estimado: 60–90 minutos.
Prerrequisito:
theory/00..04.mdleídos. Config de spec para el MiniGPT de la Fase 17 confirmada (revisar de nuevosrc/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.:
Bloque B — derivar a la inversa¶
- 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?
- 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:
- 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\).
- ¿Ratio entre el caché de Mistral-7B y el de Llama-2-7B, mismo contexto, mismo batch?
- ¿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:
- El factor 2. ¿Por qué está ahí? ¿De dónde viene en
theory/02? - \(d\) vs \(H \cdot d_h\). ¿Cuándo importa la diferencia (pista: GQA)?
- fp32 vs fp16. ¿Es el caché siempre del mismo dtype que el modelo? ¿Por qué HuggingFace te deja mezclar?
- 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:
- Las seis filas del Bloque A rellenas con aritmética mostrada.
- Los dos problemas inversos del Bloque B resueltos con aritmética.
- Bloque C verificado con un sí/no/por qué.
- Los cuatro párrafos del Bloque D escritos.
- La sección "cosas que me equivoqué en el primer intento" tiene al menos una entrada (si no: rehacer con más cuidado).
- 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.