📚 Entrenamiento
Cómo se ajustan los millones de parámetros para que el modelo aprenda a predecir la siguiente palabra, y por qué a veces se inventa cosas.
Ajustar los parámetros
El entrenamiento es el proceso de ajustar los millones de parámetros para que el modelo acierte la siguiente palabra.
💡 Imagina a un estudiante (el modelo) que tiene que hacer un examen de rellenar la palabra que falta en millones de frases. Cada vez que falla, ajusta ligeramente sus "conexiones cerebrales" (parámetros) para acertar la próxima vez.
3 fases del entrenamiento moderno:
- Pre-training: aprende de Internet (billones de palabras)
- SFT (Supervised Fine-Tuning): aprende a conversar con ejemplos
- RLHF / GRPO: aprende qué respuestas prefiere un humano
Pre-training (Next Token Prediction)
Dataset: CommonCrawl + libros + artículos + código (~15T tokens)
Objetivo: predecir el siguiente token
Cada batch:
1. Forward: calcula P(token_i | token_{<i}) para todos los tokens
2. Loss: cross-entropy entre predicción y token real
3. Backward: gradiente de la pérdida respecto a cada parámetro
(regla de la cadena, backpropagation)
4. Optimizer step: ajustar parámetros (AdamW)
Coste estimado:
LLaMA 3 70B: ~6.4M GPU-hours en H100 (~3 meses con 3000 GPUs)
Coste: ~$50-100M USD Secuencia completa en cada paso:
input_ids → Forward → logits → Loss → loss_value labels → Backward → gradients → Optimizer → pesos w'
SFT (Fine-tuning supervisado)
Dataset: pares (instrucción, respuesta ideal) — ~100k-1M ejemplos
Objetivo: que el modelo imite las respuestas correctas
Ejemplo:
Input: "Explica la fotosíntesis en una frase"
Target: "Las plantas convierten luz solar en energía química"
Coste: horas o días en una GPU (vs meses para pre-training) RLHF / GRPO (Alineamiento)
1. Generar varias respuestas para un prompt
2. Un reward model (modelo entrenado para evaluar) las puntúa
3. El LLM se ajusta para maximizar la recompensa esperada
(PPO: Proximal Policy Optimization, o GRPO: Group Relative Policy Opt.)
GRPO (DeepSeek R1):
- Genera un grupo de respuestas para el mismo prompt
- Puntúa cada una
- Actualiza el modelo para favorecer las mejor puntuadas
- No necesita reward model externo (más eficiente que RLHF) Training vs Inference cost
Training:
- Forward + Backward + Optimizer step
- Necesita almacenar activaciones (muchísima VRAM)
- Necesita almacenar gradientes
- Necesita almacenar estados del optimizer (Adam: 2× params)
- Ej: LLaMA 70B training necesita ~500 GB de VRAM
Inference:
- Solo Forward
- No necesita gradientes ni optimizer states
- Ej: LLaMA 70B inference en Q4_K_M necesita ~40+5 GB
- Ratio: training cuesta 10-20× más que inference 💰 ¿Por qué es tan caro entrenar?
Que un modelo como LLaMA 3 70B cueste ~$50-100 millones entrenarlo no es porque las GPUs sean caras (que también). Es por tres razones que se multiplican entre sí:
1️⃣ Cada paso hace forward + backward
En inferencia el modelo solo hace forward (calcular la siguiente palabra). En entrenamiento hace forward + backward (calcular el error y ajustar pesos). Eso duplica el coste computacional por paso, y además hay que guardar en memoria los valores intermedios del forward para usarlos en el backward.
2️⃣ No caben en una GPU
Un modelo 70B en FP16 ocupa 140 GB solo en pesos. La H100 más cara tiene 80 GB. Necesitas múltiples GPUs y estas tienen que comunicarse entre sí constantemente (cada paso, todos los pesos se sincronizan). Esa comunicación tiene un coste en tiempo y energía.
3️⃣ Son millones de pasos sobre billones de tokens
No es que entrenes una vez. Entrenas el modelo sobre ~15 billones de tokens, en lotes de ~4 millones cada uno. Son ~3-4 millones de pasos. Cada paso cuesta ~0.1-0.5 segundos aunque tengas miles de GPUs. Multiplica: pasos × GPUs × tiempo = factura astronómica.
💡 La fórmula mental: Coste = Parámetros × Tokens × (F+B) / Eficiencia. Si doblas los parámetros, no doblas el coste: lo multiplicas por ~4 (porque necesitas más GPUs, más comunicación, y más tokens para llenar esos parámetros).
Desglose de coste por modelo
| Modelo | Params | Tokens | GPU-hours | GPUs | Coste estimado |
|---|---|---|---|---|---|
| GPT-3 (2020) | 175B | 300B | ~3.6M A100 | ~10,000 | ~$4.6M |
| LLaMA 2 70B (2023) | 70B | 2T | ~1.7M A100 | ~2,000 | ~$2-3M |
| LLaMA 3 70B (2024) | 70B | 15T | ~6.4M H100 | ~3,000 | ~$50-100M |
| LLaMA 3 405B (2024) | 405B | 15T | ~30M H100 | ~16,000 | ~$200-300M |
| DeepSeek V3 (2024) | 671B MoE | 14.8T | ~2.8M H800 | ~2,048 | ~$5.6M |
| Gemini 1.0 Ultra (2023) | ? (~1T) | ? (~15T) | ~? TPUv4 | ~? (TPU pods) | ~$200M+ (est.) |
| GPT-4 (2023) | ? (~1.8T MoE) | ? (~13T) | ~? (~2-3× GPT-3) | ~25,000 (est.) | ~$100-200M |
📊 Dato curioso: DeepSeek V3 tiene 671B parámetros (más que LLaMA 3 405B) pero costó ~$5.6M frente a los ~$200-300M de LLaMA 3 405B. ¿Cómo? Es MoE (Mixture of Experts): de sus 671B parámetros, solo ~37B están activos por token. Además optimizaron al límite la eficiencia de comunicación y usaron H800 (versión china de H100, más barata).
¿Por qué LLaMA 3 costó tanto más que LLaMA 2?
El modelo 70B pasó de 2T a 15T tokens (7.5× más datos). El coste de entrenamiento escala con parámetros × tokens. Si multiplicas los tokens por 7.5, multiplicas el coste por ~7.5. Pero además LLaMA 3 usó H100 (más caras que A100) y entrenaron durante más tiempo para maximizar la calidad. La moraleja: entrenar con más datos es la forma más simple de mejorar el modelo, pero la factura crece en la misma proporción.
Desglose matemático del coste
Coste de entrenar un modelo Transformer denso (no MoE):
FLOPs totales ≈ 6 × N × D
Donde:
N = número de parámetros del modelo
D = número de tokens de entrenamiento
6 = factor constante (3 para forward + 3 para backward)
Ejemplo: LLaMA 3 70B con 15T tokens
FLOPs = 6 × 70×10⁹ × 15×10¹² = 6.3 × 10²⁴ FLOPs
Para ponerlo en perspectiva:
- Una H100 hace ~3.9 × 10¹⁵ FLOP/s en FP16 (3.9 PFLOPS)
- Tiempo teórico: 6.3e24 / 3.9e15 = 1.6 × 10⁹ segundos = ~50 años en 1 GPU
- Con 3,000 GPUs: 50 años / 3000 = ~6 días... en teoría
- En realidad: ~3 meses (eficiencia ~50%) MFU: Model FLOPs Utilization
Las GPUs nunca alcanzan su rendimiento teórico en la práctica. El MFU mide qué porcentaje del rendimiento máximo estás obteniendo realmente:
MFU = FLOPs reales / (Rendimiento pico GPU × tiempo)
Valores típicos en entrenamiento de LLMs:
- Tensor Parallel sin optimizar: 30-40%
- Con Flash Attention + kernel fusion: 45-55%
- Con optimización extrema (DeepSeek, NVIDIA): 60-70%
- Teórico máximo (solo matmul): ~80%
¿Por qué no se llega al 100%?
1. Comunicación entre GPUs (all-reduce, all-gather)
2. Operaciones no-matmul (LayerNorm, Softmax, dropout)
3. Cuellos de botella de memoria (carga de datos)
4. Overhead del framework (PyTorch, JAX)
DeepSeek V3 consiguió ~55% MFU en H800 gracias a:
- Kernel fusion (DualPipe)
- Comunicación asíncrona (solapa compute con network)
- Particionado manual de MoE Desglose de VRAM en entrenamiento
Para un modelo de 70B en FP16 entrenando con AdamW:
| Componente | Fórmula | VRAM (70B) |
|--------------------|------------------------|-----------|
| Pesos (FP16) | 2 × N | 140 GB |
| Gradientes (FP16) | 2 × N | 140 GB |
| Optimizer AdamW | 4 × N (2× estados FP32)| 280 GB |
| Activaciones | variable (batch × seq) | ~50-100 GB|
| Overhead | buffers, cuDNN, etc. | ~10-20 GB |
| **Total** | | **~620 GB**|
Con ZeRO-3 (sharding de todo entre GPUs):
- Con 8 GPUs: ~77 GB / GPU ✅ cabe en H100
- Con 4 GPUs: ~155 GB / GPU ❌ no cabe
- Por eso LLaMA 3 70B usó 3,000 GPUs: necesitaban ~200 GB/GPU con
margen para activaciones y batch grande El coste del carbono
| Modelo | MWh | Toneladas CO₂ | Equivalente |
|---|---|---|---|
| GPT-3 (175B) | ~1.3 GWh | ~550 tCO₂ | 120 coches / año |
| LLaMA 3 70B | ~11 GWh | ~4,700 tCO₂ | 1,000 coches / año |
| LLaMA 3 405B | ~50 GWh | ~21,000 tCO₂ | 4,500 coches / año |
Por eso hay un movimiento creciente hacia entrenamientos más eficientes: modelos más pequeños con más datos (Chinchilla optimal), cuantización durante entrenamiento, y el auge de arquitecturas MoE que activan solo una fracción de los parámetros.
Paralelismo de entrenamiento
Los modelos más grandes no caben en una sola GPU. Por eso se usan técnicas de paralelismo para distribuir el trabajo entre muchas GPUs.
🏗️ Analogía: construir una casa con un equipo
Una sola persona (1 GPU) puede construir una casa pequeña. Pero para construir un rascacielos (modelo 70B+), necesitas un equipo coordinado:
- Data Parallel — Varios equipos construyen casas idénticas en paralelo, cada una con sus propios materiales. Se comparan notas al final del día.
- Tensor Parallel — Una pared se construye entre varios albañiles, cada uno haciendo una sección al mismo tiempo.
- Pipeline Parallel — Los cimientos los hace un equipo, las paredes otro, el tejado otro. En cadena.
- FSDP / ZeRO — En lugar de que cada equipo tenga su propio almacén de materiales, comparten un almacén centralizado para ahorrar espacio.
¿Por qué es necesario?
Un modelo 70B en FP16 ocupa ~140 GB de VRAM solo en pesos. Una H100 tiene 80 GB. Ni siquiera los pesos caben en una GPU.
| Tipo | Divide | Cuándo se usa |
|---|---|---|
| DDP (Data Parallel) | Datos: cada GPU procesa batch distinto | Modelos que caben en 1 GPU |
| TP (Tensor Parallel) | Capas: parte la matriz entre GPUs | Modelos medianos (7-70B) |
| PP (Pipeline Parallel) | Capas: cada GPU tiene capas distintas | Modelos grandes |
| FSDP | Parámetros: sharding de pesos, activaciones, gradientes | Alternativa a TP+PP |
| ZeRO (Stages 1-3) | Estados del optimizer, gradientes, parámetros | Base de FSDP |
En la práctica, los entrenamientos de modelos grandes combinan varias técnicas simultáneamente. Por ejemplo, LLaMA 3 405B usó TP=8, PP=8, DP=1024 en 16,384 GPUs H100, con comunicación a través de NVLink y redes InfiniBand.
¿Por qué alucinan?
Los LLMs no saben qué es verdad. Solo saben qué palabra es más probable estadísticamente.
⚠️ Cuando un LLM dice algo falso con total confianza, es porque esa secuencia de palabras era probable según su entrenamiento. No "miente" porque no tiene intención. Alucina.
Ejemplo:
Prompt: "¿Qué tratado firmó Napoleón con la reina de Marte?"
El modelo podría decir: "El Tratado de Olympus Mons"
porque "Tratado de..." + "Napoleón" + "Marte" → secuencia plausible estadísticamente
Causas técnicas
- Next-token prediction no busca verdad: el objetivo es maximizar P(token | contexto). No hay penalización por falsedades, solo por baja probabilidad.
- Knowledge cutoff: el modelo solo sabe lo que había en sus datos de entrenamiento. No tiene acceso a información nueva.
- Overconfidence: para preguntas raras, todas las opciones tienen baja probabilidad, pero softmax siempre elige una con confianza alta.
- Memorización vs generalización: hechos frecuentes se memorizan; hechos raros se "reconstruyen" mezclando patrones.
- Ambigüedad del contexto: "El banco..." sin más contexto: el modelo distribuye 50/50 entre financiero y parque.
Soluciones parciales
| Técnica | Cómo ayuda |
|---|---|
| RAG (Retrieval Augmented Generation) | Añadir búsqueda en BD antes de generar |
| Tool use | Dejar que el modelo ejecute código (cálculos) |
| Chain-of-Thought | Forzar razonamiento paso a paso |
| Temperatura baja | Reduce creatividad (pero también variedad) |
| Verificación externa | Validar hechos contra fuentes externas |
Métrica de calibración
La calibración mide si la confianza del modelo coincide con su precisión.
Perfect calibration: cuando el modelo dice P=0.9, acierta el 90% de las veces.
Expected Calibration Error (ECE) = Σ |accuracy(bin) - confidence(bin)|
Ejemplo: de todas las veces que el modelo asigna P=0.7, solo acierta el 40%
→ ECE = |0.4 - 0.7| = 0.3 (mal calibrado) Investigación sobre alucinaciones (2025-2026)
- Model editing: modificar pesos específicos para corregir hechos falsos (ROME, MEMIT, FT)
- Contrastive decoding: restar la distribución de un modelo más pequeño para reducir tokens "demasiado obvios"
- Entropy-based detection: detectar alucinaciones midiendo la entropía de la distribución de atención