Capítulo 3: Panorama del Fine-Tuning
Métodos, herramientas y requisitos: visión general
El panorama del fine-tuning ha evolucionado rápidamente, ofreciendo múltiples enfoques adaptados a diferentes necesidades y recursos. Este capítulo proporciona una visión general integral para ayudarle a navegar sus opciones.
Visión general de los métodos de fine-tuning
Comparación de métodos
| Método | Parámetros entrenados | Uso de memoria | Calidad | Mejor para |
|---|---|---|---|---|
| Full Fine-Tuning | 100% | Muy alto | Máxima | Máxima personalización |
| LoRA | ~0.1-1% | Media | Alta | Fine-tuning general |
| QLoRA | ~0.1-1% | Baja | Alta | GPUs de consumo |
| Prefix Tuning | ~0.1% | Baja | Buena | Tareas específicas |
| IA3 | ~0.01% | Muy baja | Buena | Cambios mínimos |
Full Fine-Tuning
Qué es
Actualizar todos los parámetros del modelo durante el entrenamiento.
Ventajas
- Máxima flexibilidad y personalización
- Puede lograr los mejores resultados en tareas complejas
- Control total sobre el comportamiento del modelo
Desventajas
- Requiere mucha memoria GPU (un modelo de 7B necesita ~28GB+ para entrenar)
- Mayor riesgo de olvido catastrófico
- Costoso en términos de cómputo
Cuándo usarlo
- Cuando dispone de amplios recursos de cómputo
- Para aplicaciones críticas que requieren máxima calidad
- Cuando los métodos PEFT no logran los resultados deseados
# Full fine-tuning example
from transformers import Trainer, TrainingArguments
training_args = TrainingArguments(
output_dir="./results",
num_train_epochs=3,
per_device_train_batch_size=4,
gradient_accumulation_steps=4,
fp16=True, # Mixed precision to save memory
)
trainer = Trainer(
model=model, # All parameters trainable
args=training_args,
train_dataset=dataset,
)
LoRA (Low-Rank Adaptation)
Qué es
Agregar pequeñas matrices entrenables a los pesos congelados del modelo.
Cómo funciona
Original: W (frozen)
LoRA: W + BA (where B and A are small trainable matrices)
Parámetros clave
- Rank (r): Dimensionalidad de las matrices de bajo rango (por ejemplo, 8, 16, 32)
- Alpha: Factor de escala para las contribuciones de LoRA
- Target Modules: Capas a las que se aplica LoRA (q_proj, v_proj, etc.)
Ventajas
- Reducción de memoria superior al 90%
- Entrenamiento rápido
- El adaptador puede intercambiarse o fusionarse
- Sin pérdida de calidad para la mayoría de tareas
Desventajas
- Límite ligeramente inferior al full fine-tuning
- Requiere ajuste de hiperparámetros (rank, alpha)
from peft import LoraConfig, get_peft_model
lora_config = LoraConfig(
r=16,
lora_alpha=32,
target_modules=["q_proj", "v_proj"],
lora_dropout=0.05,
task_type="CAUSAL_LM",
)
model = get_peft_model(base_model, lora_config)
QLoRA (Quantized LoRA)
Qué es
Combina cuantización de 4 bits con LoRA para una eficiencia extrema de memoria.
Cómo funciona
- Cargar el modelo base en precisión de 4 bits
- Añadir adaptadores LoRA en mayor precisión
- Entrenar solo los parámetros de LoRA
Comparación de memoria
| Tamaño del modelo | Full FT | LoRA | QLoRA |
|---|---|---|---|
| 7B | ~28GB | ~14GB | ~6GB |
| 13B | ~52GB | ~26GB | ~10GB |
| 70B | ~280GB | ~140GB | ~48GB |
Ventajas
- Entrene modelos de 70B en GPUs de consumo
- Pérdida de calidad mínima comparado con LoRA
- Muy rentable
Desventajas
- Entrenamiento ligeramente más lento
- Requiere la librería bitsandbytes
- Posibles artefactos de cuantización
from transformers import BitsAndBytesConfig
bnb_config = BitsAndBytesConfig(
load_in_4bit=True,
bnb_4bit_quant_type="nf4",
bnb_4bit_compute_dtype=torch.bfloat16,
bnb_4bit_use_double_quant=True,
)
model = AutoModelForCausalLM.from_pretrained(
"model_name",
quantization_config=bnb_config,
)
Métodos de alineación
RLHF (Reinforcement Learning from Human Feedback)
- Entrena un modelo de recompensa a partir de preferencias humanas
- Utiliza RL (PPO) para optimizar el modelo de lenguaje
- Complejo pero potente
DPO (Direct Preference Optimization)
- Simplifica RLHF eliminando el modelo de recompensa
- Optimiza directamente sobre pares de preferencias
- Mucho más sencillo de implementar
ORPO (Odds Ratio Preference Optimization)
- Combina SFT y alineación en un solo paso
- Aún más simple que DPO
- Nuevo pero con resultados prometedores
# DPO example with TRL
from trl import DPOTrainer
trainer = DPOTrainer(
model=model,
ref_model=reference_model,
train_dataset=preference_dataset,
beta=0.1, # KL penalty weight
)
Ecosistema de herramientas
Stack de Hugging Face
| Herramienta | Propósito |
|---|---|
| transformers | Carga de modelos, tokenización, entrenamiento |
| peft | Fine-tuning eficiente en parámetros |
| trl | Entrenadores SFT, DPO, RLHF |
| datasets | Carga y procesamiento de datasets |
| accelerate | Entrenamiento distribuido |
| bitsandbytes | Cuantización |
Frameworks alternativos
| Herramienta | Fortaleza | Caso de uso |
|---|---|---|
| Axolotl | Configuración sencilla | Experimentos rápidos |
| LLaMA-Factory | Interfaz unificada | Múltiples métodos |
| Unsloth | 2x velocidad, menos memoria | Iteración rápida |
Requisitos de cómputo
Guía de memoria GPU
Memoria necesaria ≈ (Parámetros del modelo × bytes de precisión × multiplicador)
Donde el multiplicador:
- Inferencia: 1x
- Entrenamiento LoRA: 2-3x
- Full Fine-Tuning: 4-6x
GPUs recomendadas
| Presupuesto | GPU | VRAM | Adecuado para |
|---|---|---|---|
| Gratis | Colab T4 | 15GB | QLoRA en 7B |
| $ | RTX 3090/4090 | 24GB | QLoRA en 13B |
| $$ | A100-40GB | 40GB | LoRA en 70B |
| $$$ | A100-80GB | 80GB | Full FT en 13B |
| $$$$ | H100 | 80GB | Full FT en 70B |
Estimaciones de tiempo de entrenamiento
| Modelo | Método | GPU | Tiempo para 1K ejemplos |
|---|---|---|---|
| 7B | QLoRA | A100-40GB | ~30 min |
| 7B | LoRA | A100-40GB | ~20 min |
| 7B | Full FT | A100-80GB | ~45 min |
| 70B | QLoRA | A100-80GB | ~3 horas |
Elija su camino
Matriz de decisión
Recomendaciones por escenario
| Escenario | Método recomendado |
|---|---|
| Aprendizaje/Experimentación | QLoRA en Colab |
| Producción (sensible a costos) | QLoRA en GPU en la nube |
| Producción (crítico en calidad) | LoRA o Full FT |
| Investigación | Full FT con checkpoints |
| Iteración rápida | Unsloth + QLoRA |
El curso por delante
En los siguientes módulos, profundizaremos en cada método:
| Módulo | Enfoque |
|---|---|
| Módulo 2 | Detalles de Full Fine-Tuning |
| Módulo 3 | Conceptos de PEFT |
| Módulo 4 | Profundización en LoRA |
| Módulo 5 | QLoRA y cuantización |
| Módulo 6 | Preparación de datos |
| Módulo 7 | Entrenamiento con Hugging Face |
| Módulo 8 | Técnicas avanzadas (DPO, ORPO) |
| Módulo 9 | Evaluación y fusión |
| Módulo 10 | Despliegue en producción |
Puntos clave
✅ Existen múltiples métodos de fine-tuning para diferentes niveles de recursos
✅ Los métodos PEFT (LoRA, QLoRA) hacen el fine-tuning accesible en hardware de consumo
✅ El ecosistema de Hugging Face proporciona todas las herramientas necesarias
✅ La elección del método depende del presupuesto de cómputo y los requisitos de calidad
✅ Comience con QLoRA para aprender y escale según sea necesario
Próximos pasos
Ponga a prueba sus conocimientos con el Quiz del Módulo 1, luego continúe a Módulo 2: Full Fine-Tuning.
Comprobación rápida
Antes de continuar, asegúrese de poder responder:
- ¿Cuál es la principal diferencia entre LoRA y QLoRA?
- ¿Cuánta memoria necesitaría para aplicar QLoRA a un modelo de 7B?
- ¿Cuál es la diferencia entre DPO y RLHF?