الفصل 3: نظرة عامة على طرق PEFT
شرح جميع الطرق الرئيسية لكفاءة المعلمات
يوفر هذا الفصل نظرة شاملة على جميع طرق PEFT الرئيسية، مما يساعدك على اختيار الطريقة المناسبة لحالتك.
تصنيف طرق PEFT
1. LoRA (التكيف منخفض الرتبة)
كيف تعمل
تضيف LoRA مصفوفات تحلل منخفضة الرتبة قابلة للتدريب بجانب الأوزان المجمدة.
الأصلي: h = Wx
LoRA: h = Wx + BAx
حيث:
- W مجمدة (d × d)
- B قابلة للتدريب (d × r)
- A قابلة للتدريب (r × d)
- r أصغر بكثير من d (رتبة منخفضة، مثل 8-64)
التمثيل البصري
التكوين
from peft import LoraConfig
lora_config = LoraConfig(
r=16, # الرتبة (السعة)
lora_alpha=32, # عامل التحجيم
target_modules=[ # أين يتم التطبيق
"q_proj",
"k_proj",
"v_proj",
"o_proj",
"gate_proj",
"up_proj",
"down_proj",
],
lora_dropout=0.05, # التنظيم
bias="none", # لا تدرب الانحرافات
task_type="CAUSAL_LM",
)
الإيجابيات والسلبيات
| الإيجابيات | السلبيات |
|---|---|
| فعالة جداً | تحتاج إلى ضبط المعلمات الفائقة |
| مفهومة جيداً | اختيار الرتبة مهم |
| مدعومة على نطاق واسع | عبء صغير على الاستدلال |
| يمكن دمجها | — |
2. QLoRA (LoRA الكمي)
كيف تعمل
تجمع بين التكميم 4-بت وLoRA لتحقيق كفاءة قصوى.
1. تحميل النموذج الأساسي في 4-بت (صيغة NF4)
2. إضافة مهايئات LoRA في fp16/bf16
3. تدريب فقط على معلمات LoRA
4. تتدفق التدرجات عبر الأوزان غير المكممة
التكوين
from transformers import BitsAndBytesConfig
from peft import LoraConfig
# تكوين التكميم
bnb_config = BitsAndBytesConfig(
load_in_4bit=True,
bnb_4bit_quant_type="nf4",
bnb_4bit_compute_dtype=torch.bfloat16,
bnb_4bit_use_double_quant=True, # توفير إضافي
)
# تحميل النموذج المكمم
model = AutoModelForCausalLM.from_pretrained(
model_name,
quantization_config=bnb_config,
)
# تطبيق LoRA على القمة
lora_config = LoraConfig(r=16, lora_alpha=32, ...)
model = get_peft_model(model, lora_config)
مقارنة الذاكرة
| النموذج | LoRA | QLoRA | التوفير |
|---|---|---|---|
| 7B | ~14GB | ~6GB | 57% |
| 13B | ~26GB | ~10GB | 62% |
| 70B | ~140GB | ~48GB | 66% |
3. توجيه البادئة
كيف تعمل
تضيف "رموز افتراضية" قابلة للتدريب كبادئات لحالات المفتاح والقيمة في طبقات الانتباه.
الانتباه العادي: Attention(Q, K, V)
توجيه البادئة: Attention(Q, [P_K; K], [P_V; V])
حيث P_K، P_V هي تضمينات البادئة المتعلمة
التكوين
from peft import PrefixTuningConfig
prefix_config = PrefixTuningConfig(
task_type="CAUSAL_LM",
num_virtual_tokens=20, # عدد رموز البادئة
prefix_projection=True, # استخدام MLP للإسقاط
)
حالات الاستخدام
- تكييف خاص بالمهمة
- عندما لا يمكنك تعديل أوزان النموذج
- تحسين التوجيه المستمر
4. توجيه التوجيه
كيف تعمل
يتعلم تضمينات مستمرة تسبق تسلسل المدخلات.
العادي: embed("ما هو الذكاء الاصطناعي؟")
توجيه التوجيه: [التوجيهات المتعلمة] + embed("ما هو الذكاء الاصطناعي؟")
التكوين
from peft import PromptTuningConfig
prompt_config = PromptTuningConfig(
task_type="CAUSAL_LM",
num_virtual_tokens=8,
prompt_tuning_init="TEXT", # التهيئة من النص
prompt_tuning_init_text="صنف ما يلي:",
)
الخصائص
- أقل عدد من المعلمات القابلة للتدريب
- يعمل بشكل جيد للتصنيف
- أقل مرونة من LoRA
- لا يوجد تعديل على الأجزاء الداخلية للنموذج
5. IA3 (المهايئ المدمج عن طريق تثبيط وتضخيم التنشيطات الداخلية)
كيف تعمل
يتعلم إعادة قياس التنشيطات بدلاً من إضافة أوزان جديدة.
الأصلي: h = activation(Wx)
IA3: h = activation(W(l_v ⊙ x)) * l_k
حيث l_v، l_k هما متجهات التحجيم المتعلمة
التكوين
from peft import IA3Config
ia3_config = IA3Config(
task_type="CAUSAL_LM",
target_modules=["k_proj", "v_proj", "down_proj"],
feedforward_modules=["down_proj"],
)
الخصائص
- حتى أقل عدد من المعلمات من LoRA
- عبء حسابي ضئيل
- جيد لبعض المهام، أقل تنوعاً
- تبني في مرحلة البحث
6. AdaLoRA (LoRA التكيفي)
كيف تعمل
تخصص الرتبة ديناميكياً لمصفوفات الأوزان المختلفة بناءً على الأهمية.
بدلاً من: رتبة ثابتة r لجميع الطبقات
AdaLoRA: rank_i بناءً على درجة الأهمية
الطبقات المهمة → رتبة أعلى
الأقل أهمية → رتبة أقل
التكوين
from peft import AdaLoraConfig
adalora_config = AdaLoraConfig(
init_r=12, # الرتبة الأولية
target_r=4, # الرتبة المتوسطة المستهدفة
tinit=200, # خطوات الإحماء
tfinal=1000, # متى تتوقف عن التكيف
deltaT=10, # تكرار التحديث
beta1=0.85,
beta2=0.85,
)
متى تستخدم
- عندما تكون غير متأكد من اختيار الرتبة
- لتحقيق تخصيص مثالي للمعلمات
- عندما تكون مستعداً للمقايضة بين التعقيد والكفاءة
مقارنة الطرق
المعلمات والذاكرة
| الطريقة | المعلمات | الذاكرة | الجودة |
|---|---|---|---|
| LoRA | ~0.1-1% | منخفضة | ⭐⭐⭐⭐⭐ |
| QLoRA | ~0.1-1% | منخفضة جداً | ⭐⭐⭐⭐ |
| البادئة | ~0.1% | منخفضة جداً | ⭐⭐⭐ |
| التوجيه | ~0.01% | منخفضة جداً | ⭐⭐⭐ |
| IA3 | ~0.01% | منخفضة جداً | ⭐⭐⭐ |
| AdaLoRA | متغيرة | منخفضة | ⭐⭐⭐⭐ |
توصيات حالات الاستخدام
| حالة الاستخدام | الطريقة الموصى بها |
|---|---|
| التكيف العام | LoRA |
| ذاكرة محدودة | QLoRA |
| مهام متعددة متشابهة | توجيه التوجيه |
| تكييف المهمة | توجيه البادئة |
| أقل عدد من المعلمات | IA3 |
| الكفاءة المثلى | AdaLoRA |
دمج الطرق
LoRA + التكميم
# أكثر الجمعيات شيوعاً
bnb_config = BitsAndBytesConfig(load_in_4bit=True, ...)
model = load_model(quantization_config=bnb_config)
model = get_peft_model(model, lora_config)
مهايئات LoRA متعددة
# تدريب مهايئات مختلفة
model.add_adapter("task_a", lora_config_a)
model.add_adapter("task_b", lora_config_b)
# التبديل بينها
model.set_adapter("task_a")
# أو
model.set_adapter("task_b")
اختيار الطريقة الصحيحة
النقاط الرئيسية
✅ LoRA هي الطريقة الأكثر تنوعاً واستخداماً على نطاق واسع في PEFT
✅ QLoRA تضيف التكميم لتحقيق كفاءة قصوى في الذاكرة
✅ يعمل توجيه التوجيه/البادئة بدون تعديل أوزان النموذج
✅ IA3 تقدم أقل عدد من المعلمات ولكن أقل مرونة
✅ اختر بناءً على قيود الذاكرة ومتطلبات الجودة
✅ يمكن دمج الطرق (مثل QLoRA = التكميم + LoRA)
الخطوات التالية
اختبر معرفتك مع اختبار الوحدة 3، ثم تعمق في LoRA في الوحدة 4: تعمق في LoRA.
تحقق سريع
قبل المتابعة، تأكد من أنك تستطيع الإجابة:
- ما هو الفرق الرئيسي بين LoRA وQLoRA؟
- كيف يعمل توجيه البادئة من الناحية المفاهيمية؟
- أي طريقة PEFT تستخدم أقل عدد من المعلمات؟