إنتقل إلى المحتوى الرئيسي

الفصل 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)

مقارنة الذاكرة​

النموذجLoRAQLoRAالتوفير
7B~14GB~6GB57%
13B~26GB~10GB62%
70B~140GB~48GB66%

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.


تحقق سريع​

قبل المتابعة، تأكد من أنك تستطيع الإجابة:

  1. ما هو الفرق الرئيسي بين LoRA وQLoRA؟
  2. كيف يعمل توجيه البادئة من الناحية المفاهيمية؟
  3. أي طريقة PEFT تستخدم أقل عدد من المعلمات؟