Capítulo 3: Resumen de Métodos PEFT
Explicación de los Principales Métodos de Eficiencia en Parámetros
Este capítulo proporciona una visión integral de todos los métodos PEFT más importantes, ayudándole a elegir el adecuado para su caso de uso.
Taxonomía de Métodos PEFT
1. LoRA (Low-Rank Adaptation)
Cómo Funciona
LoRA añade matrices entrenables de descomposición de bajo rango junto a los pesos congelados.
Original: h = Wx
LoRA: h = Wx + BAx
Where:
- W is frozen (d × d)
- B is trainable (d × r)
- A is trainable (r × d)
- r is much smaller than d (low rank, e.g., 8-64)
Representación Visual
Configuración
from peft import LoraConfig
lora_config = LoraConfig(
r=16, # Rank (capacity)
lora_alpha=32, # Scaling factor
target_modules=[ # Where to apply
"q_proj",
"k_proj",
"v_proj",
"o_proj",
"gate_proj",
"up_proj",
"down_proj",
],
lora_dropout=0.05, # Regularization
bias="none", # Don't train biases
task_type="CAUSAL_LM",
)
Ventajas y Desventajas
| Ventajas | Desventajas |
|---|---|
| Muy efectivo | Requiere ajuste de hiperparámetros |
| Bien comprendido | La selección del rango es importante |
| Ampliamente soportado | Pequeña sobrecarga en inferencia |
| Puede fusionarse | — |
2. QLoRA (Quantized LoRA)
Cómo Funciona
Combina cuantización a 4 bits con LoRA para una eficiencia extrema.
1. Load base model in 4-bit (NF4 format)
2. Add LoRA adapters in fp16/bf16
3. Train only the LoRA parameters
4. Gradients flow through dequantized weights
Configuración
from transformers import BitsAndBytesConfig
from peft import LoraConfig
# Quantization config
bnb_config = BitsAndBytesConfig(
load_in_4bit=True,
bnb_4bit_quant_type="nf4",
bnb_4bit_compute_dtype=torch.bfloat16,
bnb_4bit_use_double_quant=True, # Extra savings
)
# Load quantized model
model = AutoModelForCausalLM.from_pretrained(
model_name,
quantization_config=bnb_config,
)
# Apply LoRA on top
lora_config = LoraConfig(r=16, lora_alpha=32, ...)
model = get_peft_model(model, lora_config)
Comparación de Memoria
| Modelo | LoRA | QLoRA | Ahorro |
|---|---|---|---|
| 7B | ~14GB | ~6GB | 57% |
| 13B | ~26GB | ~10GB | 62% |
| 70B | ~140GB | ~48GB | 66% |
3. Prefix Tuning
Cómo Funciona
Añade "tokens virtuales" entrenables como prefijos a los estados de clave y valor en las capas de atención.
Normal attention: Attention(Q, K, V)
Prefix tuning: Attention(Q, [P_K; K], [P_V; V])
Where P_K, P_V are learned prefix embeddings
Configuración
from peft import PrefixTuningConfig
prefix_config = PrefixTuningConfig(
task_type="CAUSAL_LM",
num_virtual_tokens=20, # Number of prefix tokens
prefix_projection=True, # Use MLP to project
)
Casos de Uso
- Condicionamiento específico de tareas
- Cuando no puede modificar los pesos del modelo
- Optimización continua de prompts
4. Prompt Tuning
Cómo Funciona
Aprende embeddings continuos que se anteponen a la secuencia de entrada.
Normal: embed("What is AI?")
Prompt Tuning: [learned_prompts] + embed("What is AI?")
Configuración
from peft import PromptTuningConfig
prompt_config = PromptTuningConfig(
task_type="CAUSAL_LM",
num_virtual_tokens=8,
prompt_tuning_init="TEXT", # Initialize from text
prompt_tuning_init_text="Classify the following:",
)
Características
- Menor cantidad de parámetros entrenables
- Funciona bien para clasificación
- Menos flexible que LoRA
- No modifica los componentes internos del modelo
5. IA3 (Infused Adapter by Inhibiting and Amplifying Inner Activations)
Cómo Funciona
Aprende a reescalar las activaciones en lugar de añadir nuevos pesos.
Original: h = activation(Wx)
IA3: h = activation(W(l_v ⊙ x)) * l_k
Where l_v, l_k are learned scaling vectors
Configuración
from peft import IA3Config
ia3_config = IA3Config(
task_type="CAUSAL_LM",
target_modules=["k_proj", "v_proj", "down_proj"],
feedforward_modules=["down_proj"],
)
Características
- Incluso menos parámetros que LoRA
- Sobrecarga computacional mínima
- Bueno para algunas tareas, menos versátil
- Adopción en etapa de investigación
6. AdaLoRA (Adaptive LoRA)
Cómo Funciona
Asigna dinámicamente el rango a diferentes matrices de pesos según su importancia.
Instead of: fixed rank r for all layers
AdaLoRA: rank_i based on importance score
Important layers → higher rank
Less important → lower rank
Configuración
from peft import AdaLoraConfig
adalora_config = AdaLoraConfig(
init_r=12, # Initial rank
target_r=4, # Target average rank
tinit=200, # Warmup steps
tfinal=1000, # When to stop adapting
deltaT=10, # Update frequency
beta1=0.85,
beta2=0.85,
)
Cuándo Usar
- Cuando no está seguro de qué rango elegir
- Para una asignación óptima de parámetros
- Si está dispuesto a intercambiar complejidad por eficiencia
Comparación de Métodos
Parámetros y Memoria
| Método | Parámetros | Memoria | Calidad |
|---|---|---|---|
| LoRA | ~0.1-1% | Baja | ⭐⭐⭐⭐⭐ |
| QLoRA | ~0.1-1% | Muy baja | ⭐⭐⭐⭐ |
| Prefix | ~0.1% | Muy baja | ⭐⭐⭐ |
| Prompt | ~0.01% | Muy baja | ⭐⭐⭐ |
| IA3 | ~0.01% | Muy baja | ⭐⭐⭐ |
| AdaLoRA | Variable | Baja | ⭐⭐⭐⭐ |
Recomendaciones por Caso de Uso
| Caso de uso | Método recomendado |
|---|---|
| Fine-tuning general | LoRA |
| Memoria limitada | QLoRA |
| Múltiples tareas similares | Prompt Tuning |
| Condicionamiento de tareas | Prefix Tuning |
| Mínimos parámetros | IA3 |
| Eficiencia óptima | AdaLoRA |
Combinando Métodos
LoRA + Cuantización
# Combinación más común
bnb_config = BitsAndBytesConfig(load_in_4bit=True, ...)
model = load_model(quantization_config=bnb_config)
model = get_peft_model(model, lora_config)
Múltiples Adaptadores LoRA
# Entrenar diferentes adaptadores
model.add_adapter("task_a", lora_config_a)
model.add_adapter("task_b", lora_config_b)
# Cambiar entre ellos
model.set_adapter("task_a")
# o
model.set_adapter("task_b")
Cómo Elegir el Método Adecuado
Puntos Clave
✅ LoRA es el método PEFT más versátil y ampliamente utilizado
✅ QLoRA añade cuantización para una eficiencia extrema en memoria
✅ Prompt/Prefix tuning funcionan sin modificar los pesos del modelo
✅ IA3 ofrece el mínimo de parámetros pero menos flexibilidad
✅ Elija según las restricciones de memoria y los requisitos de calidad
✅ Los métodos pueden combinarse (por ejemplo, QLoRA = Cuantización + LoRA)
Próximos Pasos
Ponga a prueba sus conocimientos con el Cuestionario del Módulo 3, luego profundice en LoRA en Módulo 4: LoRA a Fondo.
Comprobación Rápida
Antes de continuar, asegúrese de poder responder:
- ¿Cuál es la diferencia clave entre LoRA y QLoRA?
- ¿Cómo funciona conceptualmente Prefix Tuning?
- ¿Qué método PEFT utiliza la menor cantidad de parámetros?