Phase 10 - Lesson 20
Walkthrough de la Arquitectura de DeepSeek-V3
La Fase 10 · Lección 14 nombró las seis perillas (knobs) arquitectónicas que todo modelo abierto gira. DeepSeek-V3 (diciembre de 2024, 671B de parámetros en total, 37B activos) gira las seis y agrega cuatro más: Multi-Head Latent Attention, balanceo de carga libre de pérdida auxiliar (auxiliary-loss-free load balancing), Multi-Token Prediction y entrenamiento DualPipe. Esta lección lee la arquitectura de DeepSeek-V3 de principio a fin y deduce cada conteo de parámetros a partir della configuración publicada. Al final, podrás explicar por qué la relación 671B/37B es la apuesta correcta y por qué MLA + MoE juntos superan a cualquiera por separado en la frontera.
Type: Learn Languages: Python (stdlib, parameter calculator) Prerequisites: Fase 10 · 14 (walkthroughs de modelos abiertos), Fase 10 · 17 (NSA), Fase 10 · 18 (MTP), Fase 10 · 19 (DualPipe) Time: ~75 minutos
Objetivos de Aprendizaje
- Leer la configuración de DeepSeek-V3 de principio a fin y explicar cada campo en función de las seis perillas de GPT-2 más las cuatro adiciones específicas de DeepSeek.
- Deducir el conteo total de parámetros (671B), el conteo de parámetros activos (37B) y los componentes que contribuyen a cada uno.
- Calcular el impacto en la memoria del cache KV de MLA con un contexto de 128k y comparar con lo que pagaría un modelo denso con los mismos parámetros activos usando GQA.
- Exponer las cuatro innovaciones específicas de DeepSeek (MLA, MTP, enrutamiento libre de pérdida auxiliar, DualPipe) y nombrar qué parte de la pila de arquitectura/entrenamiento aborda cada una.
O Problema
DeepSeek-V3 es el primer modelo abierto de frontera cuya arquitectura es significativamente diferente de la familia Llama. Llama 3 405B es "GPT-2 con seis perillas giradas". DeepSeek-V3 es GPT-2 con las seis perillas más cuatro adicionales. Leer la configuración de Llama 3 es un calentamiento para leer la configuración de DeepSeek, pero la estructura profunda —la forma del bloque de atención, la lógica de enrutamiento, el objetivo en tiempo de entrenamiento— es lo suficientemente diferente como para que necesites un walkthrough aparte.
La recompensa de aprenderlo: el lanzamiento de pesos abiertos de DeepSeek-V3 cambió el significado de "capacidad de frontera" en modelos abiertos. La arquitectura es el plano que muchas ejecuciones de entrenamiento de 2026 están copiando. Comprenderla es fundamental para cualquier rol que involucre el entrenamiento o la inferencia de LLMs de frontera.
El Concepto
El núcleo invariante, de nuevo
DeepSeek-V3 sigue siendo autorregresivo. Sigue apilando bloques de decodificador. Cada bloque sigue teniendo atención más MLP más dos RMSNorms. Sigue usando SwiGLU en el MLP. Sigue usando RoPE. Pre-norma. Embeddings con pesos compartidos (weight-tied embeddings). La misma base que cualquier Llama o Mistral.
El giro: MLA en lugar de GQA
A partir de la Fase 10 · 14, sabes que GQA reduce el cache KV al compartir K y V entre grupos de cabezas Q. Multi-Head Latent Attention (MLA) va más allá: K y V se comprimen en una representación latente compartida de bajo rango (el kv_lora_rank), y luego se descomprimen por cabeza sobre la marcha. El cache KV almacena solo la latente; típicamente 512 floats por token por capa, no 8 x 128 = 1024 floats.
Con un contexto de 128k, DeepSeek-V3 con MLA (una latente compartida c^{KV} por token por capa; K y V se derivan de esta latente mediante proyecciones de subida que pueden ser absorbidas en la multiplicación de matrices subsecuente):
kv_cache = num_layers * kv_lora_rank * max_seq_len * bytes_per_element
= 61 * 512 * 131072 * 2
= 7.6 GB
Una línea de base hipotética de GQA (forma de Llama 3 70B, 8 cabezas KV, dimensión de cabeza 128) pagaría:
kv_cache = 2 * 61 * 8 * 128 * 131072 * 2
= 30.5 GB
MLA es 4 veces más pequeña que un cache GQA al estilo Llama-3-70B con un contexto de 128k.
El tradeoff: MLA agrega un paso de descompresión por computación de atención (por cabeza). La computación adicional es pequeña en comparación con el ancho de banda ahorrado. Victoria neta para la inferencia de contexto largo.
El enrutamiento: balanceo de carga libre de pérdida auxiliar
Los enrutadores MoE deciden qué k principales expertos procesan cada token. Un enrutador ingenuo concentra demasiado trabajo en unos pocos expertos, dejando a los demás inactivos. Corrección estándar: agregar un término de pérdida auxiliar que penalice el desbalance de carga. Esto funciona, pero degrada ligeramente el rendimiento en la tarea principal.
DeepSeek-V3 introduce un esquema libre de pérdida auxiliar. Se agregan términos de sesgo (bias) por experto a los logits del enrutador, los cuales se ajustan durante el entrenamiento mediante una regla simple: si el experto e está sobrecargado, se reduce bias_e; si está subcargado, se aumenta. Sin término de pérdida adicional. El entrenamiento se mantiene limpio. La carga de los expertos permanece balanceada.
Efecto en la pérdida principal: ninguno medible. Efecto en la arquitectura MoE: más limpia, sin hiperparámetros de pérdida auxiliar que ajustar.
El MTP: entrenamiento más denso + borrador gratuito
A partir de la Fase 10 · 18, sabes que DeepSeek-V3 agrega D=1 módulo MTP que predice el token dos posiciones adelante. En la inferencia, el módulo entrenado se reutiliza como un borrador de decodificación especulativa con más del 80% de aceptación. En el entrenamiento, cada estado oculto se supervisa en D+1 = 2 objetivos, proporcionando una señal más densa.
Parámetros: 14B por encima de los 671B principales. Sobrecarga: 2.1%.
El entrenamiento: DualPipe
A partir de la Fase 10 · 19, sabes que DualPipe es un pipeline bidirecional que superpone bloques de ida (forward) y vuelta (backward) con comunicaciones all-to-all entre nodos. A la escala de 2,048 GPUs H800 de DeepSeek-V3, recupera aproximadamente 245 mil horas-GPU que 1F1B habría perdido en burbujas de pipeline.
La configuración, campo por campo
Aquí está la configuración de DeepSeek-V3 (simplificada):
hidden_size: 7168
intermediate_size: 18432 (dense MLP hidden size, used on first few layers)
moe_intermediate_size: 2048 (expert MLP hidden size)
num_hidden_layers: 61
first_k_dense_layers: 3 (first 3 layers use dense MLP)
num_attention_heads: 128
num_key_value_heads: 128 (formally equal to num_heads under MLA, but
the real compression is in kv_lora_rank)
kv_lora_rank: 512 (MLA latent dimension)
num_experts: 256 (MoE expert count per block)
num_experts_per_tok: 8 (top-8 routing)
shared_experts: 1 (always-on shared expert per block)
max_position_embeddings: 163840
rope_theta: 10000.0
vocab_size: 129280
mtp_module: 1 (1 MTP module at depth 1)
Analízala:
hidden_size=7168: dimensión de embedding.num_hidden_layers=61: profundidad total de bloques.first_k_dense_layers=3: los primeros 3 bloques usan un MLP denso de tamaño 18432. Los 58 restantes usan MoE.num_attention_heads=128: 128 cabezas de consulta (query).kv_lora_rank=512: K y V se comprimen a esta dimensión latente y se descomprimen por cabeza.num_experts=256, num_experts_per_tok=8: cada bloque MoE tiene 256 expertos, enruta a los 8 principales.shared_experts=1: por encima de los 256 expertos enrutados, 1 experto siempre activo contribuye a cada token. Piensa en esto como una "base densa" que garantiza que cada token reciba un procesamiento estable.moe_intermediate_size=2048: tamaño oculto del MLP de cada experto. Más pequeño que el MLP denso porque hay 256 de ellos.
Contabilidad de parámetros
El cálculo completo reside en code/main.py. El resumen:
- Embedding:
vocab * hidden = 129280 * 7168 = ~0.93B. - Primeros 3 bloques densos: atención con MLA (
144M por bloque) + MLP denso (260M por bloque) + normas. Alrededor de 1.2B en total. - 58 bloques MoE: atención con MLA (~144M) + 256 expertos cada uno (30M cada uno) + 1 experto compartido (30M) + norma. Total de ~7.95B por bloque, incluyendo todos los expertos. 461B en total para los 58 bloques MoE.
- Módulo MTP: 14B.
Total general: ~476B para la arquitectura principal + 14B de MTP + distintamente, la cifra publicada de 671B tiene en cuenta parámetros estructurales adicionales (tensores de sesgo, componentes específicos de expertos, escalado de expertos compartidos, etc.). El número que reproducimos en la calculadora está dentro del 3-5% del publicado —la diferencia proviene de la contabilidad detallada documentada en el apéndice de la Sección 2 del reporte de DeepSeek.
Parámetros activos por paso hacia adelante (forward):
- Atención: 144M por capa * 61 = 8.8B (todas las capas se ejecutan).
- MLP activo: las primeras 3 capas son densas (3 * 260M = 780M), 58 capas MoE están activas con 8 expertos enrutados + 1 compartido + sobrecarga de enrutamiento. MLP activo por capa: ~260M. Total: 3 * 260M + 58 * 260M = ~15.9B.
- Embedding + normas: 1.2B.
- Total activo: aproximadamente 26B en el núcleo + 14B MTP (entrenado, pero no siempre ejecutado en la inferencia) ≈ 37B.
La relación 671B / 37B
Relación de dispersión de 18x (los parámetros activos representan el 5.5% del total). DeepSeek-V3 es el modelo MoE de frontera más disperso que ha distribuido pesos abiertos. Mixtral 8x7B en la relación 13/47 (28%) es mucho más denso. Llama 4 Maverick en la relación 17B/400B (4.25%) es comparable. La apuesta de DeepSeek: a escala de frontera, más expertos con menor tasa de activación producen mejor calidad por FLOP activo.
Dónde se ubica DeepSeek-V3
| Modelo | Total | Activos | Relación | Atención | Ideas innovadoras |
|---|---|---|---|---|---|
| Llama 3 70B | 70B | 70B | 100% | GQA 64/8 | — |
| Llama 4 Maverick | 400B | 17B | 4.25% | GQA | — |
| Mixtral 8x22B | 141B | 39B | 27% | GQA | — |
| DeepSeek V3 | 671B | 37B | 5.5% | MLA 512 | MLA + MTP + aux-free + DualPipe |
| Qwen 2.5 72B | 72B | 72B | 100% | GQA 64/8 | extensión YaRN |
La secuela: R1, V4
DeepSeek-R1 (2025) es una ejecución de entrenamiento de razonamiento sobre el esqueleto de V3. R1 utiliza la misma arquitectura. Lo que cambió fue la receta de post-entrenamiento (RL a gran escala en tareas verificables), no la arquitectura de pre-entrenamiento.
Se espera que DeepSeek-V4 (si se lanza) conserve MLA + MoE + MTP y agregue DSA (DeepSeek Sparse Attention), el sucesor de NSA de la Fase 10 · 17. El linaje es estable: las innovaciones a nivel de arquitectura se acumulan; cada versión gira nuevas perillas.
Úsalo
code/main.py es el calculador de parámetros especializado para la forma de DeepSeek-V3. Ejecútalo, compara su salida con los números del artículo científico y úsalo en variantes hipotéticas (256 expertos vs 512, top-8 vs top-16, rango MLA 512 vs 1024).
Qué observar:
- Conteo total de parámetros vs los 671B publicados.
- Conteo de parámetros activos vs los 37B publicados.
- Cache KV en contexto de 128k —la comparación entre MLA y GQA.
- Desglose por capa para ver a dónde va realmente el presupuesto de parámetros.
Envíalo
Esta lección produce outputs/skill-deepseek-v3-reader.md. Dado un modelo de la familia DeepSeek (V3, R1 o cualquier variante futura), produce una lectura de arquitectura componente por componente que nombra cada campo de la configuración, deduce los conteos de parámetros por componente e identifica cuál de las cuatro innovaciones específicas de DeepSeek utiliza el modelo.
Ejercicios
Ejecuta
code/main.py. Compara la estimación de parámetros totales de la calculadora con los 671B publicados e identifica de dónde proviene la diferencia. La Sección 2 del artículo tiene el desglose completo.Modifica la configuración para usar MLA rango 256 en lugar de 512. Calcula el tamaño resultante del cache KV con un contexto de 128k. ¿Qué porcentaje de reducción se obtiene y a qué costo para la expresividad por cabeza?
Compara el enrutamiento de DeepSeek-V3 (256 expertos, top-8) con una variante hipotética de (512 expertos, top-8). Los parámetros totales aumentan; los parámetros activos se mantienen iguales. ¿Qué aporta en teoría la capacidad adicional de expertos y cuánto cuesta en la inferencia?
Lee la Sección 2.1 del reporte técnico de DeepSeek-V3 (arXiv:2412.19437) sobre MLA. Explica en tres oraciones por qué las matrices de descompresión K e V pueden ser "absorbidas" en la multiplicación de matrices (matmul) subsecuente para mayor eficiencia en tiempo de inferencia.
DeepSeek-V3 usa entrenamiento en FP8 para la mayoría de las operaciones. Calcula el ahorro de memoria de FP8 vs BF16 para almacenar los pesos de 671B. ¿Cómo se cruza esto con el presupuesto de entrenamiento de 14.8T de tokens?
Términos Clave
| Término | Lo que la gente dice | Lo que realmente significa |
|---|---|---|
| MLA | "Multi-Head Latent Attention" | Comprimir K y V en una latente compartida de bajo rango (kv_lora_rank, típicamente 512), descomprimir por cabeza sobre la marcha; el cache KV almacena solo la latente |
| kv_lora_rank | "Dimensión de compresión de MLA" | El tamaño de la latente compartida para K y V; DeepSeek-V3 usa 512 |
| Primeras k capas densas | "Las primeras capas permanecen densas" | Las primeras capas del modelo MoE omiten el enrutador MoE y ejecutan un MLP denso para estabilidad |
| num_experts_per_tok | "Enrutamiento top-k" | Cuántos expertos enrutados se activan por token; DeepSeek-V3 usa 8 |
| Expertos compartidos | "Expertos siempre activos" | Expertos que procesan cada token independientemente del enrutamiento; DeepSeek-V3 usa 1 |
| Enrutamiento libre de pérdida auxiliar | "Balanceo de carga ajustado por sesgo" | Términos de sesgo por experto ajustados durante el entrenamiento para mantener la carga de expertos balanceada sin agregar un término de pérdida |
| Módulo MTP | "Cabezal de predicción extra" | Bloque transformador que predice t+2 a partir de h^(1) y E(t+1); entrenamiento más denso, borrador gratuito para decodificación especulativa |
| DualPipe | "Pipeline bidirecional" | Esquema de entrenamiento que superpone la computación forward/backward con comunicación all-to-all entre nodos |
| Proporción de parámetros activos | "Dispersión" | active_params / total_params; DeepSeek-V3 alcanza el 5.5% |
| Entrenamiento en FP8 | "Entrenamiento de 8 bits" | Almacenamiento de entrenamiento y muchas operaciones de cómputo en FP8; reduce la memoria a la mitad aproximadamente en comparación con BF16 a un pequeño costo en calidad |
Lectura Adicional
- DeepSeek-AI — DeepSeek-V3 Technical Report (arXiv:2412.19437) — el documento completo de arquitectura, entrenamiento y resultados
- DeepSeek-V3 model card on Hugging Face — archivos de configuración y notas de implementación
- DeepSeek-V2 paper (arXiv:2405.04434) — el antecesor que introdujo MLA
- DeepSeek-R1 paper (arXiv:2501.12948) — el sucesor entrenado para razonamiento sobre la arquitectura de V3
- Native Sparse Attention (arXiv:2502.11089) — la dirección futura para la atención de la familia DeepSeek
- DualPipe repository — la referencia del esquema de entrenamiento |