Hay tareas en las que el no alcanza: el modelo devuelve JSON válido nueve de cada diez veces, clasifica bien salvo con tus categorías internas, o responde correcto pero nunca con el tono de tu marca. significa seguir entrenando un modelo ya entrenado con tus propios ejemplos para cambiar cómo responde.
El obstáculo histórico era el costo: ajustar todos los pesos de un modelo de miles de millones de parámetros requiere varias GPUs grandes. y cambiaron eso. Veamos cuándo conviene hacer fine-tuning, cómo funcionan los y qué suele salir mal.
Prompting, RAG o fine-tuning
La pregunta decisiva es si te falta conocimiento o comportamiento.
| Necesidad | Herramienta | Por qué |
|---|---|---|
| Responder con datos que cambian | RAG | Se actualiza al reindexar y cita la fuente |
| Instrucción clara, pocos casos | Prompting | Sin costo de entrenamiento; itera en minutos |
| Formato fijo, taxonomía propia, tono | Fine-tuning | Es una conducta; vive en los pesos |
| Datos de tus manuales con tu tono | RAG + fine-tuning | Hechos de la recuperación, forma del adapter |
El dataset
El fine-tuning supervisado (SFT) aprende de pares entrada → salida ideal, normalmente en JSONL (un objeto JSON por línea). El formato de chat más difundido es una lista de mensajes con roles:
{"messages": [
{"role": "system", "content": "Clasifica el ticket."},
{"role": "user", "content": "Me cobraron dos veces"},
{"role": "assistant", "content": "billing"}
]}
La calidad importa más que la cantidad: ejemplos contradictorios enseñan contradicciones. Y cada ejemplo debe enseñar una forma repetible (un esquema, un conjunto de etiquetas, una plantilla), no un hecho suelto.
Datasets sintéticos
Generar pares con un a partir de tus documentos es tentador. El riesgo es producir justamente lo que no conviene entrenar: preguntas y respuestas de hechos.
LoRA y QLoRA
Entrenar poco, cambiar mucho
Una capa lineal tiene una matriz de pesos W de d × d. El fine-tuning completo actualiza toda W. LoRA (Low-Rank Adaptation) congela W y aprende una corrección de rango bajo:
W' = W + (alpha / r) · B · A
A: r × d B: d × r r << d
d = 4096, r = 16:
W completa 4096 × 4096 = 16 777 216 parámetros
A + B 2 × 16 × 4096 = 131 072 parámetros (~0,8 %)
La intuición: el cambio que necesitas para aprender una conducta concreta tiene pocas "direcciones" relevantes, así que no hace falta una matriz completa para expresarlo. r (rank) controla la capacidad del adapter; alpha escala su efecto. El resultado es un archivo de pocos megabytes que se aplica encima del sin modificarlo, y un mismo base puede servir muchos adapters.
QLoRA: que quepa en una GPU
Aunque solo entrenes el adapter, el modelo base completo tiene que estar en memoria. QLoRA carga el base cuantizado a 4 bits (formato NF4) y congelado, y entrena los adapters en mayor precisión. La librería bitsandbytes implementa esa ; PEFT aporta LoRA y prepare_model_for_kbit_training.
Overfitting y desfase entre entrenar y servir
Con pocos ejemplos el modelo memoriza en vez de generalizar: la pérdida de entrenamiento baja mientras que en ejemplos nuevos no mejora o empeora. Las defensas básicas son evaluar en ejemplos que no vio (ver Evaluar modelos), usar pocas epochs y tener un control negativo: un dataset sin patrón que debe fallar.
De PEFT a GGUF, y visión
PEFT guarda el adapter como adapter_model.safetensors. Un runtime como llama.cpp necesita el adapter en formato . La conversión es un paso más del pipeline y puede fallar, así que conviene tratarla como tal. Servir modelos se trata en Servir modelos.
Los modelos de visión-lenguaje (VLM) se ajustan igual, con una entrada extra: la imagen. Lo habitual es congelar la torre de visión y aplicar LoRA solo al modelo de lenguaje, porque el modelo ya sabe leer la imagen; lo que aprende es a responder con tu formato.
Para CTOs
- ¿Conducta o conocimiento? Si la respuesta es "conocimiento", no financies un fine-tune.
- Datos antes que GPUs. El cuello de botella real es un dataset limpio y consistente de cientos de ejemplos, y alguien responsable de mantenerlo.
- Licencias. Verifica la licencia del modelo base antes de invertir; en el catálogo de Adapta, varios modelos Qwen de 3B tienen licencia solo para evaluación.
- Ciclo de vida. Un adapter está atado a su modelo base exacto. Cambiar de base implica reentrenar y volver a evaluar.
Para llevar
- Fine-tuning cambia comportamiento; RAG aporta conocimiento. No los confundas.
- LoRA entrena dos matrices pequeñas junto a cada capa elegida; el base queda intacto y el adapter pesa megabytes.
- QLoRA cuantiza el base a 4 bits para que el entrenamiento quepa en una GPU modesta.
- Entrenar y servir deben usar el mismo formato de prompt; si no, el adapter aprende algo que el endpoint nunca pide.
- Todo adapter se evalúa en datos que no vio antes de servirse.
Comprueba lo aprendido
Tu equipo quiere un fine-tune para que el modelo "sepa" el catálogo de precios. ¿Qué recomiendas?
RAG. Los precios son conocimiento que cambia; en un índice se actualizan al reindexar y se citan, mientras que en los pesos quedan obsoletos.
¿Por qué LoRA con r=16 entrena mucho menos que el fine-tuning completo en una capa de 4096 × 4096?
Porque aprende A (16 × 4096) y B (4096 × 16), unos 131 mil parámetros, en lugar de los 16,7 millones de la matriz completa, que queda congelada.
¿Qué aporta QLoRA frente a LoRA?
Carga el modelo base congelado cuantizado a 4 bits, lo que reduce mucho la memoria necesaria, y sigue entrenando solo los adapters.