AstrApp
Docs
Volver a Documentación
Guía TécnicaLoRA & QLoRA

Guía de Fine-tuning de LLMs con AstrApp

Aprende todos los conceptos, técnicas y mejores prácticas del fine-tuning. Desde la generación de datos sintéticos hasta el despliegue en producción.


¿Qué es el Fine-tuning?

El fine-tuning de un LLM (Large Language Model) te permite personalizar su comportamiento, mejorar e inyectar conocimiento, y optimizar su rendimiento para dominios o tareas específicas.

Con AstrApp, al hacer fine-tuning de un modelo pre-entrenado puedes:

Actualizar + Aprender Nuevo Conocimiento

Inyectar y aprender información específica de tu dominio o industria.

Personalizar Comportamiento

Ajustar el tono, personalidad o estilo de respuesta del modelo.

Optimizar para Tareas

Mejorar la precisión y relevancia para casos de uso específicos.


LoRA y QLoRA: Métodos de Entrenamiento

LoRA (Low-Rank Adaptation) y QLoRA (Quantized LoRA) son técnicas de fine-tuning eficiente que permiten entrenar modelos grandes con recursos limitados.

LoRA (Low-Rank Adaptation)

LoRA congela los pesos originales del modelo y añade pequeñas matrices de "adaptación" entrenables en capas específicas (típicamente attention layers).

# Configuración típica de LoRA
lora_config = {
    "r": 16,              # Rank (8-64 típico)
    "lora_alpha": 32,     # Alpha (usualmente 2x rank)
    "lora_dropout": 0.05, # Dropout para regularización
    "target_modules": [   # Capas a adaptar
        "q_proj", "v_proj", "k_proj", "o_proj",
        "gate_proj", "up_proj", "down_proj"
    ]
}

Ventajas

  • - Reduce parámetros entrenables ~1000x
  • - Adapters pequeños y portables
  • - Permite múltiples adapters por modelo
  • - Calidad cercana a full fine-tuning

Consideraciones

  • - Requiere modelo en FP16/BF16
  • - VRAM: ~16GB para 7B params
  • - Rank muy bajo puede limitar calidad

QLoRA (Quantized LoRA)

QLoRA combina LoRA con cuantización de 4-bit, permitiendo entrenar modelos mucho más grandes con la misma cantidad de memoria GPU.

# Configuración de QLoRA con bitsandbytes
bnb_config = {
    "load_in_4bit": True,
    "bnb_4bit_quant_type": "nf4",      # Normal Float 4
    "bnb_4bit_compute_dtype": "bfloat16",
    "bnb_4bit_use_double_quant": True  # Nested quantization
}

# El modelo se carga en 4-bit
# Solo los LoRA adapters se entrenan en FP16

Ventajas

  • - 75% menos VRAM que LoRA estándar
  • - Entrena 70B en una sola GPU de 48GB
  • - Calidad comparable a LoRA FP16
  • - Democratiza el fine-tuning de LLMs

Consideraciones

  • - ~10-20% más lento que LoRA
  • - Requiere bitsandbytes
  • - Paging to CPU puede ayudar aún más
Comparación: LoRA vs QLoRA
VRAM para 7B
LoRA
~16GB
QLoRA
~6GB
VRAM para 70B
LoRA
~140GB (multi-GPU)
QLoRA
~48GB
Velocidad
LoRA
Más rápido
QLoRA
10-20% más lento
Calidad
LoRA
Excelente
QLoRA
Excelente
Recomendado para
LoRA
GPUs grandes, velocidad crítica
QLoRA
La mayoría de casos

Generación de Datos Sintéticos

La generación de datos sintéticos utiliza LLMs potentes ("maestros") para crear datasets de entrenamiento de alta calidad a partir de documentos existentes.

Proceso de Generación en AstrApp

1

Ingesta de Documentos

Sube tus documentos (PDF, DOCX, TXT). AstrApp extrae y estructura el contenido automáticamente usando Docling.

# Formatos soportados
PDF, DOCX, TXT, Markdown, HTML

# Procesamiento automático
- Extracción de texto
- Preservación de estructura
- Chunking inteligente (512-2048 tokens)
2

Generación de Pares Q&A

Un LLM maestro (GPT-4, Claude, Llama 70B) genera preguntas y respuestas basadas en el contenido.

# Prompt de generación
system: "Genera preguntas y respuestas precisas
basadas en el siguiente contexto. Las respuestas
deben ser informativas y usar solo información
del contexto proporcionado."

user: "Contexto: {chunk}"

# Output esperado
{
  "question": "¿Cuál es...?",
  "answer": "Según el documento...",
  "context": "fragmento relevante"
}
3

Validación de Calidad

Filtrado automático de pares de baja calidad usando métricas de coherencia y relevancia.

# Criterios de validación
- Relevancia: ¿La respuesta usa el contexto?
- Coherencia: ¿La respuesta es coherente?
- Completitud: ¿La respuesta está completa?
- Factualidad: ¿Los datos son correctos?

# Métricas automáticas
- Faithfulness score > 0.8
- Relevance score > 0.7
4

Formateo para Entrenamiento

Conversión al formato requerido (Alpaca, ShareGPT, ChatML) para el entrenamiento.

# Formato Alpaca
{
  "instruction": "pregunta",
  "input": "",
  "output": "respuesta"
}

# Formato ChatML
<|im_start|>user
pregunta<|im_end|>
<|im_start|>assistant
respuesta<|im_end|>

Mejores Prácticas para Datos Sintéticos

  • -Usa múltiples LLMs maestros para diversidad
  • -Genera más datos de los necesarios, luego filtra
  • -Incluye variedad en longitud de respuestas
  • -Revisa manualmente una muestra (~5%)
  • -Balancea tipos de preguntas (qué, cómo, por qué)
  • -Incluye ejemplos de conversación multi-turno

Arquitectura y Configuración del Servidor

AstrApp utiliza una arquitectura distribuida optimizada para entrenamiento eficiente. Aquí están los componentes clave y sus requisitos.

Arquitectura de Entrenamiento

┌─────────────────────────────────────────────────────────────────┐
│                        AstrApp Platform                         │
├─────────────────────────────────────────────────────────────────┤
│                                                                 │
│  ┌─────────────┐    ┌─────────────┐    ┌─────────────────────┐ │
│  │   Frontend  │───►│   API       │───►│   Redis Queue       │ │
│  │   Next.js   │    │   FastAPI   │    │   (Celery Broker)   │ │
│  └─────────────┘    └─────────────┘    └──────────┬──────────┘ │
│                                                   │             │
│  ┌────────────────────────────────────────────────▼───────────┐ │
│  │                    ML Worker Pool                          │ │
│  │  ┌──────────┐  ┌──────────┐  ┌──────────┐  ┌──────────┐   │ │
│  │  │ Worker 1 │  │ Worker 2 │  │ Worker 3 │  │ Worker N │   │ │
│  │  │ GPU: A100│  │ GPU: A100│  │ GPU: T4  │  │ GPU: ... │   │ │
│  │  └──────────┘  └──────────┘  └──────────┘  └──────────┘   │ │
│  └────────────────────────────────────────────────────────────┘ │
│                                                                 │
│  ┌─────────────────────┐    ┌─────────────────────────────────┐│
│  │   Supabase/Postgres │    │   Object Storage (S3/MinIO)    ││
│  │   - Jobs, Users     │    │   - Datasets, Models, Logs     ││
│  └─────────────────────┘    └─────────────────────────────────┘│
└─────────────────────────────────────────────────────────────────┘
Requisitos de VRAM por Modelo
7B (Llama 3.1, Qwen 2.5)
Full FT
~60GB
LoRA
~16GB
QLoRA
~6GB
13B (Llama 2, CodeLlama)
Full FT
~120GB
LoRA
~28GB
QLoRA
~10GB
70B (Llama 3.1, Qwen 2.5)
Full FT
~600GB
LoRA
~140GB
QLoRA
~48GB

Optimización con Unsloth (AstrApp Default)

AstrApp utiliza Unsloth por defecto, que proporciona hasta 2-5x más velocidad y 80% menos uso de memoria comparado con implementaciones estándar de HuggingFace.

# Beneficios de Unsloth en AstrApp
- 2-5x más rápido que HuggingFace Transformers
- 80% menos uso de VRAM
- Kernels optimizados para Ampere GPUs (RTX 30xx, A100)
- Compatible con LoRA y QLoRA
- Soporte para Llama, Mistral, Gemma, Phi

# Modelos de 7B entrenan en:
- Sin Unsloth: ~4 horas en A100
- Con Unsloth: ~1.5 horas en A100

Contenido Completo de la Guía

1

¿Qué es el Fine-tuning?

Personaliza el comportamiento de LLMs, inyecta conocimiento y optimiza para tareas específicas.

Ejemplos del mundo realCasos de uso prácticosFine-tuning vs RAGMitos y conceptos erróneos
2

LoRA y QLoRA: Métodos de Entrenamiento

Comprende las diferencias entre LoRA y QLoRA, cuándo usar cada uno y cómo configurarlos.

Low-Rank Adaptation (LoRA)Quantized LoRA (QLoRA)Comparación de memoriaConfiguración de rank y alpha
Ver comparación detallada
3

Generación de Datos Sintéticos

Crea datasets de entrenamiento de alta calidad usando LLMs como "maestros".

Técnicas de generaciónLLM-as-teacherFormatos de datosValidación de calidad
Ver proceso de generación
4

Arquitectura y Configuración del Servidor

Requisitos de hardware, GPU, y configuración óptima para entrenamiento.

Requisitos de VRAMConfiguración de GPUEscalamiento horizontalOptimización de memoria
Ver configuración
5

Tu Dataset

Estructura, formatos y mejores prácticas para preparar tus datos.

Estructura pregunta-respuestaFormatos: JSONL, ShareGPT, AlpacaLimpieza de datos
Guía completa de datasets
6

Hyperparameters de Entrenamiento

Learning rate, epochs, batch size, gradient accumulation y más.

Learning rate óptimoBatch size y gradient accumulationWarmup y schedulers
Guía de hyperparameters
7

Entrenamiento y Evaluación

Interpreta el training loss, configura evaluación y detecta problemas.

Interpretar training lossRango ideal (0.5-1.0)Detección de overfittingMétricas de evaluación
8

Exportar y Desplegar

Guarda tu modelo y despliégalo para producción.

Guardar como LoRA adapterMerge con modelo baseExportar a Ollama, vLLMAPI de inferencia

Mitos y Conceptos Erróneos

X"El fine-tuning no enseña conocimiento nuevo"
OKEl fine-tuning sí puede inyectar y consolidar nuevo conocimiento en el modelo. La clave está en la calidad y estructura del dataset.
X"RAG siempre es mejor que fine-tuning"
OKDepende del caso de uso. El fine-tuning es superior cuando necesitas respuestas consistentes, rápidas, y el conocimiento es estable.
X"El fine-tuning es solo para expertos"
OKCon plataformas como AstrApp, el proceso se simplifica enormemente. Tú te enfocas en tus datos, nosotros manejamos la complejidad técnica.
X"QLoRA produce modelos de menor calidad"
OKEstudios demuestran que QLoRA produce resultados comparables a LoRA full-precision, con 75% menos uso de memoria.

¿Listo para empezar?

Continúa con la siguiente guía para elegir el modelo correcto para tu caso de uso.