🎯 Fine-Tuning
Agarrar un modelo que ya funciona y especializarlo para tu problema. La clave: saber cuándo merece la pena y cuándo no.
Especializar un modelo genérico
El fine-tuning es coger un modelo que ya sabe mucho (pre-entrenado) y darle un empujón para que sea experto en algo concreto. No empiezas desde cero — aprovechas todo lo que ya aprendió.
🏫 Analogía: un médico general que se especializa
Un médico sale de la facultad sabiendo de todo un poco (pre-training). Luego hace el MIR en endocrinología (fine-tuning): no vuelve a estudiar anatomía desde cero, sino que profundiza en hormonas, metabolismo, y casos clínicos específicos. Sigue sabiendo de todo, pero ahora es experto en algo.
¿Para qué se usa?
- Estilo y tono: que hable como un médico, abogado, o atención al cliente
- Vocabulario especializado: términos técnicos, jerga de dominio
- Formato de salida: que siempre devuelva JSON, o un informe clínico estructurado
- Corregir comportamientos: que no alucine en ciertos temas, que siga un protocolo
- Adaptación a un idioma o cultura: español clínico, terminología local
⚔️ Generalista vs Fine-Tuning
Desde 2024 hay una discusión abierta: ¿merece la pena fine-tunear cuando los modelos generalistas son cada vez más capaces?
⚡ Ejemplo real (2025-2026): Varios papers muestran que GPT-4o, Claude Sonnet 4 o Gemini 2.5, sin ningún fine-tuning, igualan o superan a modelos fine-tuneados más pequeños (LLaMA 3 8B FT, Mistral 7B FT) en benchmarks médicos, legales y de código. ¿Por qué? Porque el pre-training de estos modelos grandes ya incluyó suficientes datos del dominio.
¿Cuándo gana el generalista?
- Tareas estándar: responder preguntas generales, resumir, traducir
- Conocimiento muy cubierto: medicina general, derecho básico, programación común
- Cuando puedes dar buen contexto: si en el prompt le pones 10 ejemplos (few-shot), a menudo iguala al fine-tuning sin el coste
- Cuando necesitas versatilidad: un solo modelo que haga de todo, no 10 modelos especializados
¿Cuándo gana el fine-tuning?
- Formato y estructura rígida: necesitas que la salida siga exactamente un esquema (informes clínicos, formularios legales)
- Vocabulario muy específico: jerga técnica que los modelos generalistas mezclan o ignoran
- Latencia / coste: un modelo 7B fine-tuneado es más barato y rápido que llamar a GPT-4o cada vez
- Privacidad / regulación: no puedes mandar datos a una API externa (GDPR, HIPAA)
- Consistencia: el fine-tuning da respuestas más predecibles; un API externa puede cambiar de comportamiento sin avisar
| Factor | Generalista grande | Fine-tune pequeño |
|---|---|---|
| Coste por consulta | Alto ($3-15/1M tokens) | Bajo ($0.05-0.5/1M tokens) |
| Latencia | 500-3000ms | 50-500ms |
| Precisión dominio | Alta (si el tema es común) | Muy alta (si el dataset es bueno) |
| Privacidad | ❌ Datos salen de tu infra | ✅ Todo local |
| Actualización | Automática (el proveedor mejora) | Tú mantienes el modelo |
| Inversión inicial | €0 | Horas de GPU + crear dataset |
| Riesgo | Bajo (pagas por uso) | Medio (puede no mejorar) |
💡 La clave: No pienses en "fine-tuning SÍ o NO". Piensa en "¿qué me da más valor por mi tiempo y dinero?". Muchas veces, 3 prompts bien diseñados + RAG te dan el 90% del resultado sin tocar un peso.
El debate técnico
La comunidad está dividida. Por un lado, papers como "LIMA: Less Is More for Alignment" (2023) mostraron que con solo 1,000 ejemplos bien curados puedes igualar modelos fine-tuneados con cientos de miles. Por otro, "The False Promise of Fine-Tuning" y estudios posteriores (2025) muestran que el fine-tuning apenas aporta cuando el modelo base ya es muy bueno.
Papers clave
| Paper | Año | Hallazgo principal |
|---|---|---|
| LIMA | 2023 | 1,000 ejemplos curados bastan para alinear un modelo. La calidad > cantidad. |
| The False Promise of Fine-Tuning | 2024 | Fine-tuning en dominios muy específicos apenas mejora vs prompting cuidadoso. El modelo base ya sabe la mayor parte. |
| Generalist vs Specialist (DeepMind) | 2024 | Modelos generalistas grandes igualan a especialistas en casi todos los benchmarks cuando se les da contexto suficiente. |
| Data-Efficient Fine-Tuning | 2025 | Con ~500 ejemplos bien seleccionados se obtiene el 95% de la ganancia. El resto son rendimientos decrecientes. |
| Fine-Tuning or Retrieval? | 2025 | Compara RAG vs FT en dominios con conocimiento factual: RAG gana en actualización y precisión; FT gana en consistencia de formato y latencia. |
| MedFT Benchmark (Stanford) | 2026 | En medicina, GPT-4o sin FT iguala o supera a modelos médicos fine-tuneados en 14 de 18 sub-benchmarks. Solo pierde en extracción de datos estructurados de informes. |
La conclusión de estos papers no es "fine-tuning no sirve". Es: "asegúrate de que realmente lo necesitas antes de invertir". El fine-tuning sigue siendo la mejor herramienta para:
- Control de formato estricto — el prompting puede fallar, el fine-tuning es más robusto
- Reducción de costes operativos — un modelo pequeño fine-tuneado te ahorra $/mes si tienes alto volumen
- Adaptación a dominios ultra-específicos — jerga médica muy local, notación científica, legislación de un país concreto
- Offline / privacidad — cuando los datos no pueden salir de tu infraestructura
¿Por qué los generalistas ganan?
Hay una razón estructural: los modelos grandes (70B+) tienen más capacidad de representación interna. Cuando haces fine-tuning a un modelo 7B, estás reasignando parámetros limitados. El modelo 70B ya tiene espacio para representar casi cualquier dominio. El fine-tuning en un modelo pequeño es un juego de suma cero: ganas en el dominio objetivo, pero pierdes capacidad general.
Catastrophic Forgetting
Problema: al fine-tunear un modelo 7B en un dominio específico,
pierde capacidad en tareas generales.
Ejemplo medido (LLaMA 3 8B FT en código médico):
- Precisión en diagnóstico: +12%
- Precisión en programación: -8%
- Precisión en razonamiento general: -5%
Solución parcial:
- EPOCHS bajos (1-3)
- Learning rate pequeño (1e-5 a 5e-5)
- Mezclar datos del dominio original (~10-20%) en el dataset de FT
- Usar LoRA en vez de full FT Scaling Laws del fine-tuning
Los papers de Kaplan (2020) y Chinchilla (2022) mostraron leyes de escalado para pre-training. Para fine-tuning, las leyes son diferentes:
Ganancia ~ (dataset_size)^0.3 × (model_size)^(-0.2)
Implicaciones:
1. Modelos más grandes necesitan MÁS datos de FT para ver mejora
(porque ya saben más, el margen de mejora es menor)
2. Con pocos datos (<1,000 ejemplos), los modelos pequeños mejoran más
relativamente, pero los grandes parten de más arriba
3. El rendimiento decreciente llega rápido: ~500 ejemplos → 95% de la mejora 🔧 Técnicas: Full FT → LoRA → QLoRA
Hay tres formas principales de fine-tunear un modelo. De más a menos coste:
🔴 Full Fine-Tuning
Actualizas todos los parámetros del modelo. Resultado: virtualmente un modelo nuevo. Coste: necesitas GPUs múltiples (ej: 8× A100 para un 7B), semanas de entrenamiento. Solo viable para empresas con presupuesto.
🟡 LoRA (Low-Rank Adaptation)
Congelas el modelo original y añades pequeños adaptadores entrenables. Es como poner pegatinas sobre el modelo: el original se queda igual, solo cambian las pegatinas. Resultado: un fichero de ~10-100 MB que puedes distribuir. Entrenable en una GPU de consumo (RTX 3090/4090).
🟢 QLoRA
Igual que LoRA, pero el modelo base se carga en 4 bits (cuantizado). Esto reduce la VRAM necesaria drásticamente: un modelo 70B que normalmente necesita ~140 GB cabe en una sola GPU de 48 GB (A6000). Pierdes un 1-2% de precisión respecto a LoRA, pero entrenas en hardware que ya tienes.
| Técnica | Parámetros entrenables | VRAM (7B) | VRAM (70B) | Pérdida precisión |
|---|---|---|---|---|
| Full FT | 100% (~7B) | ~60 GB | ~500 GB | 0% |
| LoRA | ~0.1-1% | ~16 GB | ~140 GB | <1% |
| QLoRA | ~0.1-1% | ~6 GB | ~48 GB | ~1-2% |
💡 Para el 99% de los casos prácticos, LoRA o QLoRA son suficientes. El Full FT solo tiene sentido cuando necesitas cambiar el comportamiento fundamental del modelo (nuevo vocabulario, nuevo idioma no soportado, o destilar conocimiento de un modelo grande a uno pequeño).
LoRA en detalle
Idea matemática:
W' = W + ΔW
Donde W es la matriz de pesos original (congelada).
En vez de aprender ΔW (que tiene el mismo tamaño que W),
LoRA lo descompone en:
ΔW = B × A
Donde:
- B es una matriz de tamaño (d × r)
- A es una matriz de tamaño (r × k)
- r es el rango (típicamente 4, 8, 16, 64)
- r << min(d, k)
Ejemplo: W es 4096 × 4096 (~16.8M parámetros)
Con r=8: B=4096×8, A=8×4096 → ~65,536 parámetros
Reducción: 16.8M → 65K (256× menos) Hiperparámetros clave
| Parámetro | Qué controla | Valor típico | Efecto |
|---|---|---|---|
r | Rango de la adaptación | 8-16 (pequeños), 32-64 (grandes) | r↑ = más capacidad = más riesgo de overfitting |
alpha | Escala de la adaptación | 16-32 | alpha/r ≈ learning rate efectivo |
dropout | Regularización | 0.05-0.1 | Previene overfitting con datasets pequeños |
target_modules | Qué capas adaptar | q_proj, v_proj (atención) | Añadir FFN mejora para tareas de formato |
Variantes modernas
| Técnica | Diferencia con LoRA | Cuándo usarla |
|---|---|---|
| DoRA | Descompone en magnitud + dirección (como WeightDecay) | Cuando necesitas más precisión que LoRA (+1-2%) sin aumentar r |
| VeRA | Comparte matrices A/B entre capas, entrena vectores pequeños | Cuando tienes muchos modelos fine-tuneados (reducción de almacenamiento) |
| PiSSA | Inicializa los adaptadores con SVD del modelo base | Cuando el dataset es muy pequeño (<200 ejemplos) |
| LoRA-XS | Adaptadores aún más pequeños que LoRA | Cuando cada MB cuenta (edge, mobile) |
QLoRA: cuantización + LoRA
QLoRA = Base model en NF4 (4-bit NormalFloat) + LoRA en BFloat16
Ahorro de VRAM:
- Modelo 70B en FP16: 140 GB → no cabe en ninguna GPU single
- Modelo 70B en NF4: 35 GB → cabe en A6000 (48 GB) o 2× RTX 4090
- Modelo 7B en NF4: 3.5 GB → cabe en cualquier GPU
Overhead del adaptador LoRA (BF16):
- r=16 en q_proj+v_proj+o_proj+gate_up_proj: ~33M parámetros
- ≈ 66 MB adicionales (en BF16)
Pérdida de precisión por cuantización NF4:
- Perplexity: +0.5-1.0 vs FP16
- Precisión en benchmark: -0.5% a -2%
- En la práctica: apenas perceptible para la mayoría de tareas Métrica de eficiencia
Eficiencia de fine-tuning = mejora en benchmark / VRAM-usada
Full FT en 7B: mejora +8%, VRAM 60 GB → 0.13 ptos/GB
LoRA en 7B: mejora +7%, VRAM 16 GB → 0.44 ptos/GB
QLoRA en 7B: mejora +6.5%, VRAM 6 GB → 1.08 ptos/GB
QLoRA es ~8× más eficiente que Full FT por GB de VRAM. 🧭 Marco de decisión
Antes de fine-tunear, pregúntate esto en orden:
Paso 1: ¿Lo puedes hacer con prompting?
Prueba primero con el mejor modelo que puedas pagar (GPT-4o, Claude Sonnet 4, Gemini 2.5) y dale 3-5 ejemplos en el prompt (few-shot). Si funciona, no necesitas fine-tuning.
Paso 2: ¿Es un problema de conocimiento o de formato?
Si el modelo no sabe algo (información nueva, tus datos) → **RAG**. Si el modelo sabe pero no lo expresa como quieres (tono, estructura, vocabulario) → **fine-tuning**.
Paso 3: ¿Puedo usar un modelo local con RAG?
Con modelos como LLaMA 3.1 8B, Mistral Small 3.1 o Qwen 2.5 7B, bien prompteados + RAG, consigues resultados sorprendentes. Si esto cubre tu caso, no necesitas fine-tuning.
Paso 4: Fine-tuning
Ya has descartado prompting, RAG, y modelos locales. Ahora sí. Empieza con QLoRA y un dataset pequeño (~200-500 ejemplos). Si ves mejora, escala.
🟢 QLoRA con r=8, 500 ejemplos, 3 epochs → prueba
🧠 Regla de oro: El fine-tuning es el último recurso, no el primero. Cada capa de abstracción (prompt → few-shot → RAG → FT) cuesta más tiempo y dinero. Empieza por lo más barato y escala solo si es necesario.
Árbol de decisión técnico
¿Necesitas mejorar el modelo?
├── ¿El problema es que NO SABE algo?
│ ├── ¿Está en tus documentos/BD? → RAG
│ └── ¿No está en ninguna parte? → Fine-tuning o pre-training continuo
│
├── ¿El problema es que SABE pero RESPONDE MAL?
│ ├── ¿Falla el formato/estructura? → Fine-tuning
│ ├── ¿Falla el tono/estilo? → Fine-tuning (o system prompt bien hecho)
│ └── ¿Falla en precisión factual? → RAG (probablemente el modelo alucina)
│
├── ¿El problema es COSTE/LATENCIA?
│ ├── ¿Usas API externa cara? → Fine-tunear modelo pequeño local
│ └── ¿Latencia alta? → Fine-tunear modelo pequeño local
│
├── ¿El problema es PRIVACIDAD?
│ └── ¿No puedes mandar datos a API? → Modelo local (con o sin FT)
│
└── ¿El problema es CONSISTENCIA?
└── ¿El API externa cambia sin avisar? → Fine-tunear modelo pequeño Checklist antes de fine-tunear
- ✅ Dataset mínimo viable: 200-500 pares (instrucción, respuesta ideal). Si no tienes esto, no empieces.
- ✅ Prueba sin FT: ¿Has probado few-shot con 5 ejemplos en el prompt? ¿Y con RAG?
- ✅ Evaluación antes/después: Define 20-50 casos de prueba ANTES de fine-tunear. Si no puedes medir mejora, no sabrás si funcionó.
- ✅ Baseline: Mide cómo responde el modelo base (sin FT) a esos casos. Si ya acierta el 90%, no necesitas FT.
- ✅ Presupuesto de GPU: ¿Tienes acceso a GPU para entrenar? ¿Cuántas horas/dinero estás dispuesto a invertir?
- ✅ Mantenimiento: ¿Actualizarás el dataset cuando el dominio cambie? El FT no es "una vez y olvidar".
⚠️ Error común: Gente que fine-tunea un modelo 7B con 100 ejemplos y espera que milagrosamente sepa responder como GPT-4. El fine-tuning no es magia. Si el modelo base no tiene el conocimiento, el FT no lo va a inventar — solo va a reordenar lo que ya sabe.
Estrategia de fine-tuning para producción
1. Baseline: prompting + RAG
Mide precisión, latencia y coste del modelo base con prompting cuidadoso y RAG. Esto es tu suelo. Si el FT no mejora esto significativamente, no lo implementes.
2. Iteración ultra-rápida
Fase 1 — Prueba de concepto (1 hora, en Colab o GPU local):
- 50-100 ejemplos
- QLoRA r=8
- 1 epoch
- ¿Mejora apreciable? → Fase 2
- ¿No mejora? → Revisa el dataset o abandona FT
Fase 2 — Validación (1 día):
- 200-500 ejemplos curados
- QLoRA r=16
- 3 epochs con early stopping
- Evalúa contra el baseline
- ¿Mejora >5%? → Fase 3
- ¿Mejora <5%? → Probablemente no merece la pena
Fase 3 — Producción:
- Dataset final: 500-2000 ejemplos
- LoRA r=32 (o DoRA si necesitas más precisión)
- 3-5 epochs
- Evalúa en hold-out set
- Despliega + monitoriza 2. Estrategias avanzadas
| Técnica | Para qué sirve |
|---|---|
| Curriculum FT | Empieza con ejemplos fáciles, termina con difíciles. Mejora convergencia. |
| Data Augmentation | Genera variaciones sintéticas de tus ejemplos (con un modelo grande) para aumentar el dataset. |
| Multi-task FT | Entrena varias habilidades a la vez (formato + tono + precisión) en un solo paso. |
| DPO / ORPO | En vez de imitar respuestas, aprende a preferir unas sobre otras. Mejor para alineamiento. |
| Merging | Fusiona varios adaptadores LoRA entrenados para distintas tareas en uno solo (model merging). |