الفصل 2: PEFT مقابل الضبط الدقيق الكامل
فهم التوازنات
يتطلب الاختيار بين PEFT والضبط الدقيق الكامل فهم نقاط القوة والقيود لكل منهما.
مقارنة شاملة
| الجانب | الضبط الدقيق الكامل | PEFT |
|---|---|---|
| الذاكرة | 4-6x حجم النموذج | 0.1-0.5x حجم النموذج |
| السرعة | أبطأ | أسرع 2-3x |
| سقف الجودة | الأعلى | أقل قليلاً |
| خطر النسيان | عالي | لا يوجد |
| الأجهزة | وحدات معالجة رسومات باهظة الثمن | وحدات معالجة رسومات للمستهلك |
| تبديل المحولات | لا | نعم |
| تكلفة الاستدلال | لا يوجد | ضئيل (أو دمج) |
مقارنة الذاكرة
تحليل مفصل
def calculate_memory(params_billions, method):
"""حساب الذاكرة التقريبية للتدريب."""
params = params_billions * 1e9
if method == "full_ft":
# الأوزان + التدرجات + المحسن (2 حالات) + التنشيطات
weights = params * 2 # bf16
gradients = params * 2
optimizer = params * 4 * 2 # fp32، 2 حالات
activations = params * 0.5 # تقدير تقريبي
return (weights + gradients + optimizer + activations) / 1e9
elif method == "lora":
# الأوزان المجمدة + تدرجات/محسن LoRA الصغيرة
weights = params * 2
lora_params = params * 0.01 # ~1% قابلة للتدريب
lora_training = lora_params * (2 + 2 + 8) # تدرج + محسن
return (weights + lora_training) / 1e9
elif method == "qlora":
# أوزان 4 بت + تدريب LoRA
weights = params * 0.5 # 4 بت
lora_params = params * 0.01
lora_training = lora_params * (2 + 2 + 8)
return (weights + lora_training) / 1e9
# النتائج لنموذج 7B
print(f"الضبط الكامل: {calculate_memory(7, 'full_ft'):.1f} GB") # ~77 GB
print(f"LoRA: {calculate_memory(7, 'lora'):.1f} GB") # ~15 GB
print(f"QLoRA: {calculate_memory(7, 'qlora'):.1f} GB") # ~4 GB
مقارنة الجودة
النتائج التجريبية
تظهر الأبحاث باستمرار أن PEFT يحقق جودة مماثلة:
| المهمة | الضبط الكامل | LoRA | الفرق |
|---|---|---|---|
| تصنيف النصوص | 94.2% | 93.8% | -0.4% |
| التلخيص | 45.3 ROUGE | 44.9 ROUGE | -0.9% |
| اتباع التعليمات | 8.2/10 | 8.0/10 | -2.4% |
| توليد الكود | 67.1% | 65.8% | -1.9% |
عندما يكون أداء PEFT أقل
قد يكون أداء PEFT أقل في:
- تحولات المجال الكبيرة: التدريب المسبق → مجال متخصص جداً
- تنسيقات المخرجات الجديدة: مختلفة جداً عن أي بيانات تدريب
- أقصى جودة ممكنة: عندما تكون كل 0.1% مهمة
- السلوكيات الجديدة المعقدة: الأنماط المدمجة بعمق
# مثال: قد يواجه PEFT صعوبة مع
# 1. نموذج طبي من LLM عام (تحول مجال كبير)
# 2. لغة جديدة تماماً ليست في التدريب المسبق
# 3. معايير المنافسة حيث كل نقطة مهمة
مقارنة سرعة التدريب
مقاييس الإنتاجية
| الطريقة | الوقت لكل عصر | السرعة النسبية |
|---|---|---|
| الضبط الكامل | 60 دقيقة | 1x |
| LoRA | 25 دقيقة | 2.4x |
| QLoRA | 30 دقيقة | 2x |
لماذا PEFT أسرع
- حسابات تدرج أقل: حساب التدرجات فقط للمعلمات القابلة للتدريب
- عرض نطاق ذاكرة أقل: عدد أقل من البايتات للتحريك
- تحديثات محسن أصغر: حالات أقل للحفاظ عليها
# حساب التدرج يتناسب مع المعلمات القابلة للتدريب
# الضبط الكامل: 7 مليارات حساب تدرج
# LoRA: 70 مليون حساب تدرج (100x أقل)
مقارنة المرونة
PEFT: محولات متعددة
# تحميل النموذج الأساسي مرة واحدة
base_model = AutoModelForCausalLM.from_pretrained("llama-3.1-8b")
# إنشاء محولات مختلفة
adapters = {
"customer_support": "adapters/support/",
"code_review": "adapters/code/",
"translation": "adapters/translate/",
}
# تبديل المحولات في وقت التشغيل
for task, adapter_path in adapters.items():
model = PeftModel.from_pretrained(base_model, adapter_path)
# استخدام النموذج للمهمة
model.unload() # إزالة المحول
الضبط الكامل: نماذج منفصلة
# كل مهمة تتطلب تحميل نموذج كامل مختلف
models = {
"customer_support": "models/support-full/", # 15GB
"code_review": "models/code-full/", # 15GB
"translation": "models/translate-full/", # 15GB
}
# المجموع: 45GB تخزين، تكلفة تبديل عالية
مقارنة الاستدلال
PEFT مع المحولات
# تكلفة طفيفة من حساب المحول
# التأخير: ~5-10% أبطأ لكل رمز
# الخيار 1: الحفاظ على المحول منفصل
model = PeftModel.from_pretrained(base, adapter)
output = model.generate(input_ids)
# الخيار 2: الدمج لعدم وجود تكلفة
model = model.merge_and_unload() # لا يوجد تكلفة محول
output = model.generate(input_ids)
PEFT المدمج = سرعة الضبط الكامل
بعد الدمج:
W_merged = W_base + B × A # حساب لمرة واحدة
# الاستدلال مطابق للنموذج المضبوط بالكامل
تحليل التكلفة
تكاليف التدريب
| الطريقة | وحدة معالجة الرسومات المطلوبة | الوقت | التكلفة (حسب الطلب) |
|---|---|---|---|
| الضبط الكامل (7B) | A100-80GB | 4 ساعات | $24 |
| LoRA (7B) | A100-40GB | 1.5 ساعة | $6 |
| QLoRA (7B) | RTX 4090 | 2 ساعة | $2 |
اعتبارات طويلة الأجل
السيناريو: ضبط دقيق لـ 10 مهام مختلفة
الضبط الكامل:
- 10 جولات تدريب على وحدات معالجة رسومات باهظة الثمن
- 10 نماذج كاملة للتخزين (150GB)
- تحميل نموذج مختلف لكل مهمة
PEFT:
- 10 جولات تدريب على وحدات معالجة رسومات أرخص
- 1 نموذج أساسي + 10 محولات (15GB + 200MB)
- تبديل محولات سريع
إطار اتخاذ القرار
اختر PEFT عندما:
✅ ذاكرة وحدة معالجة الرسومات محدودة (< 40GB)
✅ الحاجة إلى التجربة بسرعة
✅ الحاجة إلى تنويعات متعددة للمهمة
✅ الرغبة في الحفاظ على قدرات النموذج الأساسي
✅ التكلفة عامل مهم
✅ الإنتاج يتطلب تبديل المحولات
اختر الضبط الكامل عندما:
✅ الجودة القصوى مهمة
✅ مطلوب تحول مجال كبير
✅ الموارد ليست قيدًا
✅ الحاجة إلى نموذج لغرض واحد
✅ النشر كنموذج مدمج على أي حال
✅ البحث يتطلب تحكمًا كاملاً
استراتيجيات هجينة
ابدأ بـ PEFT، قم بالترقية إذا لزم الأمر
# المرحلة 1: تجربة سريعة مع LoRA
lora_model = train_with_lora(dataset_small)
evaluate(lora_model) # تحقق مما إذا كانت الجودة كافية
# المرحلة 2: إذا لم يكن PEFT كافيًا، جرب الضبط الكامل
if quality_gap > threshold:
full_ft_model = train_full(dataset_full)
PEFT للتكرار، الضبط الكامل للنهائي
# التكرار على البيانات/المعلمات الفائقة مع PEFT (سريع، رخيص)
for experiment in experiments:
model = train_lora(config=experiment)
score = evaluate(model)
if score > best_score:
best_config = experiment
# التدريب النهائي مع الضبط الكامل باستخدام أفضل الإعدادات
final_model = train_full(config=best_config)
توصيات عملية
لمعظم الحالات: ابدأ بـ PEFT
# التوصية الافتراضية لمعظم الممارسين
from peft import LoraConfig, get_peft_model
config = LoraConfig(
r=16,
lora_alpha=32,
target_modules=["q_proj", "v_proj", "k_proj", "o_proj"],
lora_dropout=0.05,
)
model = get_peft_model(base_model, config)
# التدريب والتقييم
للإنتاج: النظر في الدمج
# بعد التدريب، الدمج للنشر
model = model.merge_and_unload()
model.save_pretrained("./production-model")
# الآن يتصرف تمامًا مثل النموذج المضبوط بالكامل
النقاط الرئيسية
✅ يحقق PEFT 90-99% من جودة الضبط الكامل مع 80-95% ذاكرة أقل
✅ الضبط الكامل لديه سقف جودة أعلى ولكن بتكلفة كبيرة
✅ يتيح PEFT تبديل المحولات؛ الضبط الكامل ينشئ نماذج ثابتة
✅ PEFT المدمج لديه أداء استدلال مطابق للضبط الكامل
✅ ابدأ بـ PEFT، قم بالترقية إلى الضبط الكامل فقط إذا لزم الأمر
✅ النظر في التكلفة الإجمالية بما في ذلك التخزين، التبديل، والتكرار
الخطوات التالية
تابع إلى الفصل 3: نظرة عامة على طرق PEFT لاستكشاف جميع تقنيات PEFT المتاحة.
تحقق سريع
قبل المتابعة، تأكد من أنك تستطيع الإجابة:
- كم من الذاكرة يوفر PEFT مقارنة بالضبط الدقيق الكامل؟
- متى قد يتفوق الضبط الدقيق الكامل على PEFT؟
- ما هي ميزة محولات PEFT المدمجة؟