fine-tuning ونقل التعلم: دليل تدريب النماذج
يُعد fine-tuning عملية تخصيص النماذج المُدرّبة مسبقًا لمهام أو مجالات محددة. ومع اتباع استراتيجيات fine-tuning المناسبة، يمكن تحقيق زيادات في الأداء تصل إلى 40% في حلول الذكاء الاصطناعي الخاصة بالمؤسسات.
أساسيات Transfer Learning
Transfer learning هو عملية نقل المعرفة المكتسبة في مهمة ما إلى مهمة أخرى.
مزايا Transfer Learning
- كفاءة البيانات: نتائج جيدة مع بيانات أقل
- توفير الوقت: أسرع بكثير من التدريب من الصفر
- تقليل التكلفة: موارد حوسبة أقل
- الأداء: الاستفادة من المعرفة المُدرّبة مسبقًا
Pre-training مقابل Fine-tuning
1Pre-training: 2- Large, general dataset (TBs) 3- Learning general language/task understanding 4- Training takes months 5- Cost in millions of dollars 6 7Fine-tuning: 8- Small, domain-specific dataset (MB-GB) 9- Specific task adaptation 10- Training takes hours-days 11- Cost in thousands of dollars
Full Fine-Tuning
تحديث جميع معاملات النموذج.
المزايا
- أعلى قدرة على التكيّف
- أعلى أداء ممكن
العيوب
- حاجة كبيرة للذاكرة
- خطر النسيان الكارثي
- نسخة نموذج منفصلة لكل مهمة
متطلبات العتاد
| Model Size | GPU Memory (FP32) | GPU Memory (FP16) |
|---|---|---|
| 7B | 28 GB | 14 GB |
| 13B | 52 GB | 26 GB |
| 70B | 280 GB | 140 GB |
Parameter-Efficient Fine-Tuning (PEFT)
تدريب النموذج عبر تحديث جزء صغير فقط من المعاملات.
مزايا PEFT
- كفاءة الذاكرة: تقليل بنسبة 90%+
- السرعة: تدريب أسرع
- المرونة (Modularity): نموذج أساسي واحد وملفات adapters متعددة
- النسيان الكارثي: تقليل المخاطر إلى الحد الأدنى
LoRA (Low-Rank Adaptation)
أشهر أسلوب في PEFT.
نظرية LoRA
تحديث مصفوفة الأوزان تقريبًا باستخدام مصفوفات منخفضة الرتبة:
1W' = W + ΔW = W + BA 2 3Where: 4- W: Original weight matrix (d × k) 5- B: Low-rank matrix (d × r) 6- A: Low-rank matrix (r × k) 7- r: Rank (typical: 8-64)
توفير المعاملات
1Original: d × k parameters 2LoRA: r × (d + k) parameters 3 4Example (d=4096, k=4096, r=16): 5Original: 16.7M parameters 6LoRA: 131K parameters 7Savings: ~127x
إعداد LoRA
1from peft import LoraConfig, get_peft_model 2 3config = LoraConfig( 4 r=16, # Rank 5 lora_alpha=32, # Scaling factor 6 target_modules=[ # Which layers to apply 7 "q_proj", 8 "k_proj", 9 "v_proj", 10 "o_proj" 11 ], 12 lora_dropout=0.05, 13 bias="none", 14 task_type="CAUSAL_LM" 15) 16 17model = get_peft_model(base_model, config)
معلمات LoRA
الرتبة (r):
- منخفضة (4-8): مهام بسيطة، بيانات قليلة
- متوسطة (16-32): استخدام عام
- عالية (64-128): تكيّف معقد
Alpha:
- غالبًا alpha = 2 × r
الوحدات المستهدفة (Target Modules):
- طبقات Attention: q_proj، k_proj، v_proj، o_proj
- طبقات MLP: gate_proj، up_proj، down_proj
QLoRA (Quantized LoRA)
مزيج من LoRA + quantization بدقة 4-bit.
ميزات QLoRA
- 4-bit NormalFloat (NF4): تنسيق quantization مخصص
- Double Quantization: ضغط إضافي لثوابت quantization
- Paged Optimizers: إدارة تدفق الذاكرة في GPU
مقارنة استهلاك الذاكرة في QLoRA
| Method | 7B Model | 70B Model |
|---|---|---|
| Full FT (FP32) | 28 GB | 280 GB |
| Full FT (FP16) | 14 GB | 140 GB |
| LoRA (FP16) | 12 GB | 120 GB |
| QLoRA (4-bit) | 6 GB | 48 GB |
تنفيذ QLoRA
1from transformers import BitsAndBytesConfig 2import torch 3 4bnb_config = BitsAndBytesConfig( 5 load_in_4bit=True, 6 bnb_4bit_use_double_quant=True, 7 bnb_4bit_quant_type="nf4", 8 bnb_4bit_compute_dtype=torch.bfloat16 9) 10 11model = AutoModelForCausalLM.from_pretrained( 12 "meta-llama/Llama-2-7b-hf", 13 quantization_config=bnb_config, 14 device_map="auto" 15) 16## أساليب PEFT الأخرى 17 18### Prefix Tuning 19 20إضافة بادئات قابلة للتعلم إلى تمثيلات الإدخال: 21
Input: [PREFIX_1, PREFIX_2, ..., PREFIX_N, token_1, token_2, ...]
1 2### Prompt Tuning 3 4تعلم *البرومبتات* الناعمة: 5
[SOFT_PROMPT] + "Actual input text"
1 2### Adapter Layers 3 4إضافة شبكات صغيرة بين طبقات المحول: 5
Attention → Adapter → LayerNorm → FFN → Adapter → LayerNorm
1 2### (IA)³ - Infused Adapter 3 4ضرب التفعيلات بمتجهات متعلمة: 5
output = activation × learned_vector
1 2## إعداد البيانات 3 4### صيغ البيانات 5 6**صيغة التعليمات:** 7```json 8{ 9 "instruction": "Summarize this text", 10 "input": "Long text...", 11 "output": "Summary..." 12}
صيغة الدردشة:
1{ 2 "messages": [ 3 {"role": "system", "content": "You are a helpful assistant"}, 4 {"role": "user", "content": "Question..."}, 5 {"role": "assistant", "content": "Answer..."} 6 ] 7}
جودة البيانات
خصائص البيانات الجيدة:
- التنوع (أمثلة متنوعة)
- الاتساق (تنسيق ثابت)
- الدقة (تسميات دقيقة)
- كمية كافية (عادة 1K–100K مثال)
تعزيز البيانات
1# Paraphrasing 2augmented_data = paraphrase(original_data) 3 4# Back-translation 5translated = translate(text, "tr") 6back_translated = translate(translated, "en") 7 8# Synonym replacement 9augmented = replace_synonyms(text)
استراتيجيات التدريب
اختيار الهايبر باراميترز
1training_args = TrainingArguments( 2 learning_rate=2e-4, # Typical for LoRA 3 num_train_epochs=3, 4 per_device_train_batch_size=4, 5 gradient_accumulation_steps=4, 6 warmup_ratio=0.03, 7 lr_scheduler_type="cosine", 8 fp16=True, 9 logging_steps=10, 10 save_strategy="epoch", 11 evaluation_strategy="epoch" 12)
معدل التعلم
- Full fine-tuning: 1e-5 - 5e-5
- LoRA: 1e-4 - 3e-4
- QLoRA: 2e-4 - 5e-4
التنظيم (Regularization)
1# Weight decay 2weight_decay=0.01 3 4# Dropout 5lora_dropout=0.05 6 7# Gradient clipping 8max_grad_norm=1.0
التقييم والتحقق
المقاييس
Perplexity:
PPL = exp(average cross-entropy loss) Lower = better
BLEU/ROUGE: جودة توليد النص
حسب المهمة: Accuracy، F1، مقاييس مخصصة
اكتشاف فرط التخصيص (Overfitting)
1Train loss ↓ + Validation loss ↑ = Overfitting 2 3Solutions: 4- Early stopping 5- More dropout 6- Data augmentation 7- Fewer epochs
النشر
دمج النموذج
دمج LoRA adapter داخل النموذج الأساسي:
merged_model = model.merge_and_unload() merged_model.save_pretrained("merged_model")
تقديم متعدد المهايئات (Multi-Adapter Serving)
عدة مهايئات مع نموذج أساسي واحد:
1from peft import PeftModel 2 3base_model = AutoModelForCausalLM.from_pretrained("base") 4model_a = PeftModel.from_pretrained(base_model, "adapter_a") 5model_b = PeftModel.from_pretrained(base_model, "adapter_b")
خط أنابيب Fine-Tuning للمؤسسات
1┌─────────────┐ ┌─────────────┐ ┌─────────────┐ 2│ Data │────▶│ Training │────▶│ Evaluation │ 3│ Preparation │ │ (LoRA/QLoRA)│ │ & Testing │ 4└─────────────┘ └─────────────┘ └──────┬──────┘ 5 │ 6 ┌─────────────┐ ┌──────▼──────┐ 7 │ Production │◀────│ Model │ 8 │ Deployment │ │ Registry │ 9 └─────────────┘ └─────────────┘
المشكلات الشائعة والحلول
1. نفاد الذاكرة
الحل: QLoRA، gradient checkpointing، تقليل حجم الدفعة
2. النسيان الكارثي
الحل: خفض معدل التعلم، replay buffer، elastic weight consolidation
3. فرط التخصيص
الحل: المزيد من البيانات، تنظيم، إيقاف مبكر
4. ضعف التعميم
الحل: زيادة تنوع البيانات، تنوع التعليمات
الخلاصة
يُعد Fine-tuning الطريقة الأكثر فعالية لتكييف النماذج المُدرَّبة مسبقًا مع احتياجات المؤسسات. يمكن تنفيذ تخصيصات قوية حتى مع موارد محدودة باستخدام أساليب PEFT مثل LoRA و QLoRA.
في Veni AI، نقدم خدمات الاستشارة والتنفيذ لمشاريع Fine-tuning الخاصة بالمؤسسات. تواصل معنا لتلبية احتياجاتك.
