Transformers documentation
الضبط الدقيق
الضبط الدقيق
يتضمن الضبط الدقيق مواصلة تدريب نموذج كبير مُدرَّب مسبقًا على مجموعة بيانات أصغر حجمًا ومخصصة لمهمة أو مجال معين. على سبيل المثال، يساعد الضبط الدقيق على مجموعة بيانات من أمثلة البرمجة النموذج على تحسين أدائه في البرمجة. يتطابق الضبط الدقيق مع التدريب المسبق باستثناء أنك لا تبدأ بأوزان عشوائية. كما أنه يتطلب قدرًا أقل بكثير من الحوسبة والبيانات والوقت.
يقدم الشرح أدناه خطوات ضبط نموذج لغة كبير باستخدام Trainer.
سجّل الدخول إلى حسابك على 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معدل التعلم الأولي لمُحسِّن التدريب.
- اضبط
bf16=Trueلتدريب سريع بدقة مختلطة إذا كان جهازك يدعم ذلك (وحدات معالجة رسومية من نوع Ampere أو أحدث). وإلا، فاعتمد علىfp16=Trueعلى الأجهزة الأقدم. gradient_accumulation_stepsيحاكي حجم دفعة فعّالاً أكبر من خلال تجميع التدرجات عبر عدة تمريرات أمامية قبل تحديث الأوزان.- يتنازل
gradient_checkpointingعن الحساب مقابل الذاكرة من خلال إعادة حساب التفعيلات الوسيطة أثناء المرور العكسي بدلاً من تخزينها. للحصول على حل وسط بين الذاكرة والسرعة، راجع التحقق الجزئي. - عند تعيين
gradient_checkpointing=True، اضبطgradient_checkpointing_kwargs={"offload": True}للحفاظ على التفعيلات المحفوظة في ذاكرة المضيف المثبتة وتقليل استهلاك ذاكرة GPU للترتيبات الطويلة. راجع إخراج التفعيلات المحفوظة لمعرفة الموازنة. - اضبط
train_sampling_strategy="group_by_length"لتجميع الأمثلة ذات الأطوال المتشابهة في دفعات واحدة وتقليل الحشو. راجع تجميع العينات حسب الطول لمجموعات البيانات متعددة الوسائط المعتمدة على المعالجات والأطوال المحسوبة مسبقًا.
- يحدد
eval_strategyوsave_strategyمتى يتم تقييم النموذج أثناء التدريب ومتى يتم حفظ نقطة التفتيش. - يُحمّل
load_best_model_at_endأفضل نقطة تحقق عند انتهاء التدريب. ويتطلب ضبطeval_strategy.
- يتحكم
logging_stepsفي تكرار تحديث الخسارة وإرجاعها أثناء التدريب.
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.
- تصفّح الدفاتر أو قسم الموارد > وصفات المهام للحصول على أمثلة تدريب إضافية على مهام مختلفة في النصوص والصوت والرؤية والأنماط المتعددة.