Saltar al contenido principal

06 · Fundamentos de ML y LLMs

Fine-tuning, LoRA y QLoRA

Cuándo conviene hacer fine-tuning en vez de prompting o RAG, y cómo los adapters y la cuantización lo hacen caber en una GPU.

14 minCaso de estudio: Adapta (se abre en una ventana nueva)

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.