الفصل 2: مقدمة في PEFT
ما هو PEFT؟
الضبط الدقيق الفعّال للمعلمات: تحديث فقط مجموعة صغيرة من المعلمات.
LoRA (التكيّف منخفض الرتبة)
إضافة مصفوفات منخفضة الرتبة إلى الأوزان الحالية:
حيث ، ، و
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 + نموذج أساسي مكمي:
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)
المقارنة
| الطريقة | المعلمات القابلة للتدريب | الذاكرة | الجودة |
|---|---|---|---|
| كامل | 100% | عالية | الأفضل |
| LoRA | 0.1-1% | منخفضة | قريبة من الكاملة |
| QLoRA | 0.1-1% | منخفضة جداً | جيدة |