فهم الضبط الدقيق
شرح طرق PEFT
الضبط الدقيق الموفر للمعاملات (PEFT) هو عائلة من التقنيات التي تقلل بشكل كبير الموارد المطلوبة للضبط الدقيق. دعنا نستكشف الطرق الرئيسية.
LoRA: تكيف الرتبة المنخفضة
LoRA هي أشهر طريقة PEFT، تُستخدم في الغالبية العظمى من مشاريع الضبط الدقيق.
كيف يعمل LoRA
بدلاً من تحديث مصفوفة الأوزان الكاملة W، يضيف LoRA مصفوفتين صغيرتين:
الأصل: W (4096 x 4096 = 16M معامل)
LoRA: A (4096 x 16) × B (16 x 4096) = 131K معامل
التوفير: 99.2% معاملات قابلة للتدريب أقل!
تكوين LoRA
from peft import LoraConfig
config = LoraConfig(
r=16, # الرتبة - حجم مصفوفات LoRA
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" # لنماذج فك التشفير
)
المعاملات الأساسية
| المعامل | القيمة النموذجية | التأثير |
|---|---|---|
r (الرتبة) |
8-64 | أعلى = سعة أكثر، معاملات أكثر |
lora_alpha |
16-64 | يقيّس تحديث LoRA |
target_modules |
"all-linear" | أي الطبقات نعدّل |
lora_dropout |
0.0-0.1 | يمنع الإفراط في التعلم |
QLoRA: LoRA المُكَمَّم
QLoRA يجمع التكميم 4-bit مع LoRA، مما يتيح ضبط نماذج 70B على GPU واحد 24GB.
كيف يعمل QLoRA
- تكميم النموذج الأساسي إلى 4-bit NormalFloat (NF4)
- إضافة محولات LoRA فوق الأوزان المكمّمة
- التدريب بدقة مختلطة (المحولات بـ fp16/bf16)
from transformers import BitsAndBytesConfig
bnb_config = BitsAndBytesConfig(
load_in_4bit=True,
bnb_4bit_quant_type="nf4", # NormalFloat4 - الأمثل للأوزان
bnb_4bit_compute_dtype=torch.bfloat16,
bnb_4bit_use_double_quant=True # تكميم ثوابت التكميم
)
مقارنة ذاكرة LoRA مقابل QLoRA
| النموذج | ضبط كامل | LoRA | QLoRA |
|---|---|---|---|
| Llama 3.2 8B | 64GB | 18GB | 6GB |
| Mistral 7B | 56GB | 16GB | 5GB |
| Llama 3.3 70B | 560GB | 160GB | 24GB |
DoRA: LoRA مفكك الأوزان
DoRA (2024) يحسّن LoRA بتفكيك الأوزان إلى الحجم والاتجاه.
LoRA: W' = W + ΔW
DoRA: W' = m × (W + ΔW) / ||W + ΔW||
حيث m = الحجم المُتعلَّم، الاتجاه مُطبَّع
الفائدة: أداء أفضل، خاصة في المهام الصعبة.
طرق PEFT الأخرى
المحولات (Adapters)
وحدات شبكة عصبية صغيرة تُدخل بين طبقات المحول.
# هندسة المحول
المدخل → LayerNorm → إسقاط للأسفل → ReLU → إسقاط للأعلى → + المدخل
ضبط البادئة (Prefix Tuning)
يُلحق متجهات قابلة للتعلم للمدخل في كل طبقة.
ضبط المحث (Prompt Tuning)
يُلحق توكنات "محث ناعم" قابلة للتعلم للمدخل.
ملخص المقارنة
| الطريقة | الذاكرة | السرعة | الأداء | الأفضل لـ |
|---|---|---|---|---|
| LoRA | متوسطة | سريع | جيد جداً | الخيار الافتراضي |
| QLoRA | منخفضة | متوسط | جيد جداً | VRAM محدود |
| DoRA | متوسطة | متوسط | ممتاز | أفضل جودة مطلوبة |
| ضبط كامل | عالية جداً | بطيء | الأقصى | موارد غير محدودة |
أفضل الممارسات الحديثة (2025)
# التكوين الموصى للبداية
config = LoraConfig(
r=16,
lora_alpha=16,
target_modules="all-linear", # كل الطبقات الخطية
lora_dropout=0.0,
bias="none"
)
نصيحة: ابدأ بـ
r=16وtarget_modules="all-linear". قلل الرتبة أو الأهداف فقط إذا نفدت الذاكرة.
بعد ذلك، سنساعدك في اختيار النهج الصحيح لحالة استخدامك المحددة. :::