Saltar al contenido principal

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​

VentajasDesventajas
Muy efectivoRequiere ajuste de hiperparámetros
Bien comprendidoLa selección del rango es importante
Ampliamente soportadoPequeñ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​

ModeloLoRAQLoRAAhorro
7B~14GB~6GB57%
13B~26GB~10GB62%
70B~140GB~48GB66%

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étodoParámetrosMemoriaCalidad
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⭐⭐⭐
AdaLoRAVariableBaja⭐⭐⭐⭐

Recomendaciones por Caso de Uso​

Caso de usoMétodo recomendado
Fine-tuning generalLoRA
Memoria limitadaQLoRA
Múltiples tareas similaresPrompt Tuning
Condicionamiento de tareasPrefix Tuning
Mínimos parámetrosIA3
Eficiencia óptimaAdaLoRA

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:

  1. ¿Cuál es la diferencia clave entre LoRA y QLoRA?
  2. ¿Cómo funciona conceptualmente Prefix Tuning?
  3. ¿Qué método PEFT utiliza la menor cantidad de parámetros?