Guía de fine-tuning
Qué es el fine-tuning, cómo funcionan LoRA y QLoRA y qué hace AstrApp cuando entrenas un modelo.
Teoría y producto, por separado
Esta guía mezcla dos tipos de información. La teoría general de fine-tuning vale para cualquier plataforma. Lo que dice En AstrApp describe cómo funciona el producto y está verificado contra su código.
Qué es el fine-tuning
Ajustar un modelo ya entrenado con tus propios ejemplos para que se comporte como necesitas.
Un modelo de lenguaje abierto ya sabe conversar. Con fine-tuning sigues entrenándolo con tus conversaciones para que adopte tu tono, tu formato y tu forma de resolver las tareas de tu negocio.
Aprender tu dominio
Fija información estable de tu industria o de tus productos.
Ajustar el comportamiento
Cambia el tono, la personalidad o el estilo de las respuestas.
Especializar una tarea
Mejora la precisión en un caso de uso concreto, como ventas o soporte.
Fine-tuning o RAG
RAG busca documentos en el momento de responder y se los pasa al modelo: conviene cuando el conocimiento cambia seguido. El fine-tuning cambia al modelo en sí: conviene cuando quieres un comportamiento consistente sin depender de lo que recupere una búsqueda. No se excluyen: un modelo ajustado también puede usar RAG.
LoRA y QLoRA
Las dos técnicas que permiten ajustar modelos grandes sin entrenar todos sus pesos.
LoRA
LoRA (Low-Rank Adaptation) congela los pesos originales y agrega un par de matrices pequeñas a ciertas capas. Solo esas matrices se entrenan, así que el resultado es un adapter ligero que se aplica sobre el modelo base. El artículo original (Hu et al., 2021) reporta hasta 10,000 veces menos parámetros entrenables que el fine-tuning completo de GPT-3 175B.
QLoRA
QLoRA carga el modelo base cuantizado a 4 bits y entrena las matrices LoRA encima. Así caben modelos mucho más grandes en la misma GPU: el artículo original (Dettmers et al., 2023) ajustó un modelo de 65B en una sola GPU de 48 GB.
| Aspecto | LoRA (16 bits) | QLoRA (4 bits) |
|---|---|---|
| Pesos del modelo base | 16 bits (BF16 o FP16), congelados | 4 bits (NF4), congelados |
| Qué se entrena | Las matrices LoRA | Las matrices LoRA |
| Memoria de GPU | Alta: el modelo completo en 16 bits | Mucho menor: los pesos ocupan una cuarta parte |
| Velocidad por paso | Más rápida | Algo más lenta: descuantiza los pesos al vuelo |
| Calidad | Referencia | Cercana a LoRA en 16 bits según el artículo original |
En AstrApp
Entrenar › Entrenar modelo entrena siempre con Unsloth: carga el modelo base en 4 bits y aplica LoRA a las siete proyecciones de atención y MLP. En la práctica es QLoRA, y no hay un selector de método. Los valores de rango, alpha y dropout los eliges en el formulario de hiperparámetros.
model, tokenizer = FastLanguageModel.from_pretrained(
model_name=MODEL_NAME,
max_seq_length=MAX_SEQ_LENGTH, # 2048 por defecto
load_in_4bit=True, # modelo base en 4 bits
)
model = FastLanguageModel.get_peft_model(
model,
r=LORA_R, # 16 por defecto
lora_alpha=LORA_ALPHA, # 32 por defecto
lora_dropout=LORA_DROPOUT, # 0.05 por defecto
target_modules=[
"q_proj", "k_proj", "v_proj", "o_proj",
"gate_proj", "up_proj", "down_proj",
],
bias="none",
use_gradient_checkpointing="unsloth",
)Memoria de GPU
Por qué el tamaño del modelo decide qué GPU necesitas.
El fine-tuning completo guarda en la GPU los pesos, los gradientes y el estado del optimizador de todos los parámetros, por eso exige mucha más memoria que LoRA. QLoRA reduce además la memoria de los pesos del modelo base.
En AstrApp
Cada modelo del catálogo declara la VRAM mínima que necesita para entrenarse con LoRA en 4 bits. En Entrenar modelo, los modelos que no caben en la GPU elegida aparecen deshabilitados, y el servidor rechaza la renta antes de cobrarte si la GPU no alcanza. Ve la VRAM de cada modelo en ¿Qué modelo usar?.
Cómo corre un entrenamiento en AstrApp
Lo que pasa desde que lanzas el entrenamiento hasta que tienes tu adapter.
- En Entrenar › Entrenar modelo eliges la GPU, el modelo base, los hiperparámetros, el dataset y la configuración de la máquina.
- Antes de rentar, el servidor comprueba que el modelo esté en el catálogo, que la GPU tenga la VRAM necesaria, que el disco alcance y que tengas saldo para al menos una hora. Si algo falla, te lo dice y no te cobra.
- Si elegiste un dataset existente, lo exporta a JSONL con sus conversaciones válidas. Sube el dataset y el script
train.pya Supabase Storage y crea la instancia en Vast.ai con un script de arranque. - En la GPU,
train.pyvalida el dataset, carga el modelo, hace una prueba de humo con unos pocos tokens y entrena. El progreso llega a AstrApp por callback. - Al terminar, sube el adapter a AstrApp y, si activaste la evaluación, corre
eval.py. Después la instancia se libera.
El paso a paso con capturas está en Entrenamiento.
Entrenamiento y evaluación
Cómo leer el progreso y detectar problemas a tiempo.
El loss de entrenamiento mide qué tanto se equivoca el modelo con tus ejemplos y debe bajar con el tiempo. Si baja casi a cero mientras el loss con datos que no vio sube, el modelo está memorizando (overfitting). Si se queda alto y plano, no está aprendiendo (underfitting). Qué ajustar en cada caso está en Hiperparámetros.
Progreso
Durante el entrenamiento, AstrApp recibe el loss, el learning rate, la época y el paso actual. Si el loss sale NaN o infinito tres veces seguidas, el entrenamiento se detiene.
Falta de memoria
Si la GPU se queda sin memoria, train.py reintenta una vez con la mitad del batch size y el doble de acumulación de gradiente, para conservar el batch efectivo.
Evalúa con datos que el modelo no vio
Activa Evaluar el modelo tras entrenar en Entrenar modelo. Puedes apartar del 5% al 30% de tu dataset (10% por defecto) o usar otro dataset existente. Al terminar se mide el eval loss y la perplejidad, y el resultado aparece en el historial del entrenamiento.
Exportar y usar tu modelo
Qué obtienes al terminar y cómo llevarlo a producción.
Un adapter LoRA se carga encima de su modelo base o se fusiona con él para obtener un modelo completo. El formato GGUF sirve para correr el modelo en herramientas como llama.cpp u Ollama.
En AstrApp
- El adapter se guarda en AstrApp y lo ves en Archivos › Adaptadores LoRA.
- Con Unsloth,
train.pyintenta además exportar el modelo en GGUF (cuantizaciónq4_k_mpor defecto) y lo sube junto al adapter. Si esa exportación falla, el adapter no se pierde. - Descargar el adapter requiere Professional con suscripción activa.
Todo sobre archivar, descargar y publicar está en Adaptadores LoRA.
Datos sintéticos
Cuando no tienes suficientes ejemplos reales, un modelo más grande puede generar más.
La generación sintética usa un LLM potente como “maestro” para producir conversaciones de entrenamiento a partir de tus ejemplos o de una descripción del caso. En AstrApp se hace desde Conversaciones › Síntesis; el detalle está en Sintetizar datos.
Buenas prácticas
- Genera más ejemplos de los que necesitas y filtra los malos.
- Varía el largo de las respuestas y el tipo de pregunta (qué, cómo, por qué).
- Incluye conversaciones de varios turnos, no solo pares pregunta-respuesta.
- Revisa a mano una muestra antes de entrenar.
Mitos frecuentes
El fine-tuning no enseña nada nuevo
Sí puede fijar conocimiento, sobre todo si es estable y aparece de forma consistente en muchos ejemplos. Para datos que cambian seguido, RAG es mejor opción.
RAG siempre es mejor que el fine-tuning
Depende del caso. El fine-tuning gana cuando necesitas un tono, un formato o un comportamiento consistentes; RAG gana cuando el conocimiento cambia. Se pueden combinar.
El fine-tuning es solo para expertos
En AstrApp eliges el modelo, los datos y la GPU; la plataforma arma los scripts, renta la máquina y te reporta el progreso.
QLoRA da modelos de peor calidad
El artículo de QLoRA (Dettmers et al., 2023) reporta un desempeño equivalente al fine-tuning completo en 16 bits en sus pruebas, con una fracción de la memoria.