Veni AI
تدريب النماذج

دليل تدريب النماذج: الضبط الدقيق والتعلم النقلي

دليل تقني شامل لأساليب الضبط الدقيق لنماذج اللغة الكبيرة، وتقنيات LoRA وQLoRA وPEFT، وتخصيص نماذج الذكاء الاصطناعي للمؤسسات.

Veni AI Technical Team11 Ocak 20256 dk okuma
دليل تدريب النماذج: الضبط الدقيق والتعلم النقلي

fine-tuning ونقل التعلم: دليل تدريب النماذج

يُعد fine-tuning عملية تخصيص النماذج المُدرّبة مسبقًا لمهام أو مجالات محددة. ومع اتباع استراتيجيات fine-tuning المناسبة، يمكن تحقيق زيادات في الأداء تصل إلى 40% في حلول الذكاء الاصطناعي الخاصة بالمؤسسات.

أساسيات Transfer Learning

Transfer learning هو عملية نقل المعرفة المكتسبة في مهمة ما إلى مهمة أخرى.

مزايا Transfer Learning

  1. كفاءة البيانات: نتائج جيدة مع بيانات أقل
  2. توفير الوقت: أسرع بكثير من التدريب من الصفر
  3. تقليل التكلفة: موارد حوسبة أقل
  4. الأداء: الاستفادة من المعرفة المُدرّبة مسبقًا

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 SizeGPU Memory (FP32)GPU Memory (FP16)
7B28 GB14 GB
13B52 GB26 GB
70B280 GB140 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

  1. 4-bit NormalFloat (NF4): تنسيق quantization مخصص
  2. Double Quantization: ضغط إضافي لثوابت quantization
  3. Paged Optimizers: إدارة تدفق الذاكرة في GPU

مقارنة استهلاك الذاكرة في QLoRA

Method7B Model70B Model
Full FT (FP32)28 GB280 GB
Full FT (FP16)14 GB140 GB
LoRA (FP16)12 GB120 GB
QLoRA (4-bit)6 GB48 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└─────────────┘ └─────────────┘ └──────┬──────┘ 56 ┌─────────────┐ ┌──────▼──────┐ 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 الخاصة بالمؤسسات. تواصل معنا لتلبية احتياجاتك.

İlgili Makaleler