Cómo DeepSeek reescribió el Transformer

Mascote do LinuxPro ajustando camada MLA no transformer

En enero de 2025 DeepSeek lanzó el R1 (y, semanas antes, el V3) compitiendo con o1 y GPT-4o en razonamiento — con una fracción del coste de entrenamiento e inferencia. Los pesos salieron abiertos. El truco no es un truco de dataset: es una reescritura del núcleo del Transformer, el Multi-Head Latent Attention (MLA), atacando el cuello de botella que paraliza la GPU a la hora de generar texto: el KV cache. Este texto sigue al vídeo How DeepSeek Rewrote the Transformer [MLA], de Stephen Welch (Welch Labs).

La cuenta de fondo es la misma del post qué es una red neural y de GPU vs TPU: MatMul. Aquí el problema es cuántos bytes esa MatMul necesita extraer de la HBM en cada token nuevo.

Atención clásica y el coste del KV cache

El paper de 2017, Attention Is All You Need, proyecta el embedding X en tres matrices:

Q = X W_Q     o que o token atual busca
K = X W_K     o rótulo que cada token oferece
V = X W_V     o conteúdo que sai se houver match

Attention(Q, K, V) = softmax( (Q K^T) / sqrt(d_k) + M ) V

Q K^T mide afinidad. M es la máscara causal (no espiar el futuro). Multiplicar por V mezcla lo que importó.

GPT-2 Small: 12 cabezas × 12 capas = 144 patrones. DeepSeek-V3/R1: 128 cabezas × 61 capas = 7.808.

La generación es autorregresiva: un token por vez, se pega al prompt, se ejecuta de nuevo. Recalcular Q, K y V de todo el pasado en cada paso sería O(N²) de cuenta. El atajo es el KV cache: la K y V de los tokens viejos no cambian. Se guarda en la VRAM. El token nuevo solo calcula la fila nueva de Q (y su K/V) y busca en el histórico.

tokens 1..t-1   K e V já prontos  →  KV cache (HBM)
token t         calcula Q_t       →  lê o cache inteiro

La cuenta cae. La cuenta de memoria estalla. En MHA:

KV cache = 2 × n_tokens × d_h × n_heads × L × bytes

V3/R1, por token (FP16):
  2 × 128 × 128 × 61 × 2 = 3.997.696 bytes   (~4 MB)

Ventana de 100 mil tokens (un libro): ~400 GB leídos de HBM para emitir una palabra. La GPU más cara del mundo se vuelve memory-bound — el mismo muro del post sobre las tarjetas gráficas.

MQA y GQA: encoger el caché, pagar en calidad

  • MQA: las 128 cabezas de la capa comparten un par K/V. Caché ÷ 128 (~31 KB/token). Las cabezas pierden especialización.
  • GQA (Llama 3): grupos — 8 cabezas, 1 K/V. Caché ÷ 8 (~500 KB/token). Compromiso. Todavía no es MHA.

MLA: comprimir el par, no las cabezas

La pregunta de DeepSeek: ¿y si K y V se proyectan en un espacio latente y la propia red aprende a comprimir/descomprimir, en vez de forzar a las cabezas a dividir la misma clave?

Merece la pena registrar de dónde viene la idea, porque casi todo el mundo se lo atribuye al R1: el MLA no debutó en el V3. Aparece en el paper del DeepSeek-V2, publicado el 7 de mayo de 2024 — un MoE de 236 B de parámetros con 21 B activados y 128 K de contexto. El resumen del paper ya da la cifra que interesa: frente al DeepSeek 67B denso, el V2 redujo 93,3% de la caché KV, elevó el rendimiento máximo de generación a 5,76× y además ahorró 42,5% del coste de entrenamiento. El V3 y el R1 heredaron la pieza lista y la llevaron a la escala de 671 B.

entrada h_t
    │
    ▼
c_t^{KV}   vetor latente  (512)
k_t^R      chave RoPE     (64)
    │
    └─ os dois vão para o KV cache  →  576 números
         (~70 KB por token, 61 camadas, FP16)

na inferência as 128 cabeças reconstroem K e V
a partir do latente — sem guardar 128 pares

El tamaño de la caché deja de depender de n_heads. Solo del latente (y del trozo de RoPE que el paper desacopla, los 64). 576 × 61 × 2 bytes = 70.272 bytes ≈ 70 KB/token. Reducción de ~57× frente al MHA de 4 MB.

Descomprimir 128 cabezas por cada token parecía un cálculo extra. Asociatividad de la MatMul:

Q K^T = Q (c^{KV} W^{UK})^T
      = (Q (W^{UK})^T) (c^{KV})^T

W^{UK} e W^{UV} son fijos después del entrenamiento. Se absorben en la matriz de Q y en la de salida W_O antes de servir. En la inferencia la atención opera directamente sobre la caché latente — sin la MatMul intermedia en cada paso. Es el mismo espíritu del arreglo sistólico en el post de la TPU: no cargues lo que puede quedarse pegado al peso.

Por token, lado a lado

Arquitectura K/V Caché/token Factor
MHA par por cabeza ~4 MB 1×
GQA (Llama 3, grupos de 8) par por grupo ~500 KB 8×
MQA 1 par por camada ~31 KB 128× (la calidad cae)
MLA (V3/R1) latente 576 + absorción ~70 KB 57×

Welch señala una generación más de 6× más rápida en R1 frente a un Transformer “completo” en el mismo recorte de memoria: menos byte en la HBM por milisegundo. El contexto 64k–128k deja de exigir un clúster solo para la caché de varios usuarios. En las pruebas de DeepSeek el MLA no solo iguala al MHA — en varias tareas lo supera, funcionando la compresión latente como regularización.

Después del MLA: disperso, y luego híbrido

El MLA resolvió el tamaño de la caché. Quedaba el otro lado de la cuenta: aun comprimido, la atención sigue mirando a todos los tokens anteriores en cada paso — coste cuadrático en la longitud del contexto. DeepSeek atacó esto a continuación.

En noviembre de 2025 salió la DeepSeek-V3.2-Exp, junto con DSA (DeepSeek Sparse Attention). Es atención dispersa de granularidad fina: un módulo indexer elige qué posiciones del historial realmente merecen ser leídas, y solo esas entran en la cuenta. El anuncio promete una gran ganancia en entrenamiento e inferencia de contexto largo manteniendo la calidad de la salida prácticamente idéntica. El MLA no sale de escena — indexer y MLA conviven en el mismo modelo (hasta el punto de haber exigido corrección de diseño del RoPE entre los dos módulos, ese tipo de detalle que solo aparece cuando ambas piezas funcionan juntas de verdad).

En 26 de abril de 2026 llegó el paper del DeepSeek-V4, subtitulado Towards Highly Efficient Million-Token Context Intelligence. Dos MoE, ambos con 1 millones de tokens de contexto:

DeepSeek-V4-Pro     1,6 T parâmetros    49 B ativados
DeepSeek-V4-Flash     284 B             13 B ativados

La atención ahora es híbrida, con dos variantes dispersas trabajando conjuntamente: CSA (Compressed Sparse Attention) y HCA (Heavily Compressed Attention). A esto se suman las Manifold-Constrained Hyper-Connections (mHC) y el optimizador Muon en el entrenamiento. Las versiones finales están en Hugging Face bajo licencia MIT — DeepSeek-V4-Flash-0731 (julio de 2026), DeepSeek-V4-Pro-0813 (agosto de 2026) y una variante multimodal experimental, la V4-Flash-Vision-Exp. El patrón se repite: peso abierto, paper abierto, y la pelea se libra en la arquitectura en lugar del tamaño del cluster.

Qué cambia esto en el Linux de verdad

Servir V3/R1 en local aún pide VRAM de datacenter (671 B en total, 37 B activos). El MLA es lo que hace que la ventana larga sea viable. Una distro con llama.cpp/vLLM reciente ya habla MLA; la cuantización GGUF y el flujo del llama-model o del Ollama cubren los destilados. Cuatro V100 de 16 GB en el servidor reacondicionado no cargan el V3 entero — cargan un 27B/32B. El MLA es la razón por la que un 671 B abierto no hace implosionar la caché en el cluster real.

Línea de tiempo

  • jun/2017 — Attention Is All You Need define el Transformer y, con él, el problema de la caché KV.
  • 2019–2023 — MQA y después GQA reducen la caché intercambiando calidad por memoria; GQA se convierte en estándar en Llama.
  • jul/2023 — DeepSeek se funda en Hangzhou, saliendo del fondo cuantitativo High-Flyer.
  • 07/05/2024 — el paper de DeepSeek-V2 presenta el MLA: 93,3% menos caché KV y 5,76× de rendimiento frente a DeepSeek 67B.
  • diec/2024 — DeepSeek-V3, MoE de 671 B con 37 B activados, hereda el MLA y abre los pesos.
  • ene/2025 — R1 alcanza el nivel de o1 en razonamiento, con pesos abiertos, y se convierte en tema de mercado, no solo de laboratorio.
  • nov/2025 — DeepSeek-V3.2-Exp estrena la DSA, atención dispersa de granularidad fina con módulo indexer.
  • 26/04/2026 — paper de DeepSeek-V4: atención híbrida CSA + HCA, 1 millones de tokens de contexto, Pro con 1,6 T (49 B activados) y Flash con 284 B (13 B activados).
  • jul–ago/2026 — salen las versiones finales V4-Flash-0731 y V4-Pro-0813 en Hugging Face, bajo licencia MIT.

Referencias

El R1 no nació de un clúster mayor. Nació de no cargar 4 MB de K/V por token cuando 70 KB de latente, con la MatMul absorbida en el peso, hacen el mismo trabajo. El Transformer aún tenía ese margen. DeepSeek solo hizo la cuenta.