دليل شامل لتعليم نماذج الذكاء الاصطناعي مهارات جديدة: الضبط الدقيق المُشرَف (SFT)، وLoRA/QLoRA، وRLHF، وDPO، وGRPO، وتقطير النماذج، ودمج النماذج، والتقييم. من الفكرة إلى الإنتاج — مع كود عملي في كل خطوة.
يمنح التدريب المسبق النموذج معرفة واسعة بالعالم، لكنه يمنحه مهارة واحدة فقط: التنبؤ بالـ token التالي. لقد رأى النموذج ويكيبيديا والكود والكتب والويب — لكنه لا يعرف كيف يكون مفيداً، أو يتبع التعليمات، أو يرفض الطلبات الخطرة. الضبط الدقيق هو عملية تعليم هذه السلوكيات بعد التدريب المسبق.
تقارب القطاع نحو سلّم تدريب قياسي تتبعه جميع النماذج الرائدة الكبرى (GPT-4o وClaude Opus 4.6 وLlama 4 وGemini 2.5). تبني كل مرحلة على سابقتها — لا يمكنك تخطّي SFT والقفز مباشرة إلى RLHF.
graph LR A[Raw Text Corpus] -->|Pretraining cross-entropy| B[Base Model] B -->|Supervised Fine-Tuning| C[Instruction-Following Model] C -->|RLHF / DPO / GRPO| D[Aligned Model] D -->|Evaluation & Red-teaming| E[Production Model]
تنبؤ ذاتي الإشراف بالـ token التالي على مجموعات نصية ضخمة. يرمّز معرفة العالم.
ضبط دقيق مُشرَف على أزواج تعليمات-استجابة. يعلّم النموذج أن يكون مفيداً.
RLHF أو DPO أو GRPO على بيانات تفضيلات بشرية. يجعل المخرجات آمنة ومُفضَّلة.
اختبارات أداء آلية + red-teaming. اكتشف الانحدارات قبل الإطلاق.
يدرّب SFT النموذج على التنبؤ بـ tokens المساعد بناءً على سياق محادثة. التفصيل الأساسي هو loss masking: تُحسَب خسارة الإنتروبيا المتقاطعة على tokens المساعد فقط، وليس على الـ prompt الخاص بالنظام أو أدوار المستخدم. وهذا يمنع النموذج من «تعلّم» جانب المستخدم في المحادثة.
تهيمن ثلاثة تنسيقات على مشهد SFT. وقد أصبح ChatML الأوسع اعتماداً بفضل tokens الخاصة الواضحة لديه.
<|im_start|>system You are a helpful AI assistant specialized in European AI regulation. <|im_end|> <|im_start|>user What are the key obligations under the EU AI Act for high-risk systems? <|im_end|> <|im_start|>assistant High-risk AI systems under the EU AI Act (in force August 2024) must comply with... <|im_end|>
| المعامل | القيمة النموذجية | ملاحظات |
|---|---|---|
| Learning rate | 2e-5 | أقل من التدريب المسبق؛ تناقص جيب التمام |
| Epochs | 2–3 | مزيد من الحقب → فرط تكيّف على مجموعات البيانات الصغيرة |
| Batch size (effective) | 64–128 | استخدم تراكم التدرّج لذاكرة GPU الصغيرة |
| Warmup ratio | 0.1 | 10% من الخطوات لإحماء معدل التعلّم |
| Max sequence length | 2048–8192 | طابق نافذة سياق الاستدلال لديك |
from transformers import AutoModelForCausalLM, AutoTokenizer
from trl import SFTConfig, SFTTrainer
from datasets import load_dataset
import torch
model_name = "meta-llama/Llama-4-Scout-17B-16E-Instruct" # 2026: Llama 4 Scout replaces Llama 3.1 8B
model = AutoModelForCausalLM.from_pretrained(
model_name, torch_dtype=torch.bfloat16, device_map="auto"
)
tokenizer = AutoTokenizer.from_pretrained(model_name)
dataset = load_dataset("HuggingFaceH4/ultrachat_200k", split="train_sft")
sft_config = SFTConfig(
output_dir="./sft-llama-4-scout",
num_train_epochs=3,
per_device_train_batch_size=2,
gradient_accumulation_steps=8,
learning_rate=2e-5,
lr_scheduler_type="cosine",
warmup_ratio=0.1,
logging_steps=10,
save_strategy="epoch",
bf16=True,
)
trainer = SFTTrainer(
model=model,
args=sft_config,
train_dataset=dataset,
processing_class=tokenizer,
)
trainer.train()
trainer.save_model()يعدّل الضبط الدقيق الكامل جميع المعاملات الـ ~7 مليار لنموذج 7B. وعند bfloat16 يبلغ ذلك 14 غيغابايت لمجرد تخزين المعاملات، إضافة إلى التدرّجات وحالات المُحسِّن. يستغل LoRA (Low-Rank Adaptation، Hu et al. 2021) ملاحظة تجريبية أساسية: تغيّرات الأوزان أثناء الضبط الدقيق منخفضة الرتبة.
بدلاً من تعلّم تحديث أوزان كامل ΔW ∈ ℝ^(d×k)، يتعلّم LoRA مصفوفتين صغيرتين: A ∈ ℝ^(d×r) وB ∈ ℝ^(r×k) حيث r ≪ min(d, k). وعند الاستدلال، يُطوى المحوّل من جديد: W′ = W + αAB/r. وبمجرد الدمج، تكون نفقات الاستدلال صفراً.
from peft import LoraConfig, TaskType, get_peft_model
config = LoraConfig(
task_type=TaskType.CAUSAL_LM,
r=16,
lora_alpha=32,
lora_dropout=0.05,
target_modules=[
"q_proj", "k_proj", "v_proj", "o_proj",
"gate_proj", "up_proj", "down_proj",
],
bias="none",
)
model = get_peft_model(base_model, config)
model.print_trainable_parameters()
# trainable params: 83,886,080 || all params: 8,030,261,248 || trainable%: 1.044
# After training, merge adapter back into the base weights
merged = model.merge_and_unload()
merged.save_pretrained("./my-lora-merged")| الطريقة | المعاملات القابلة للتدريب | ذاكرة GPU (8B) | الجودة | سرعة التدريب |
|---|---|---|---|---|
| Full Fine-Tuning | 7B (100%) | ~80 GB | الأفضل | الأبطأ |
| LoRA r=4 | ~21M (0.3%) | ~16 GB | جيدة | سريعة |
| LoRA r=16 | ~83M (1.0%) | ~18 GB | جيدة جداً | سريعة |
| LoRA r=64 | ~335M (4.1%) | ~24 GB | قريبة من الضبط الكامل | معتدلة |
حتى مع LoRA، يتطلب النموذج الأساس المُحمَّل بـ bfloat16 16 غيغابايت لنموذج 8B — وهو ما يتجاوز ميزانيات وحدات GPU الاستهلاكية. يحل QLoRA (Dettmers et al. 2023) ذلك بتكميم النموذج الأساس المُجمَّد إلى NormalFloat بـ 4 بت (NF4) وتدريب محوّلات LoRA بدقة bfloat16.
NormalFloat4 هو الأمثل نظرياً من حيث المعلومات للأوزان الموزّعة توزيعاً طبيعياً في الشبكات العصبية. خطأ أقل من int4 أو fp4.
تُصفَّح حالات المُحسِّن تلقائياً إلى ذاكرة CPU عند امتلاء ذاكرة GPU، ما يمنع أعطال نفاد الذاكرة (OOM) أثناء التدريب.
يُكمِّم ثوابت التكميم نفسها، موفّراً نحو 0.5 بت إضافي لكل معامل.
| النموذج | ذاكرة FP16 | ذاكرة QLoRA | أدنى GPU |
|---|---|---|---|
| Llama 4 Scout (17B) | 34 GB | 10 GB | RTX 4090 24GB |
| Llama 4 Maverick (70B-class) | 140 GB | 40 GB | 2× A100 40GB |
| Llama 4 Behemoth (frontier) | 800+ GB | ~200 GB | 8× H100 80GB |
from transformers import AutoModelForCausalLM, BitsAndBytesConfig
import torch
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(
"meta-llama/Llama-4-Maverick-17B-128E-Instruct", # 2026: Llama 4 Maverick replaces Llama 3.1 70B
quantization_config=bnb_config,
device_map="auto",
)
# Now apply LoRA to the 4-bit model — same LoraConfig + get_peft_model as beforeكان التعلّم المعزَّز من التغذية الراجعة البشرية (RLHF) الاختراق الذي حوّل GPT-3 إلى InstructGPT وفي النهاية إلى GPT-4o. فهو يواءم سلوك النموذج مع التفضيلات البشرية — ليس مجرد اتباع التعليمات، بل جعل المخرجات مُفضَّلة وآمنة ومفيدة حقاً.
ضبط دقيق للنموذج الأساس على مجموعة مُنتقاة من عروض اتباع التعليمات عالية الجودة. يُنشئ هذا السياسة الأولية التي سيُحسّنها RLHF.
درّب مصنّفاً على تفضيلات بشرية ثنائية: بإعطاء استكمالين (y_w، y_l) للـ prompt نفسه، أيهما أفضل؟ الخسارة: log σ(r(x, y_w) − r(x, y_l)).
استخدم Proximal Policy Optimization لتعظيم درجة نموذج المكافأة مع البقاء قريباً من سياسة SFT (تمنع عقوبة تباعد KL اختراق المكافأة).
graph LR A[Base Model] -->|SFT on demos| B[SFT Model] B -->|Sample completions| C[Completion Pairs] C -->|Human labelers rank| D[Preference Dataset] D -->|Train| E[Reward Model] B -->|Initialize policy| F[Policy Model] F -->|Rollout + PPO| G[RL Optimization] E -->|Score rollouts| G G -->|Converged| H[RLHF Model]
يلغي DPO (Direct Preference Optimization) (Rafailov et al. 2023) نموذج المكافأة بالكامل. وقد أثبت رياضياً أنه يمكن التعبير عن سياسة RLHF المثلى مباشرة كدالة في بيانات التفضيل، ما يختزل خط أنابيب من ثلاث مراحل إلى خطوة ضبط دقيق واحدة.
تُحسّن خسارة DPO السياسة مباشرة على أزواج التفضيل (prompt، chosen، rejected) باستخدام نموذج SFT كمرجع مُجمَّد. لا PPO، ولا نموذج مكافأة، ولا جمع منفصل لبيانات تدريب نموذج المكافأة.
from trl import DPOConfig, DPOTrainer
from datasets import load_dataset
# Dataset needs: prompt, chosen, rejected columns
dataset = load_dataset("HuggingFaceH4/ultrafeedback_binarized", split="train_prefs")
dpo_config = DPOConfig(
output_dir="./dpo-output",
num_train_epochs=3,
per_device_train_batch_size=2,
gradient_accumulation_steps=8,
learning_rate=5e-7, # much smaller than SFT lr
beta=0.1, # KL penalty coefficient
bf16=True,
)
trainer = DPOTrainer(
model=sft_model, # your SFT fine-tuned model
ref_model=sft_ref_model, # frozen reference
args=dpo_config,
train_dataset=dataset,
processing_class=tokenizer,
)
trainer.train()تلغي Group Relative Policy Optimization (GRPO) (المستخدمة في DeepSeek-R1) نموذج المرجع. فلكل prompt، تأخذ عينات من مخرجات متعددة وتستخدم متوسط مكافأة المجموعة كخط أساس لتقدير الميزة. وهذا أرخص من PPO (لا نموذج قيمة) وأنسب لمهام الاستدلال التي يمكنك التحقق من صحتها برمجياً.
| الطريقة | الحوسبة | الاستقرار | متطلبات البيانات | ملاحظات |
|---|---|---|---|---|
| RLHF (PPO) | عالية جداً | منخفض | ترتيبات بشرية | 4 نماذج في الذاكرة؛ خطر اختراق المكافأة |
| DPO | منخفضة | عالٍ | أزواج تفضيل | لا نموذج مكافأة؛ خط أنابيب أبسط |
| GRPO | متوسطة | متوسط | عينات rollout | لا نموذج مرجع؛ جيد للاستدلال |
| SimPO | منخفضة | عالٍ | أزواج تفضيل | لا نموذج مرجع؛ مكافأة متوسط الاحتمال اللوغاريتمي |
يدرّب تقطير المعرفة نموذجاً صغيراً «طالباً» على محاكاة نموذج كبير «معلّم». والفكرة الأساسية هي أن المعلّم يوفّر توزيعات احتمالية ناعمة على المفردات (logits) بدلاً من تسميات one-hot. تُرمِّز هذه الأهداف الناعمة معلومات أكثر بكثير — فهي تكشف أي tokens تشبه دلالياً الإجابة الصحيحة، ما يمنح الطالب إشارة تدريب أغنى.
الخسارة المركّبة: L = α × L_CE(التسميات الصلبة) + (1 − α) × L_KL(logits الطالب ‖ logits المعلّم). يُنعِّم تحجيم الحرارة T > 1 توزيع المعلّم، موزّعاً كتلة الاحتمال على مزيد من tokens وجاعلاً التسميات الناعمة أكثر إفادة.
graph TB A["Large Teacher (70B)"] -->|"Generate on training data"| B[Soft Logits] C[Input Prompt] --> A C --> D["Small Student (7B)"] B -->|KL Loss| D E[Ground Truth] -->|CE Loss| D D -->|Both losses| F[Distilled Student]
يحاكي الطالب مخرجات المعلّم — وَلِّد استكمالات المعلّم، ودرّب الطالب على إعادة إنتاجها. تستخدمه DeepSeek-R1-Distill لنقل آثار الاستدلال.
طابِق التمثيلات الوسيطة (الحالات المخفية، أنماط الانتباه) بين طبقات المعلّم والطالب. ينقل المعرفة البنيوية، لا مجرد المخرجات السطحية.
يقترح نموذج مسودة صغير تسلسلات tokens؛ ويتحقق منها النموذج الكبير بالتوازي. يحقق تسريع استدلال بمقدار 2–4 أضعاف دون فقدان في الجودة.
يولّد الطالب tokens؛ ويقيّمها المعلّم. يتجنّب انحياز التعرّض (عدم تطابق توزيع التدريب والاختبار) الشائع في التقطير غير المتصل.
يجمع دمج النماذج عدة نقاط تحقّق مضبوطة دقيقاً في نموذج واحد دون أي تدريب إضافي. وهو رخيص وسريع وفعّال على نحو مفاجئ في دمج مهارات متخصّصة — الكود والرياضيات واتباع التعليمات — في نموذج واحد قابل للنشر. وكثيراً ما تظهر النماذج المدموجة في صدارة HuggingFace Open LLM Leaderboard.
استيفاء سلس بين نقطتي تحقّق لنموذجين في فضاء الأوزان. يعامل الأوزان كنقاط على كرة فائقة الأبعاد. الأفضل لمزج نموذجين وثيقي الصلة.
احسب ΔW = W_FT − W_base لكل نموذج مضبوط دقيقاً، ثم اجمع الفروق معاً. يتيح لك تركيب القدرات أو طرح السلوكيات غير المرغوبة.
يحلّ التعارضات بين النماذج: قلّم المعاملات صغيرة المقدار، وانتخب الإشارة المهيمنة لكل وزن، ثم ادمج. يتعامل بنظافة مع 3 نماذج أو أكثر.
يُسقط فروق أوزان الضبط الدقيق عشوائياً (باحتمال p) ويعيد تحجيم الناجين للحفاظ على المعيار. يقلّل التداخل بين النماذج.
# mergekit config.yaml
models:
- model: meta-llama/Llama-4-Scout-17B-16E
parameters:
weight: 0.4
- model: ./llama-4-scout-code-finetuned
parameters:
weight: 0.3
- model: ./llama-4-scout-math-finetuned
parameters:
weight: 0.3
merge_method: ties
base_model: meta-llama/Llama-4-Scout-17B-16E
parameters:
density: 0.7
normalize: truemergekit-yaml config.yaml ./merged-model --cuda
جودة مجموعة البيانات هي العامل الأهم على الإطلاق في نجاح الضبط الدقيق — أهم من بنية النموذج أو مدة التدريب أو اختيار المُحسِّن. مجموعة بيانات سيئة التنسيق تضمن نتائج سيئة بصرف النظر عن أي شيء آخر.
أمثلة من تأليف الخبراء؛ أعلى نسبة إشارة إلى ضوضاء. تُستخدم للسلوكيات الحرجة.
توليد اصطناعي بنماذج رائدة. جيد لبدء تغطية المجال على نطاق واسع.
طوّر تعليمات أولية إلى متغيّرات أصعب وأكثر تنوعاً. تُستخدم في WizardLM وOpenHermes.
تتطلب ترشيح جودة صارماً: إزالة التكرار، ومرشّح الطول، ومرشّح الحيرة (perplexity)، ومرشّح الأمان.
{
"conversations": [
{"from": "system", "value": "You are an expert in EU AI regulation."},
{"from": "human", "value": "Explain the risk categories in the EU AI Act."},
{"from": "gpt", "value": "The EU AI Act categorizes AI systems into four risk levels..."}
]
}from openai import OpenAI # or use Mistral/Llama locally
client = OpenAI()
def generate_training_example(topic: str, difficulty: str) -> dict:
prompt = (
f"Generate a challenging {difficulty}-level question about {topic} "
"and a comprehensive expert answer."
)
response = client.chat.completions.create(
model="gpt-4o",
messages=[{"role": "user", "content": prompt}],
temperature=0.8,
)
content = response.choices[0].message.content
# Parse and structure output (question/answer split)...
return {"instruction": topic, "response": content}حلقة الضبط الدقيق هي: تدريب → تقييم على مجموعة محجوزة → تشخيص أنماط الفشل → تحسين البيانات → إعادة التدريب. التقييم الجيد هو ما يحوّل التجربة والخطأ إلى تحسين منهجي.
اختبار أداء متعدد الأدوار من 80 سؤالاً عبر 8 فئات (الكتابة، الرياضيات، البرمجة، إلخ.). يقيّم GPT-4 كل استجابة من 1–10.
معدل فوز نموذجك مقابل نموذج مرجعي (GPT-4o) كما يحكم به GPT-4o. تقييم آلي سريع لجودة اتباع التعليمات.
دقة اتباع التعليمات على قيود قابلة للتحقق (مثلاً 'أجِب في أقل من 100 كلمة'). متغيّرات تقييم صارمة وفضفاضة.
اختبارات أداء توليد الكود. مقياس Pass@k: نسبة المسائل المحلولة في k محاولات. حالات اختبار قابلة للتنفيذ كمرجع للحقيقة.
import json
from openai import OpenAI
client = OpenAI()
def evaluate_response(question: str, answer: str, judge_model: str = "gpt-4o") -> dict:
prompt = f"""Rate the following AI assistant response on a scale of 1-10.
Question: {question}
Answer: {answer}
Evaluate: helpfulness (1-10), factuality (1-10), safety (1-10).
Return JSON: {{"helpfulness": N, "factuality": N, "safety": N, "rationale": "..."}}"""
response = client.chat.completions.create(
model=judge_model,
messages=[{"role": "user", "content": prompt}],
response_format={"type": "json_object"},
)
return json.loads(response.choices[0].message.content)| التشغيل | النموذج الأساس | الطريقة | مجموعة البيانات | MT-Bench | AlpacaEval Win% | ملاحظات |
|---|---|---|---|---|---|---|
| v1 | Llama-4-Scout | SFT | UltraChat 200K | 7.4 | 70% | خط الأساس |
| v2 | Llama-4-Scout | SFT+DPO | + UltraFeedback | 8.0 | 76% | +DPO حسّن الأمان |
| v3 | Llama-4-Scout | SFT+DPO (r=16) | + UltraFeedback | 8.1 | 77% | LoRA r=16 مقابل الضبط الكامل |
الضبط الدقيق قوي لكنه ليس دائماً الأداة الصحيحة. يعتمد القرار على ما تحاول تغييره: المعرفة، أو السلوك، أو التنسيق، أو التفضيلات. الاختيار الخاطئ يكلّف أسابيع من الهندسة والحوسبة.
| السيناريو | أفضل نهج | لماذا |
|---|---|---|
| تأصيل الإجابات في مستندات الشركة | RAG | قد تتغير المعرفة؛ ولا يُحدَّث الضبط الدقيق بسهولة |
| الرغبة في نبرة/أسلوب متّسق | SFT | النبرة تنسيق، لا معرفة |
| استخدام مصطلحات خاصة بالمجال | SFT + بيانات قليلة | تغيير السلوك الافتراضي بتكلفة زهيدة |
| التعامل مع تنسيقات مخرجات محددة | SFT | الالتزام بالمخطط مهارة مُكتسَبة |
| تقليل المخرجات الضارة | DPO / RLHF | تستهدف مواءمة التفضيلات هذا مباشرة |
| الحاجة إلى قدرات استدلال | GRPO أو التقطير من R1 | أنماط الاستدلال قابلة للتدريب |
| إضافة معرفة واقعية جديدة | RAG (لا الضبط الدقيق) | يحفظ الضبط الدقيق عن ظهر قلب ولا يمكنه الاستشهاد بالمصادر |
| تقليل تكاليف API على نطاق واسع | ضبط دقيق لنموذج صغير | مضاهاة جودة النموذج الكبير في مهمة ضيّقة |
| نموذج أوّلي / تجربة سريعة | هندسة الـ prompt أولاً | تكلفة تدريب صفرية؛ تحقّق من الفكرة أولاً |
ابدأ من الأسفل. لا تصعد إلا عندما يكون المستوى الحالي غير كافٍ فعلاً — فكل درجة تضيف تكلفة وتعقيداً وكموناً.
سواء كنت بحاجة إلى مساعد خاص بمجال، أو نماذج مُواءَمة مع التفضيلات، أو عمليات نشر إنتاجية مُقطَّرة — فقد بناها فريقنا وأطلقها. لنتحدث عن حالة استخدامك.