Saltar al contenido principal

Capítulo 2: Introducción a PEFT

¿Qué es PEFT?​

Ajuste fino eficiente en parámetros: actualice solo un pequeño subconjunto de parámetros.

LoRA (Low-Rank Adaptation)​

Agregue matrices de bajo rango a los pesos existentes:

W′=W+BAW' = W + BA

Donde B∈Rd×rB \in \mathbb{R}^{d \times r}, A∈Rr×kA \in \mathbb{R}^{r \times k}, y r≪min⁡(d,k)r \ll \min(d, k)

from peft import LoraConfig, get_peft_model

lora_config = LoraConfig(
r=16, # Rank
lora_alpha=32, # Scaling
target_modules=["q_proj", "v_proj"],
lora_dropout=0.05,
)

model = get_peft_model(base_model, lora_config)
model.print_trainable_parameters()
# trainable params: 4,194,304 || all params: 6,742,609,920 || 0.06%

QLoRA​

LoRA + modelo base cuantizado:

from transformers import BitsAndBytesConfig

bnb_config = BitsAndBytesConfig(
load_in_4bit=True,
bnb_4bit_quant_type="nf4",
bnb_4bit_compute_dtype=torch.bfloat16,
)

model = AutoModelForCausalLM.from_pretrained(
"meta-llama/Llama-2-7b-hf",
quantization_config=bnb_config,
)
model = get_peft_model(model, lora_config)

Comparación​

MétodoParámetros entrenablesMemoriaCalidad
Completo100%AltaMejor
LoRA0.1-1%BajaCasi igual al completo
QLoRA0.1-1%Muy bajaBuena