Proceso de especializar un modelo pre-entrenado en una tarea o dominio específico mediante entrenamiento adicional con datos curados, adaptando su comportamiento sin partir desde cero.
Fine-tuning es el proceso de tomar un modelo de lenguaje pre-entrenado y entrenarlo adicionalmente con datos específicos para adaptarlo a una tarea, dominio o estilo particular. En lugar de entrenar desde cero (costoso e impráctico), se aprovecha el conocimiento general del modelo base y se especializa.
La decisión entre fine-tuning, RAG y prompt engineering depende del problema:
| Criterio | Prompt engineering | RAG | Fine-tuning |
|---|---|---|---|
| Costo inicial | Bajo | Medio | Alto |
| Latencia en producción | Baja | Media (retrieval) | Baja |
| Conocimiento actualizable | No | Sí | No (requiere reentrenar) |
| Estilo/formato consistente | Limitado | Limitado | Excelente |
| Terminología de dominio | Limitado | Bueno | Excelente |
| Datos necesarios | 0 | Documentos | 100-10,000 ejemplos |
| Mantenimiento | Bajo | Medio (índice) | Alto (reentrenamiento) |
Regla práctica: empezar con prompt engineering, agregar RAG si se necesita conocimiento externo, y recurrir a fine-tuning solo cuando el modelo no logra el formato, estilo o terminología deseados.
Actualiza todos los parámetros del modelo. Produce los mejores resultados pero requiere:
Congela el modelo base y entrena pequeñas matrices de adaptación de bajo rango. En lugar de actualizar una matriz de pesos W de dimensión d×d, LoRA entrena dos matrices A (d×r) y B (r×d) donde r es mucho menor que d (típicamente 8-64).
LoRA sobre un modelo cuantizado a 4-bit. Permite fine-tuning de modelos de 70B parámetros en una sola GPU de 24GB.
Alinea el modelo con preferencias humanas usando un modelo de recompensa entrenado con comparaciones humanas. Es como se entrenan Claude, GPT-4 y otros modelos de chat.
from datasets import load_dataset
from transformers import AutoModelForCausalLM, AutoTokenizer, TrainingArguments
from peft import LoraConfig, get_peft_model
from trl import SFTTrainer
model_id = "meta-llama/Llama-3.1-8B"
tokenizer = AutoTokenizer.from_pretrained(model_id)
model = AutoModelForCausalLM.from_pretrained(model_id, load_in_4bit=True) # QLoRA
# Configuración LoRA
lora_config = LoraConfig(
r=16, # rango de la adaptación
lora_alpha=32, # factor de escala
target_modules=["q_proj", "v_proj"], # capas a adaptar
lora_dropout=0.05,
task_type="CAUSAL_LM",
)
model = get_peft_model(model, lora_config)
model.print_trainable_parameters() # ~0.1% del total
# Dataset en formato instrucción-respuesta
dataset = load_dataset("json", data_files="training_data.jsonl")
trainer = SFTTrainer(
model=model,
train_dataset=dataset["train"],
args=TrainingArguments(
output_dir="./output",
num_train_epochs=3,
per_device_train_batch_size=4,
learning_rate=2e-4,
),
peft_config=lora_config,
)
trainer.train()
model.save_pretrained("./lora-adapter") # Solo guarda el adaptador (~50MB)El adaptador resultante pesa ~50MB en lugar de los ~16GB del modelo completo, y se puede cargar sobre el modelo base en producción.
La calidad del dataset es el factor más determinante:
{"instruction": "Clasifica el sentimiento", "input": "El servicio fue excelente", "output": "positivo"}
{"instruction": "Clasifica el sentimiento", "input": "Tardaron 2 horas en atenderme", "output": "negativo"}No basta con que el loss baje — hay que evaluar en el contexto real de uso:
El fine-tuning permite adaptar un modelo general a un dominio específico con datos propios. Con LoRA y QLoRA, el costo de hardware bajó drásticamente — un fine-tuning de Llama 3.1 8B cabe en una GPU de 24GB. La decisión clave no es cómo hacer fine-tuning, sino si realmente lo necesitas: prompt engineering y RAG resuelven la mayoría de casos sin el costo de mantenimiento de un modelo custom.
Redes neuronales masivas basadas en la arquitectura Transformer, entrenadas con enormes corpus de texto para comprender y generar lenguaje natural con capacidades emergentes como razonamiento, traducción y generación de código.
Campo de la informática dedicado a crear sistemas capaces de realizar tareas que normalmente requieren inteligencia humana, desde el razonamiento y la percepción hasta la generación de lenguaje.
Datos generados algorítmicamente que replican las propiedades estadísticas de datos reales, usados para entrenar, evaluar y probar sistemas de IA cuando los datos reales son escasos, costosos o sensibles.