Transformers documentation

الضبط الدقيق

Hugging Face's logo
Join the Hugging Face community

and get access to the augmented documentation experience

to get started

الضبط الدقيق

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

يقدم الشرح أدناه خطوات ضبط نموذج لغة كبير باستخدام Trainer.

Agent prompt

ساعد المستخدم في تخطيط عملية ضبط دقيق (Fine-tuning) لمهمته. قبل اقتراح تكوين، حدد المهمة، والنموذج المُسبق التدريب ومراجعتها، وحُقول مجموعة البيانات، وبيانات التقييم، وإصدار Transformers، والأجهزة، والذاكرة المتاحة. استخدم هذا الشرح التعليمي للتحقق من إعدادات تحضير البيانات، وتحميل النموذج، وإعداد Trainer التي تنطبق على حالته. لا تفترض أن مجموعة البيانات أو النموذج الموضّح في المثال يناسبان مهمة مختلفة.

  1. اطلب التفاصيل الناقصة التي قد تُغيّر النموذج أو المعالجة المسبقة أو إعداد التدريب. اذكر أي افتراضات.
  2. حافظ على أمثلة التقييم منفصلة عن بيانات التدريب. اختر نموذجًا ومُرمِّزًا (tokenizer) للمهمة، وجهّز المدخلات والوسوم المتوقعة للنموذج، واختر مُجمِّع بيانات (data collator) يتوافق مع تلك المدخلات.
  3. اضبط TrainingArguments لتناسب عتاد المستخدم وأهدافه. اضبط التقييم وحفظ نقاط التفتيش عندما يحتاج المستخدم إليها. نفّذ اختبارًا صغيرًا قبل مهمة التدريب الكاملة، وتحقق من أن النموذج يستقبل المدخلات المتوقعة، وأن الخسارة محدودة، وأن التقييم يكتمل.
  4. لا تبدأ دورة تدريب كاملة أو ارفع أي مخرجات ما لم يطلب المستخدم ذلك. قدّم تقريراً عن التكوين المقترح، والأدلة من أي اختبار، والتنازلات المتوقعة في الموارد، وأي شيء تعذّر عليك التحقق منه.

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

from huggingface_hub import login

login()

التجزئة

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

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

  • اضبط truncation=True وقيمة max_length لاختصار التسلسلات الأطول إلى الحد الأقصى المحدد.
  • استخدم طريقة train_test_split لإنشاء مجموعة اختبار لتقييم النموذج.
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 بملء كل دفعة بشكل ديناميكي حتى طول أطول تسلسل موجود في تلك الدفعة، بدلاً من ملء كل تسلسل في مجموعة البيانات حتى نفس الطول. وهذا يوفر في الحسابات والذاكرة من خلال تجنب حساب رموز الملء غير الضرورية.

  • اضبط mlm=False لتجنب إخفاء الرموز عشوائياً.
data_collator = DataCollatorForLanguageModeling(tokenizer, mlm=False)

تحميل نموذج

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

  • اضبط dtype="auto" لتحميل الأوزان بنوع البيانات (dtype) الذي تم حفظها به. بدونه، يقوم PyTorch بتحميل الأوزان بنوع torch.float32، مما يضاعف استهلاك الذاكرة إذا كانت الأوزان الأصلية من نوع torch.bfloat16.
from transformers import AutoModelForCausalLM, TrainingArguments, Trainer

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

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

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

مدة التدريب
تحسينات التدريب
التقييم وحفظ نقاط التفتيش
التسجيل
  • يتحكّم num_train_epochs وper_device_train_batch_size في مدة التدريب وحجم الدفعة. ويحدد learning_rate معدل التعلم الأولي لمُحسِّن التدريب.
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 مع جميع المكونات اللازمة، ثم استدعِ train() للبدء.

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() الأوزان المُحسَّنة، وإعدادات التوليد، ومُجزِّئ الرموز، وإعدادات النموذج إلى Hub.

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

  • اقرأ دليل ميزات Trainer للحصول على أمثلة عملية مبسطة لميزات Trainer الشائعة مثل دوال الخسارة المخصصة، والتقييم الموفّر للذاكرة، والنقاط التفتيشية، والمزيد.
  • اقرأ دليل توريث طرق Trainer لمعرفة كيفية توريث طرق Trainer لدعم وظائف جديدة ومخصصة.
  • اقرأ دليل Callbacks لمعرفة كيفية التفاعل مع أحداث التدريب للتسجيل، والتوقف المبكر، وسلوكيات مخصصة أخرى.
  • اقرأ دليل مجمّعات البيانات لمعرفة كيفية تخصيص طريقة تجميع العينات في دفعات.
  • شغّل سكربت تدريب على وحدة معالجة رسومية مستأجرة باستخدام Hugging Face Jobs.
  • تصفّح الدفاتر أو قسم الموارد > وصفات المهام للحصول على أمثلة تدريب إضافية على مهام مختلفة في النصوص والصوت والرؤية والأنماط المتعددة.
Update on GitHub