Skip to content

Fine-tuning de Modelos de Lenguaje

El fine-tuning es el proceso de re-entrenar un modelo de lenguaje pre-entrenado con datos específicos para adaptar su comportamiento, estilo o conocimiento a un dominio concreto. En lugar de entrenar un modelo desde cero (lo que requiere miles de millones de ejemplos y millones de dólares), el fine-tuning parte de un modelo existente y lo ajusta con un dataset mucho más pequeño y enfocado.

El espectro de personalización de LLMs

Existen varias formas de adaptar un LLM a tus necesidades, ordenadas de menor a mayor esfuerzo:

  1. Prompt engineering: Diseñar instrucciones precisas en el prompt. Sin coste de entrenamiento, pero limitado por la ventana de contexto.
  2. Few-shot learning: Incluir ejemplos en el prompt para guiar el comportamiento. Efectivo para muchos casos pero consume tokens.
  3. RAG (Retrieval-Augmented Generation): Dar al modelo acceso a documentos externos. Ideal para conocimiento específico y actualizado. (Ver RAG)
  4. Fine-tuning: Re-entrenar el modelo con datos propios. Cambia el comportamiento fundamental del modelo.
  5. Pre-entrenamiento continuo: Entrenar el modelo con grandes volúmenes de texto de dominio antes del fine-tuning. Para dominios muy especializados.

Cuándo hacer fine-tuning

El fine-tuning tiene sentido cuando:

  • Necesitas un estilo o tono específico: El modelo debe responder consistentemente como un asistente médico, un bot de soporte técnico o con la voz de tu marca.
  • Quieres mejorar en una tarea específica: Clasificación de texto, extracción de entidades, generación de código en un lenguaje concreto.
  • El formato de salida debe ser preciso: Generar JSON estructurado, SQL, o formatos propietarios de forma consistente.
  • Prompt engineering no es suficiente: Cuando ni los mejores prompts logran el comportamiento deseado.
  • Necesitas reducir latencia y coste: Un modelo fine-tuned más pequeño puede igualar a un modelo grande con prompts elaborados, usando menos tokens.

El fine-tuning NO es ideal para:

  • Incorporar conocimiento que cambia frecuentemente (mejor usar RAG)
  • Datos que el modelo no debe memorizar (riesgo de filtración)
  • Cuando tienes muy pocos ejemplos (menos de 50-100)

Tipos de fine-tuning

Supervised Fine-Tuning (SFT)

El tipo más común. Se entrena el modelo con pares de entrada-salida:

json
{"messages": [
  {"role": "system", "content": "Eres un asistente médico."},
  {"role": "user", "content": "¿Qué es la hipertensión?"},
  {"role": "assistant", "content": "La hipertensión arterial es una condición en la que la presión de la sangre contra las paredes de las arterias es consistentemente elevada..."}
]}

El modelo aprende a generar las respuestas del asistente dado el contexto. Cuanto más diversos y de calidad sean los ejemplos, mejor será el resultado.

RLHF (Reinforcement Learning from Human Feedback)

Después del SFT, evaluadores humanos califican múltiples respuestas del modelo. Se entrena un modelo de recompensa con estas preferencias, y luego se usa aprendizaje por refuerzo (PPO) para optimizar el modelo. Es la técnica que usan OpenAI, Anthropic y Google para alinear sus modelos con las preferencias humanas.

DPO (Direct Preference Optimization)

Alternativa simplificada a RLHF que no necesita un modelo de recompensa separado. Entrena directamente con pares de respuestas preferida/rechazada:

json
{
  "prompt": "Explica la fotosíntesis",
  "chosen": "La fotosíntesis es el proceso por el cual las plantas...",
  "rejected": "Fotosíntesis: proceso bioquímico autótrofo oxigénico..."
}

Más estable y fácil de implementar que RLHF, con resultados comparables.

Instruction Tuning

Variante de SFT enfocada en enseñar al modelo a seguir instrucciones. Se entrena con miles de ejemplos de instrucciones diversas y sus respuestas correctas. Es lo que convierte un modelo base (que solo predice la siguiente palabra) en un asistente útil.

Técnicas de fine-tuning eficiente (PEFT)

Entrenar todos los parámetros de un modelo grande (full fine-tuning) es extremadamente costoso. Las técnicas PEFT (Parameter-Efficient Fine-Tuning) entrenan solo una pequeña fracción de los parámetros:

LoRA (Low-Rank Adaptation)

La técnica más popular. En lugar de modificar los pesos originales del modelo, LoRA añade matrices de bajo rango a las capas del transformer. Solo se entrenan estas matrices nuevas (típicamente 0.1-1% del total de parámetros).

Ventajas:

  • Reduce la memoria necesaria en 10-100x
  • El entrenamiento es mucho más rápido
  • Se pueden guardar y intercambiar adaptadores LoRA sobre el mismo modelo base
  • Resultados muy cercanos al full fine-tuning

Ejemplo de configuración LoRA:

python
from peft import LoraConfig

config = LoraConfig(
    r=16,              # Rango de las matrices (mayor = más capacidad)
    lora_alpha=32,     # Factor de escalado
    target_modules=["q_proj", "v_proj"],  # Capas a adaptar
    lora_dropout=0.05,
    task_type="CAUSAL_LM"
)

QLoRA (Quantized LoRA)

Combina LoRA con cuantización: el modelo base se carga en 4-bit (reduciendo la memoria ~4x), y los adaptadores LoRA se entrenan en precisión completa. Permite fine-tunear modelos de 70B parámetros en una sola GPU de consumo.

Requisitos típicos:

  • Modelo 7B con QLoRA: ~6 GB VRAM
  • Modelo 13B con QLoRA: ~10 GB VRAM
  • Modelo 70B con QLoRA: ~40 GB VRAM

Otras técnicas PEFT

  • Prefix Tuning: Añade "tokens virtuales" entrenables al inicio del prompt interno del modelo.
  • Adapters: Inserta pequeños módulos entrenables entre las capas existentes del transformer.
  • IA3: Escala las activaciones internas con vectores entrenables. Aún menos parámetros que LoRA.

Dataset: la parte más importante

La calidad del dataset determina el éxito del fine-tuning más que cualquier hiperparámetro.

Principios clave

  • Calidad sobre cantidad: 500 ejemplos excelentes superan a 10.000 mediocres. Cada ejemplo debe representar el comportamiento exacto que quieres.
  • Diversidad: Cubrir todos los casos de uso, edge cases y tipos de consulta que el modelo encontrará en producción.
  • Consistencia: Todas las respuestas deben seguir el mismo formato, tono y nivel de detalle.
  • Formato de conversación: Usar el formato de mensajes (system/user/assistant) que espera el modelo.

Tamaño del dataset

ObjetivoEjemplos recomendados
Ajustar formato/estilo50-200
Tarea específica (clasificación, extracción)200-1.000
Dominio especializado1.000-10.000
Comportamiento general robusto10.000+

Técnicas de creación de datasets

  • Curación manual: El gold standard. Expertos del dominio crean y revisan cada ejemplo.
  • Destilación de modelos: Usar un modelo grande (GPT-4, Claude) para generar ejemplos de entrenamiento para un modelo más pequeño. Verificar que las licencias lo permitan.
  • Datos sintéticos aumentados: Generar variaciones de ejemplos existentes (paráfrasis, diferentes niveles de dificultad).
  • Evolución de instrucciones (Evol-Instruct): Técnica de WizardLM que aumenta progresivamente la complejidad de las instrucciones.

Plataformas y herramientas

APIs de fine-tuning

  • OpenAI Fine-tuning API: Fine-tuning de GPT-4o-mini y GPT-4o. Interfaz simple, se suben datos y se lanza el entrenamiento.
  • Anthropic Fine-tuning: Disponible para Claude, con enfoque en seguridad y evaluación.
  • Google Vertex AI: Fine-tuning de modelos Gemini con integración en Google Cloud.
  • Together AI: Plataforma para fine-tuning de modelos open source con API simple.
  • Fireworks AI: Fine-tuning y serving optimizado de modelos abiertos.

Herramientas open source

  • Hugging Face Transformers + PEFT: El ecosistema estándar para fine-tuning de modelos abiertos. Soporte completo para LoRA, QLoRA y todas las técnicas PEFT.
  • Unsloth: Librería que acelera el fine-tuning de Llama, Mistral y otros modelos 2-5x con menor consumo de memoria.
  • Axolotl: Herramienta de configuración YAML para fine-tuning, soporta múltiples técnicas y formatos de datos.
  • LLaMA-Factory: Interfaz web para fine-tuning de más de 100 modelos con soporte para LoRA, QLoRA, DPO y RLHF.
  • TRL (Hugging Face): Librería para RLHF, DPO y SFT con integración directa en el ecosistema Transformers.

Hardware necesario

MétodoModelo 7BModelo 13BModelo 70B
Full fine-tuning~60 GB VRAM~120 GB VRAM~600+ GB VRAM
LoRA~16 GB VRAM~32 GB VRAM~160 GB VRAM
QLoRA~6 GB VRAM~10 GB VRAM~40 GB VRAM

Alternativas cloud: RunPod, Lambda Labs, Vast.ai ofrecen GPUs A100/H100 por horas a precios accesibles para entrenamientos puntuales.

Proceso de fine-tuning paso a paso

  1. Definir el objetivo: Qué comportamiento exacto quieres del modelo.
  2. Preparar el dataset: Crear, limpiar y formatear los ejemplos de entrenamiento.
  3. Dividir los datos: Train (80-90%) y validación (10-20%) para detectar overfitting.
  4. Elegir modelo base: Seleccionar el modelo pre-entrenado más adecuado para tu caso.
  5. Configurar hiperparámetros: Learning rate (1e-5 a 5e-5 para full, 1e-4 a 3e-4 para LoRA), epochs (1-5), batch size.
  6. Entrenar y monitorizar: Seguir la loss de entrenamiento y validación. Si la loss de validación sube mientras la de train baja, hay overfitting.
  7. Evaluar: Probar con ejemplos no vistos durante el entrenamiento. Comparar con el modelo base.
  8. Iterar: Ajustar dataset, hiperparámetros o técnica según los resultados.

Fine-tuning vs. RAG: cuándo usar cada uno

EscenarioMejor opción
Datos que cambian frecuentementeRAG
Cambiar el estilo/tono del modeloFine-tuning
Acceso a documentos internosRAG
Tarea muy específica (clasificación)Fine-tuning
Necesidad de citar fuentesRAG
Reducir coste por inferenciaFine-tuning (modelo más pequeño)
Combinar ambosRAG + modelo fine-tuned

En la práctica, los sistemas más robustos combinan ambas técnicas: un modelo fine-tuned para el estilo y comportamiento base, con RAG para acceso a conocimiento actualizado y específico.

Desafíos

  • Catastrophic forgetting: El modelo puede "olvidar" capacidades generales al especializarse demasiado. Mitigación: usar una porción de datos generales en el dataset de fine-tuning.
  • Overfitting: Con datasets pequeños, el modelo puede memorizar los ejemplos en lugar de generalizar. Monitorizar la loss de validación es esencial.
  • Calidad del dataset: Basura entra, basura sale. Un dataset con errores, inconsistencias o sesgos producirá un modelo con esos mismos problemas.
  • Evaluación: Medir la mejora real es complejo. Requiere benchmarks específicos del dominio y evaluación humana.
  • Coste y tiempo: Aunque QLoRA ha democratizado el acceso, el ciclo completo (datos + entrenamiento + evaluación + iteración) sigue requiriendo inversión significativa.
  • Seguridad: Un modelo fine-tuned puede filtrar datos sensibles del dataset de entrenamiento si no se toman precauciones.

Modelos populares para fine-tuning

  • Llama 3 / 3.1 (Meta): La familia más popular para fine-tuning open source. Versiones de 8B, 70B y 405B.
  • Mistral / Mixtral: Modelos eficientes con excelente relación rendimiento/tamaño.
  • Qwen 2.5 (Alibaba): Fuerte en multilingüe y razonamiento.
  • Gemma 2 (Google): Modelos compactos (2B, 9B, 27B) optimizados para fine-tuning.
  • Phi-3/4 (Microsoft): Modelos pequeños pero capaces, ideales para despliegue en edge.
  • DeepSeek-V3/R1: Modelos open source de alto rendimiento con arquitectura MoE.

El fine-tuning sigue siendo una herramienta fundamental para adaptar modelos de lenguaje a casos de uso específicos. Con la llegada de técnicas como QLoRA y plataformas de fine-tuning como servicio, esta capacidad se ha democratizado enormemente, permitiendo a equipos pequeños crear modelos especializados de alto rendimiento.