# الضبط الدقيق

يتضمن الضبط الدقيق مواصلة تدريب نموذج كبير مُدرَّب مسبقًا على مجموعة بيانات أصغر حجمًا ومخصصة لمهمة أو مجال معين. على سبيل المثال، يساعد الضبط الدقيق على مجموعة بيانات من أمثلة البرمجة النموذج على تحسين أدائه في البرمجة. يتطابق الضبط الدقيق مع التدريب المسبق باستثناء أنك لا تبدأ بأوزان عشوائية. كما أنه يتطلب قدرًا أقل بكثير من الحوسبة والبيانات والوقت.

يقدم الشرح أدناه خطوات ضبط نموذج لغة كبير باستخدام [Trainer](/docs/transformers/main/ar/main_classes/trainer#transformers.Trainer).

سجّل الدخول إلى حسابك على Hugging Face باستخدام رمز المستخدم الخاص بك لدفع النموذج المُحسَّن إلى Hub.

```py
from huggingface_hub import login

login()
```

## التجزئة

حمّل مجموعة بيانات و[قسّم](./fast_tokenizers) عمود النص الذي يتدرب عليه النموذج (`horoscope` في مجموعة البيانات أدناه).

<iframe src="https://huggingface.co/datasets/karthiksagarn/astro_horoscope/embed/viewer/default/train" frameborder="0" width="100%" height="560px"
>

ينشئ مُجزِّئ الرموز مدخلات النموذج، وهي `input_ids` و`attention_mask`. لا يقبل منهج النموذج الأمامي سوى `input_ids` و`attention_mask`، لذا اضبط `remove_columns` لإسقاط الأعمدة مثل `horoscope` بعد تجزئة الرموز.

- اضبط `truncation=True` وقيمة `max_length` لاختصار التسلسلات الأطول إلى الحد الأقصى المحدد.
- استخدم طريقة `train_test_split` لإنشاء مجموعة اختبار لتقييم النموذج.

```py
from datasets import load_dataset
from transformers import AutoTokenizer, DataCollatorForLanguageModeling

model_name = "Qwen/Qwen3-0.6B"
tokenizer = AutoTokenizer.from_pretrained(model_name)
dataset = load_dataset("karthiksagarn/astro_horoscope", split="train")

def tokenize(batch):
    return tokenizer(
        batch["horoscope"],
        truncation=True,
        max_length=512,
    )

dataset = dataset.map(tokenize, batched=True, remove_columns=dataset.column_names)
dataset = dataset.train_test_split(test_size=0.1)
```

يجمع مُجمِّع البيانات (Data Collator) عينات مجموعة البيانات في دفعات لمعالجتها بواسطة النموذج. يقوم [DataCollatorForLanguageModeling](/docs/transformers/main/ar/main_classes/data_collator#transformers.DataCollatorForLanguageModeling) بملء كل دفعة *بشكل ديناميكي* حتى طول أطول تسلسل موجود في تلك الدفعة، بدلاً من ملء كل تسلسل في مجموعة البيانات حتى نفس الطول. وهذا يوفر في الحسابات والذاكرة من خلال تجنب حساب رموز الملء غير الضرورية.

- اضبط `mlm=False` لتجنب إخفاء الرموز عشوائياً.

```py
data_collator = DataCollatorForLanguageModeling(tokenizer, mlm=False)
```

## تحميل نموذج

حمّل نقطة تحقق مُسبقة التدريب من أجل الضبط الدقيق (راجع دليل [تحميل النماذج](./models) لمزيد من التفاصيل حول تحميل النماذج).

- اضبط `dtype="auto"` لتحميل الأوزان بنوع البيانات (dtype) الذي تم حفظها به. بدونه، يقوم PyTorch بتحميل الأوزان بنوع `torch.float32`، مما يضاعف استهلاك الذاكرة إذا كانت الأوزان الأصلية من نوع `torch.bfloat16`.

```py
from transformers import AutoModelForCausalLM, TrainingArguments, Trainer

model_name = "Qwen/Qwen3-0.6B"
model = AutoModelForCausalLM.from_pretrained(model_name, dtype="auto")
```

## إعدادات التدريب

يوفر [TrainingArguments](/docs/transformers/main/ar/main_classes/trainer#transformers.TrainingArguments) جميع الخيارات لتخصيص جلسة تدريب. لا يتم هنا تغطية سوى أكثر الحجج شيوعاً. أما البقية فتمتلك قيم افتراضية معقولة أو تكون ذات صلة فقط بمواقف محددة مثل التدريب الموزع. راجع توثيق واجهة برمجة التطبيقات الخاصة بـ [TrainingArguments](/docs/transformers/main/ar/main_classes/trainer#transformers.TrainingArguments) للحصول على قائمة كاملة بالحجج.

- يتحكّم `num_train_epochs` و`per_device_train_batch_size` في مدة التدريب وحجم الدفعة. ويحدد `learning_rate` معدل التعلم الأولي لمُحسِّن التدريب.

- اضبط `bf16=True` لتدريب سريع بدقة مختلطة إذا كان جهازك يدعم ذلك (وحدات معالجة رسومية من نوع Ampere أو أحدث). وإلا، فاعتمد على `fp16=True` على الأجهزة الأقدم.
- `gradient_accumulation_steps` يحاكي حجم دفعة فعّالاً أكبر من خلال تجميع التدرجات عبر عدة تمريرات أمامية قبل تحديث الأوزان.
- يتنازل `gradient_checkpointing` عن الحساب مقابل الذاكرة من خلال إعادة حساب التفعيلات الوسيطة أثناء المرور العكسي بدلاً من تخزينها. للحصول على حل وسط بين الذاكرة والسرعة، راجع [التحقق الجزئي](./grad_checkpointing#partial-checkpointing).
- عند تعيين `gradient_checkpointing=True`، اضبط `gradient_checkpointing_kwargs={"offload": True}` للحفاظ على التفعيلات المحفوظة في ذاكرة المضيف المثبتة وتقليل استهلاك ذاكرة GPU للترتيبات الطويلة. راجع [إخراج التفعيلات المحفوظة](./grad_checkpointing#offloading-the-saved-activations) لمعرفة الموازنة.
- اضبط `train_sampling_strategy="group_by_length"` لتجميع الأمثلة ذات الأطوال المتشابهة في دفعات واحدة وتقليل الحشو. راجع [تجميع العينات حسب الطول](./trainer_recipes#group-samples-by-length) لمجموعات البيانات متعددة الوسائط المعتمدة على المعالجات والأطوال المحسوبة مسبقًا.

- يحدد `eval_strategy` و`save_strategy` متى يتم تقييم النموذج أثناء التدريب ومتى يتم حفظ نقطة التفتيش.
- يُحمّل `load_best_model_at_end` أفضل نقطة تحقق عند انتهاء التدريب. ويتطلب ضبط `eval_strategy`.

- يتحكم `logging_steps` في تكرار تحديث الخسارة وإرجاعها أثناء التدريب.

```py
training_args = TrainingArguments(
    output_dir="qwen3-finetuned",
    num_train_epochs=3,
    per_device_train_batch_size=2,
    gradient_accumulation_steps=8,
    gradient_checkpointing=True,
    gradient_checkpointing_kwargs={"every_n_layers": 4},
    bf16=True,
    learning_rate=2e-5,
    logging_steps=10,
    eval_strategy="epoch",
    save_strategy="epoch",
    load_best_model_at_end=True,
)
```

## التدريب

أنشئ كائنًا من [Trainer](/docs/transformers/main/ar/main_classes/trainer#transformers.Trainer) مع جميع المكونات اللازمة، ثم استدعِ [train()](/docs/transformers/main/ar/main_classes/trainer#transformers.Trainer.train) للبدء.

```py
trainer = Trainer(
    model=model,
    args=training_args,
    train_dataset=dataset["train"],
    eval_dataset=dataset["test"],
    processing_class=tokenizer,
    data_collator=DataCollatorForLanguageModeling(tokenizer, mlm=False),
)

trainer.train()
trainer.push_to_hub()
```

يرفع [push_to_hub()](/docs/transformers/main/ar/main_classes/trainer#transformers.Trainer.push_to_hub) الأوزان المُحسَّنة، وإعدادات التوليد، ومُجزِّئ الرموز، وإعدادات النموذج إلى Hub.

## الخطوات التالية

- اقرأ دليل [ميزات Trainer](./trainer_recipes) للحصول على أمثلة عملية مبسطة لميزات Trainer الشائعة مثل دوال الخسارة المخصصة، والتقييم الموفّر للذاكرة، والنقاط التفتيشية، والمزيد.
- اقرأ دليل [توريث طرق Trainer](./trainer_customize) لمعرفة كيفية توريث طرق [Trainer](/docs/transformers/main/ar/main_classes/trainer#transformers.Trainer) لدعم وظائف جديدة ومخصصة.
- اقرأ دليل [Callbacks](./trainer_callbacks) لمعرفة كيفية التفاعل مع أحداث التدريب للتسجيل، والتوقف المبكر، وسلوكيات مخصصة أخرى.
- اقرأ دليل [مجمّعات البيانات](./data_collators) لمعرفة كيفية تخصيص طريقة تجميع العينات في دفعات.
- شغّل سكربت تدريب على وحدة معالجة رسومية مستأجرة باستخدام [Hugging Face Jobs](https://huggingface.co/docs/hub/jobs-training).
- تصفّح [الدفاتر](./notebooks) أو قسم **الموارد > وصفات المهام** للحصول على أمثلة تدريب إضافية على مهام مختلفة في النصوص والصوت والرؤية والأنماط المتعددة.

