📚 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:

  1. Pre-training: aprende de Internet (billones de palabras)
  2. SFT (Supervised Fine-Tuning): aprende a conversar con ejemplos
  3. 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.

Inferencia: F Entrenamiento: F + B + Opt

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.

Pesos: 140 GB 2 H100: 160 GB ✅ + Interconexión NVLink

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.

15T tokens ÷ 4M batch = ~3.75M pasos

💡 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.

1 GPU: 80 GB Pesos: 140 GB ❌ No cabe | 2 GPUs: 160 GB ✅
TipoDivideCuándo se usa
DDP (Data Parallel)Datos: cada GPU procesa batch distintoModelos que caben en 1 GPU
TP (Tensor Parallel)Capas: parte la matriz entre GPUsModelos medianos (7-70B)
PP (Pipeline Parallel)Capas: cada GPU tiene capas distintasModelos grandes
FSDPParámetros: sharding de pesos, activaciones, gradientesAlternativa a TP+PP
ZeRO (Stages 1-3)Estados del optimizer, gradientes, parámetrosBase 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

  1. Next-token prediction no busca verdad: el objetivo es maximizar P(token | contexto). No hay penalización por falsedades, solo por baja probabilidad.
  2. Knowledge cutoff: el modelo solo sabe lo que había en sus datos de entrenamiento. No tiene acceso a información nueva.
  3. Overconfidence: para preguntas raras, todas las opciones tienen baja probabilidad, pero softmax siempre elige una con confianza alta.
  4. Memorización vs generalización: hechos frecuentes se memorizan; hechos raros se "reconstruyen" mezclando patrones.
  5. Ambigüedad del contexto: "El banco..." sin más contexto: el modelo distribuye 50/50 entre financiero y parque.

Soluciones parciales

TécnicaCómo ayuda
RAG (Retrieval Augmented Generation)Añadir búsqueda en BD antes de generar
Tool useDejar que el modelo ejecute código (cálculos)
Chain-of-ThoughtForzar razonamiento paso a paso
Temperatura bajaReduce creatividad (pero también variedad)
Verificación externaValidar 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