AstrApp
Docs

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.

AspectoLoRA (16 bits)QLoRA (4 bits)
Pesos del modelo base16 bits (BF16 o FP16), congelados4 bits (NF4), congelados
Qué se entrenaLas matrices LoRALas matrices LoRA
Memoria de GPUAlta: el modelo completo en 16 bitsMucho menor: los pesos ocupan una cuarta parte
Velocidad por pasoMás rápidaAlgo más lenta: descuantiza los pesos al vuelo
CalidadReferenciaCercana 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.

train.py (fragmento)
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.

  1. En Entrenar › Entrenar modelo eliges la GPU, el modelo base, los hiperparámetros, el dataset y la configuración de la máquina.
  2. 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.
  3. Si elegiste un dataset existente, lo exporta a JSONL con sus conversaciones válidas. Sube el dataset y el script train.py a Supabase Storage y crea la instancia en Vast.ai con un script de arranque.
  4. En la GPU, train.py valida el dataset, carga el modelo, hace una prueba de humo con unos pocos tokens y entrena. El progreso llega a AstrApp por callback.
  5. 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.py intenta además exportar el modelo en GGUF (cuantización q4_k_m por 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.

Siguientes pasos