Transformers documentation
Trainer
Trainer
توفر فئة Trainer واجهة برمجة تطبيقات (API) للتدريب الكامل الميزات في PyTorch، وتدعم التدريب الموزع على عدة وحدات معالجة رسومات (GPUs) ووحدات معالجة TPU، والدقة المختلطة لـ NVIDIA GPUs و AMD GPUs، و torch.amp في PyTorch. تعمل فئة Trainer جنبًا إلى جنب مع فئة TrainingArguments، التي تقدم مجموعة واسعة من الخيارات لتخصيص طريقة تدريب النموذج. معًا، توفر هاتان الفئتان واجهة برمجة تطبيقات كاملة للتدريب.
يرث Seq2SeqTrainer و Seq2SeqTrainingArguments من فئتي Trainer و TrainingArguments، وقد تم تكييفهما لتدريب النماذج على مهام التحويل من تسلسل إلى تسلسل مثل التلخيص أو الترجمة.
تم تحسين فئة Trainer لنماذج 🤗 Transformers، وقد تُظهر سلوكيات غير متوقعة عند استخدامها مع نماذج أخرى. عند استخدامها مع نموذجك الخاص، تأكد من:
- يعيد نموذجك دائمًا مجموعات (tuples) أو فئات فرعية من ModelOutput
- يمكن لنموذجك حساب الخسارة إذا تم توفير معامل
labels، وتُعاد تلك الخسارة كعنصر أول في المجموعة المرتبة (إذا كان نموذجك يعيد مجموعات مرتبة)- يمكن لنموذجك أن يقبل عدة حُجج تسمية (استخدم
label_namesفي TrainingArguments لتوضيح أسمائها إلى Trainer) لكن لا ينبغي أن يكون اسم أي منها"label"
Trainer
فئة transformers.Trainer
< source >( model: typing.Union[transformers.modeling_utils.PreTrainedModel, torch.nn.Module, NoneType] = Noneargs: transformers.training_args.TrainingArguments | None = Nonedata_collator: collections.abc.Callable[[list[typing.Any]], dict[str, typing.Any]] | None = Nonetrain_dataset: Dataset | IterableDataset | datasets.Dataset | None = Noneeval_dataset: Dataset | dict[str, Dataset] | datasets.Dataset | None = Noneprocessing_class: transformers.tokenization_utils_base.PreTrainedTokenizerBase | transformers.image_processing_utils.BaseImageProcessor | transformers.feature_extraction_utils.FeatureExtractionMixin | transformers.processing_utils.ProcessorMixin | None = Nonemodel_init: collections.abc.Callable[..., transformers.modeling_utils.PreTrainedModel] | None = Nonecompute_loss_func: collections.abc.Callable | None = Nonecompute_metrics: collections.abc.Callable[[transformers.trainer_utils.EvalPrediction], dict] | None = Nonecallbacks: list[transformers.trainer_callback.TrainerCallback] | None = Noneoptimizers: tuple = (None, None)optimizer_cls_and_kwargs: tuple[type[torch.optim.Optimizer], dict[str, typing.Any]] | None = Nonepreprocess_logits_for_metrics: collections.abc.Callable[[torch.Tensor, torch.Tensor], torch.Tensor] | None = None )
المعاملات
- model (PreTrainedModel أو
torch.nn.Module, اختياري) — النموذج الذي سيتم تدريبه أو تقييمه أو استخدامه للتنبؤات. إذا لم يُقدَّم، فيجب تمريرmodel_initإلزاميًا.Trainer مُحسّن للعمل مع PreTrainedModel الذي توفره المكتبة. يمكنك ما زال استخدام نماذجك الخاصة المعرّفة على أنها
torch.nn.Moduleطالما أنها تعمل بنفس طريقة عمل نماذج 🤗 Transformers. - args (TrainingArguments، اختياري) —
الحُجج التي تُضبط للتدريب. إذا لم تُقدَّم، فسيتم افتراضياً استخدام نسخة أساسية من TrainingArguments مع ضبط
output_dirعلى مجلد باسم tmp_trainer في المجلد الحالي. - data_collator (
DataCollator، اختياري) — الدالة المستخدمة لتكوين دفعة من قائمة عناصرtrain_datasetأوeval_dataset. ستكون القيمة الافتراضية default_data_collator() إذا لم يتم تقديمprocessing_class، وإلا فستكون نسخة من DataCollatorWithPadding إذا كان processing_class مستخرج ميزات أو مُجزئًا. - train_dataset (
torch.utils.data.Dataset|torch.utils.data.IterableDataset|datasets.Dataset, اختياري) — المجموعة المستخدمة للتدريب. إذا كانت من نوع Dataset, ، فسيتم حذف الأعمدة غير المقبولة تلقائيًا بواسطةmodel.forward()طريقةلاحظ أنه إذا كان
torch.utils.data.IterableDatasetيحتوي على بعض العشوائية وأنت تقوم بالتدريب بطريقة موزعة، فيجب أن يستخدم مجموعة البيانات القابلة للتكرار إما خاصية داخليةgeneratorتكون من نوعtorch.Generatorللعشوائية، ويجب أن تكون متطابقة في جميع العمليات (وسيقوم Trainer بإعداد بذرة هذاgeneratorيدوياً في كل حقبة)، أو أن يحتوي على طريقةset_epoch()تقوم داخلياً بإعداد بذرة مولدات الأرقام العشوائية المستخدمة.إذا لم ينفّذ مجموعة البيانات
__len__(مثلIterableDatasetالبثّي)، فيجب تعيينmax_steps، لأن عدد خطوات التدريب الإجمالي لا يمكن استنتاجه. - eval_dataset (
torch.utils.data.Dataset| dict[str,torch.utils.data.Dataset] |datasets.Dataset, اختياري) — مجموعة البيانات المستخدمة للتقييم. إذا كانت من نوع Dataset، تُحذف تلقائيًا الأعمدة غير المقبولة بواسطة طريقةmodel.forward(). أما إذا كانت قاموسًا، فسيتم التقييم على كل مجموعة بيانات مع إضافة مفتاح القاموس إلى بداية اسم المقياس. - processing_class (
PreTrainedTokenizerBaseأوBaseImageProcessorأوFeatureExtractionMixinأوProcessorMixin، اختياري) — فئة المعالجة المستخدمة لمعالجة البيانات. إذا تم تقديمها، فستُستخدم لمعالجة المدخلات تلقائيًا للنموذج، وستُحفظ مع النموذج لتسهيل إعادة تشغيل تدريبٍ مُقاطَع أو إعادة استخدام النموذج المُحسَّن. - model_init (
Callable[[], PreTrainedModel], اختياري) — دالة تُنشئ النموذج المراد استخدامه. إذا تم تقديمها، فستبدأ كل استدعاء لـ من نسخة جديدة من النموذج كما تحددها هذه الدالة. قد تحتوي الدالة على صفر من المعاملات، أو معامل واحد يحتوي على كائن تجربة optuna/Ray Tune، لاختيار معماريات مختلفة وفقًا للمعاملات الفائقة (مثل عدد الطبقات، أحجام الطبقات الداخلية، احتمالات dropout، إلخ).قد يكون لدى الدالة صفر من المعاملات، أو معامل واحد يحتوي على كائن التجربة الخاص بـ optuna/Ray Tune، حتى يتمكن المرء من اختيار معماريات مختلفة وفقاً للمعاملات الفائقة (مثل عدد الطبقات، وأحجام الطبقات الداخلية، واحتمالات dropout، وما إلى ذلك).
- compute_loss_func (
Callable, اختياري) — دالة تستقبل مخرجات النموذج الخام، والتسميات، وعدد العناصر في الدفعة المتراكمة بالكامل (batch_size * gradient_accumulation_steps) وتعيد قيمة الخسارة. على سبيل المثال، راجع دالة الخسارة الافتراضية المستخدمة بواسطة Trainer. - compute_metrics (
Callable[[EvalPrediction], Dict], اختياري) — الدالة التي ستُستخدم لحساب المقاييس أثناء التقييم. يجب أن تستقبل EvalPrediction وتعيد قاموسًا من السلاسل النصية إلى قيم المقاييس. ملاحظة عند تمرير TrainingArgs مع ضبطbatch_eval_metricsعلىTrue، يجب أن تستقبل دالة compute_metrics معاملًا من نوع boolean باسمcompute_result. سيُستدعى هذا بعد آخر دفعة تقييم للإشارة إلى أن الدالة بحاجة إلى حساب وإحصاءات الملخص العام وإعادتها بدلاً من تراكم إحصاءات مستوى الدفعة - callbacks (قائمة من TrainerCallback, اختياري) —
قائمة من الاستدعاءات (callbacks) لتخصيص حلقة التدريب. ستُضاف هذه الاستدعاءات إلى قائمة الاستدعاءات الافتراضية الموضّحة هنا.
إذا كنت ترغب في إزالة أحد الاستدعاءات الافتراضية المستخدمة، فاستخدم طريقة Trainer.remove_callback().
- optimizers (
tuple[torch.optim.Optimizer, torch.optim.lr_scheduler.LambdaLR]، اختياري، القيمة الافتراضية(None, None)) — مجموعة (tuple) تحتوي على المُحسِّن (optimizer) والمُجدوِل (scheduler) المراد استخدامهما. ستكون القيمة الافتراضية هي نسخة منAdamWعلى النموذج الخاص بك، مع مُجدوِل يُحدده get_linear_schedule_with_warmup() ويُتحكم به عبرargs. - optimizer_cls_and_kwargs (
tuple[Type[torch.optim.Optimizer], dict[str, Any]], اختياري) — مجموعة تحتوي على فئة المُحسِّن (optimizer) وبارامترات الكلمات المفتاحية للاستخدام. يتجاوزoptimوoptim_argsفيargs. غير متوافق معoptimizersالبارامتر.على عكس
optimizers، يتجنّب هذا الحُجّة الحاجة إلى وضع معاملات النموذج على الأجهزة الصحيحة قبل تهيئة Trainer. - preprocess_logits_for_metrics (
Callable[[torch.Tensor, torch.Tensor], torch.Tensor], اختياري) — دالة تعالج القيم الاحتمالية (logits) مباشرةً قبل تخزينها مؤقتًا في كل خطوة من خطوات التقييم. يجب أن تستقبل هذه الدالة مصفوفتين (tensors)، وهما القيم الاحتمالية والوسوم (labels)، ثم تُرجع القيم الاحتمالية بعد معالجتها بالطريقة المطلوبة. ستُنعكس التعديلات التي تُجريها هذه الدالة على التنبؤات التي تستلمهاcompute_metrics.لاحظ أن التسميات (المعامل الثاني) ستكون
Noneإذا لم تكن موجودة في مجموعة البيانات.
Trainer هو حلقة تدريب وتقييم بسيطة لكنها متكاملة الميزات لـ PyTorch، مُحسّنة لـ 🤗 Transformers.
الخصائص المهمة:
- model — يشير دائمًا إلى النموذج الأساسي. إذا كنت تستخدم نموذجًا من transformers، فسيكون PreTrainedModel فئة فرعية منه.
- model_wrapped — يشير دائمًا إلى النموذج الخارجي الأكثر شمولًا في حال كان هناك وحدة أو أكثر تغلف النموذج الأصلي. هذا هو النموذج الذي يجب استخدامه لتمريرة الأمامية. على سبيل المثال، في إطار
DeepSpeed، يُغلَّف النموذج الداخلي بواسطةDeepSpeedثم مرة أخرى بواسطةtorch.nn.DistributedDataParallel. إذا لم يكن النموذج الداخلي مُغلَّفًا، فإنself.model_wrappedهو نفسهself.model. - is_model_parallel — ما إذا كان النموذج قد تم تحويله إلى وضع التوازي على مستوى النموذج (على عكس التوازي على مستوى البيانات، حيث يتم تقسيم بعض طبقات النموذج على وحدات معالجة رسومية مختلفة).
- place_model_on_device — تحديد ما إذا كان سيتم وضع النموذج على الجهاز تلقائيًا أم لا. القيمة الافتراضية هي
Trueما لم تكن موازنة النموذج، أو DeepSpeed، أو FSDP، أو التقييم الكامل بـ fp16/bf16، أو SageMaker MP مفعّلة. يمكن تجاوز ذلك عن طريق إنشاء فئة فرعية منTrainingArgumentsوتجاوز الخاصيةplace_model_on_device. - is_in_train — ما إذا كان النموذج يعمل حالياً
train(على سبيل المثال، عند استدعاءevaluateأثناء التواجد فيtrain) - loss_is_scaled_for_ga — ما إذا كانت الدالة
compute_lossتُرجع قيمة الخسارة مُقيَّمة مسبقًا لتراكم التدرجات.True: يستخدمtraining_stepالقيمة كما هي.False: يقسمtraining_stepالقيمة على عدد خطوات تراكم التدرجات.None(الافتراضي): تُحتسب الخسارة على أنها مُقيَّمة إذا كانت مُطبَّعة بواسطةnum_items_in_batch، أي عندما يقبل النموذج معاملات إضافية للخسارة أو عند تمريرcompute_loss_func. يجب على الفئات الفرعية التي تحسب خسارتها الخاصة تعيين هذا المعامل.
add_callback
< source >( callback: type[transformers.trainer_callback.TrainerCallback] | transformers.trainer_callback.TrainerCallback )
المعاملات
- callback (
typeأو [`~transformers.TrainerCallback`]) — فئة TrainerCallback أو كائن من فئة TrainerCallback. في الحالة الأولى، سيتم إنشاء كائن من تلك الفئة.
أضف مستدعيًا (callback) إلى القائمة الحالية من TrainerCallback.
غلاف مساعد ينشئ مدير سياق مناسبًا لـautocast مع تزويده بالحجج المطلوبة، اعتمادًا على الموقف. نعتمد على accelerate لـautocast، لذا لا نفعل شيئًا هنا.
استدعِ model_init للحصول على نسخة جديدة من النموذج، مع إمكانية اشتراطها على تجربة لمعاملات ضبط.
compute_loss
< source >( model: Moduleinputs: dictreturn_outputs: bool = Falsenum_items_in_batch: typing.Union[torch.Tensor, int, NoneType] = None )
المعاملات
- model (
nn.Module) — النموذج الذي تُحسب عليه دالة الخسارة. - inputs (
dict[str, torch.Tensor | Any]) — بيانات الإدخال الخاصة بالنموذج. - return_outputs (
bool، اختياري، القيمة الافتراضيةFalse) — ما إذا كان يجب إخراج مخرجات النموذج إلى جانب دالة الخسارة. - num_items_in_batch (Optional[torch.Tensor], اختياري) — عدد العناصر في الدفعة. إذا لم يُمرَّر، يتم حساب الخسارة باستخدام منطق اختزال حجم الدفعة الافتراضي.
كيفية حساب الدالة الخاسرة بواسطة Trainer. افتراضياً، تُرجع جميع النماذج قيمة الخسارة في العنصر الأول.
أنشئ فئة فرعية وأعد تعريف الدوال للحصول على سلوك مخصص. إذا كنت تحسب دالة الخسارة الخاصة بك، فاضبط loss_is_scaled_for_ga للإشارة إلى ما إذا كانت الخسارة مُقيّمة بالفعل لتراكم التدرجات: False إذا كانت متوسطًا لكل دفعة (حيث سيقوم Trainer بقسمتها على عدد خطوات تراكم التدرجات)، وTrue إذا كنت قد قمت بتطبيعها مسبقًا على الدفعة المتراكمة بأكملها.
غلاف مساعد لتجميع مُديري السياق معًا.
أنشئ المُسرِّع وأجرِ الإعدادات ما بعد الإنشاء (FSDP، DeepSpeed، إلخ).
create_model_card
< source >( language: str | None = Nonelicense: str | None = Nonetags: str | list[str] | None = Nonemodel_name: str | None = Nonefinetuned_from: str | None = Nonetasks: str | list[str] | None = Nonedataset_tags: str | list[str] | None = Nonedataset: str | list[str] | None = Nonedataset_args: str | list[str] | None = None )
المعاملات
- language (
str، اختياري) — لغة النموذج (إن كان ذلك منطبقاً) - license (
str, اختياري) — رخصة النموذج. ستكون افتراضياً رخصة النموذج المُسبق التدريب المستخدم، إذا كان النموذج الأصلي المُمرَّر إلىTrainerمن مستودع على Hub. - tags (
strأوlist[str]، اختياري) — بعض الوسوم التي سيتم تضمينها في البيانات الوصفية لبطاقة النموذج. - model_name (
str، اختياري) — اسم النموذج. - finetuned_from (
str، اختياري) — اسم النموذج المستخدم لضبط هذا النموذج (إن كان ذلك ممكنًا). سيُستخدم افتراضيًا اسم المستودع الخاص بالنموذج الأصلي المُقدَّم إلىTrainer(إذا كان من Hub). - tasks (
strأوlist[str]، اختياري) — معرّف واحد أو أكثر للمهام، ليتم تضمينه في البيانات الوصفية لبطاقة النموذج. - dataset_tags (
strأوlist[str]، اختياري) — واحد أو عدة وسوم للبيانات، لتضمينها في البيانات الوصفية لبطاقة النموذج. - dataset (
strأوlist[str]، اختياري) — معرّف واحد أو عدة معرّفات لمجموعات بيانات، لتضمينها في البيانات الوصفية لبطاقة النموذج. - dataset_args (
strأوlist[str]، اختياري) — حجة أو عدة حِجج للمجموعة، لتضمينها في بيانات وصفية لبطاقة النموذج.
ينشئ مسودة لبطاقة نموذج باستخدام المعلومات المتاحة في Trainer.
create_optimizer
< source >( model = None ) → torch.optim.Optimizer
يعيد
torch.optim.Optimizer
مثيل المُحسِّن.
اضبط المُحسِّن.
نوفّر قيمة افتراضية معقولة تعمل بشكل جيد. إذا كنت ترغب في استخدام شيء آخر، يمكنك تمرير مجموعة (tuple) في تهيئة Trainer عبر optimizers، أو إنشاء فئة فرعية وتجاوز هذه الطريقة في الفئة الفرعية.
اضبط المُحسِّن وجدول مُعدّل التعلّم.
نوفّر قيمة افتراضية معقولة تعمل بشكل جيد. إذا كنت ترغب في استخدام شيء آخر، يمكنك تمرير مجموعة (tuple) عبر optimizers في دالة init الخاصة بـ Trainer، أو إنشاء فئة فرعية وتجاوز هذه الطريقة (أو create_optimizer و/أو create_scheduler) في الفئة الفرعية.
create_scheduler
< source >( num_training_steps: intoptimizer: typing.Optional[torch.optim.Optimizer] = None ) → torch.optim.lr_scheduler.LRScheduler
اضبط المجدول. يجب أن يكون المُحسِّن الخاص بالمدرِّب قد تم ضبطه إما قبل استدعاء هذه الطريقة أو تم تمريره كحجة.
أنهِ المسارات المراقبة وأتلف مجموعة العمليات الموزعة.
استدعِ هذه الدالة مرة واحدة فقط، في نهاية السكربت، بعد كل ما يتطلب العمليات الأخرى: train()، evaluate()، predict()، save_model() وpush_to_hub() تتواصل جميعها بين العمليات وستفشل بمجرد اختفاء المجموعة.
evaluate
< source >( eval_dataset: typing.Union[torch.utils.data.Dataset, dict[str, torch.utils.data.Dataset], NoneType] = Noneignore_keys: list[str] | None = Nonemetric_key_prefix: str = 'eval' )
المعاملات
- eval_dataset (
Dataset| dict[str,Dataset], اختياري) — مرر مجموعة بيانات إذا كنت ترغب في تجاوزself.eval_dataset. إذا كانت Dataset, الأعمدة غير المقبولة بواسطةmodel.forward()طريقة تُزال تلقائيًا. إذا كانت قاموسًا، فسيتم التقييم على كل مجموعة بيانات، مع إضافة مفتاح القاموس إلى بداية اسم المقياس.إذا مرّرت قاموسًا تكون مفاتيحه أسماء مجموعات البيانات وقيمها مجموعات البيانات نفسها، فسيُجري evaluate تقييمات منفصلة على كل مجموعة بيانات. وقد يكون ذلك مفيدًا لمراقبة تأثير التدريب على مجموعات بيانات أخرى، أو ببساطة للحصول على تقييم أكثر تفصيلًا. عند الاستخدام مع
load_best_model_at_end، تأكد من أنmetric_for_best_modelيشير إلى مجموعة بيانات واحدة بالضبط. فعلى سبيل المثال، إذا مرّرت{"data1": data1, "data2": data2}لمجموعتي بياناتdata1وdata2، يمكنك تحديدmetric_for_best_model="eval_data1_loss"لاستخدام الخسارة علىdata1، وmetric_for_best_model="eval_data2_loss"للخسارة علىdata2. - ignore_keys (
list[str]، اختياري) — قائمة بمفاتيح في مخرجات النموذج (إذا كان قاموسًا) يجب تجاهلها عند جمع التنبؤات. - metric_key_prefix (
str، اختياري، القيمة الافتراضية"eval") — بادئة اختيارية تُستخدم كبادئة لمفاتيح المقاييس. على سبيل المثال، سيُسمّى المقياس "bleu" باسم "eval_bleu" إذا كانت البادئة هي"eval"(الافتراضية)
تشغيل التقييم وإرجاع المقاييس.
ستكون سكريبت الاستدعاء مسؤولة عن توفير طريقة لحساب المقاييس، إذ إنها تعتمد على المهمة (مرّرها إلى معامل compute_metrics في init).
يمكنك أيضًا إنشاء فئة فرعية وتجاوز هذه الطريقة لحقن سلوك مخصص.
حلقة التقييم evaluation_loop
< source >( dataloader: DataLoaderdescription: strprediction_loss_only: bool | None = Noneignore_keys: list[str] | None = Nonemetric_key_prefix: str = 'eval' )
حلقة التنبؤ/التقييم، المشتركة بين Trainer.evaluate() وTrainer.predict().
يعمل سواءً مع وجود تسميات أو بدونها.
floating_point_ops
< source >( inputs: dict ) → int
بالنسبة للنماذج التي ترث من PreTrainedModel، تُستخدم تلك الطريقة لحساب عدد عمليات الفاصلة العائمة لكل تمريرة خلفية + أمامية. إذا كنت تستخدم نموذجًا آخر، فإما أن تنفّذ مثل هذه الطريقة داخل النموذج، أو أن ترث منه وتعيد تعريف هذه الطريقة.
يجمع عددًا محددًا من الدفعات من مُكرِّر الحقبة، ويحسب اختيارًا عدد العناصر في الدفعات لتقاسم الخسارة بشكل صحيح.
احصل على حجم التوازي السياقي
احصل على جميع أسماء المعاملات التي سيُطبَّق عليها اضمحلال الوزن.
تُفلتر هذه الدالة المعاملات بطريقتين:
- حسب نوع الطبقة (الأمثلة من الطبقات المحددة في ALL_LAYERNORM_LAYERS)
- حسب أنماط أسماء المعاملات (تتضمن 'bias' أو أحد أشكال 'norm')
get_eval_dataloader
< source >( eval_dataset: typing.Union[str, torch.utils.data.Dataset, NoneType] = None )
المعاملات
- eval_dataset (
strأوtorch.utils.data.Dataset، اختياري) — إذا كانstr، فسيتم استخدامself.eval_dataset[eval_dataset]كمجموعة بيانات للتقييم. إذا كانDataset، فسيتم تجاوزself.eval_dataset. إذا كان Dataset، تُحذف الأعمدة غير المقبولة بواسطة طريقةmodel.forward()تلقائيًا.
يعيد ~torch.utils.data.DataLoader للتقييم.
قم بإنشاء فئة فرعية وتجاوز هذه الطريقة إذا كنت ترغب في حقن سلوك مخصص.
يعيد معدل تعلّم كل معامل من self.optimizer.
احصل على عدد المعاملات القابلة للتدريب.
get_optimizer_cls_and_kwargs
< source >( args: TrainingArgumentsmodel: transformers.modeling_utils.PreTrainedModel | None = None )
يعيد فئة المُحسِّن (optimizer) ومعاملات المُحسِّن بناءً على حُجج التدريب.
get_optimizer_group
< source >( param: typing.Union[str, torch.nn.parameter.Parameter, NoneType] = None )
يعيد مجموعة المُحسِّن الخاصة بمعامل إذا تم تقديمه، وإلا يعيد جميع مجموعات المُحسِّن للمعاملات.
احصل على حجم التوازي التسلسلي
get_test_dataloader
< source >( test_dataset: Dataset )
المعاملات
- test_dataset (
torch.utils.data.Dataset، اختياري) — مجموعة البيانات الاختبارية المستخدمة. إذا كانت Dataset، تُحذف الأعمدة غير المقبولة تلقائيًا من قبل طريقةmodel.forward().
يعيد ~torch.utils.data.DataLoader الخاص بالاختبار.
قم بإنشاء فئة فرعية وتجاوز هذه الطريقة إذا كنت ترغب في حقن سلوك مخصص.
يحسب حجم الدفعة الإجمالي (micro_batch grad_accum dp_world_size).
تتضمن الحسابات جميع أبعاد التوازي: TP وCP وSP.
الصيغة: dp_world_size = world_size // (tp_size cp_size sp_size)
حيث:
- TP (توازي الموترات): تقسيم طبقات النموذج على وحدات معالجة الرسوميات
- CP (توازي السياق): تقسيم التسلسلات باستخدام Ring Attention (FSDP2)
- SP (توازي التسلسل): تقسيم التسلسلات باستخدام ALST/Ulysses (DeepSpeed)
جميع الأبعاد منفصلة وضربية: world_size = dp_size tp_size cp_size * sp_size
احصل على حجم التوازي للتينسور من إعدادات النموذج أو DeepSpeed.
يعيد ~torch.utils.data.DataLoader للتدريب.
سيُستخدم عيّنة عشوائية (مُكيّفة للتدريب الموزّع عند الحاجة) إذا كان train_dataset لا ينفّذ __len__، وإلا فلن يُستخدم أي عيّنة.
قم بإنشاء فئة فرعية وتجاوز هذه الطريقة إذا كنت ترغب في حقن سلوك مخصص.
hyperparameter_search
< source >( hp_space: collections.abc.Callable[['optuna.Trial'], dict[str, float]] | None = Nonecompute_objective: collections.abc.Callable[[dict[str, float]], float] | None = Nonen_trials: int = 20direction: str | list[str] = 'minimize'backend: str | transformers.trainer_utils.HPSearchBackend | None = Nonehp_name: collections.abc.Callable[['optuna.Trial'], str] | None = None**kwargs ) → [trainer_utils.BestRun or list[trainer_utils.BestRun]]
المعاملات
- hp_space (
Callable[["optuna.Trial"], dict[str, float]]، اختياري) — دالة تُعرّف مساحة البحث في المعاملات الفائقة. ستكون القيمة الافتراضية هيdefault_hp_space_optuna()أوdefault_hp_space_ray()حسب الخلفية البرمجية (backend) التي تستخدمها. - compute_objective (
Callable[[dict[str, float]], float], اختياري) — دالة تحسب الهدف المطلوب تقليله أو تعظيمه انطلاقًا من المقاييس التي يعيدها أسلوبevaluate. سيتم افتراضيًا استخدامdefault_compute_objective(). - n_trials (
int، اختياري، القيمة الافتراضية 100) — عدد مرات التشغيل التجريبي للاختبار. - direction (
strأوlist[str]، اختياري، القيمة الافتراضية"minimize") — إذا كان الأمر يتعلق بتحسين هدف واحد، فإنstrيكون اتجاهًا، ويمكن أن يكون"minimize"أو"maximize"، وينبغي اختيار"minimize"عند تحسين خسارة التحقق، و"maximize"عند تحسين مقياس واحد أو عدة مقاييس. أما إذا كان الأمر يتعلق بتحسين أهداف متعددة، فإنlist[str]يكون اتجاهًا، ويمكن أن يكون قائمة من"minimize"و"maximize"، وينبغي اختيار"minimize"عند تحسين خسارة التحقق، و"maximize"عند تحسين مقياس واحد أو عدة مقاييس. - backend (
strأو~training_utils.HPSearchBackend، اختياري) — الخلفية (backend) المستخدمة للبحث في المعلمات الفائقة. ستكون الافتراضية هي optuna أو Ray Tune، اعتمادًا على أيٍّ منهما مثبّت. إذا كان كلاهما مثبّتًا، فستكون الافتراضية هي optuna. - hp_name (
Callable[["optuna.Trial"], str]]، اختياري) — دالة تحدد اسم التجربة/التشغيل. القيمة الافتراضية هي None. - kwargs (
dict[str, Any], اختياري) — حجج إضافية بالكلمات المفتاحية لكل واجهة خلفية:optuna: المعاملات من optuna.study.create_study وكذلك المعاملاتtimeoutوn_jobsوgc_after_trialمن optuna.study.Study.optimizeray: المعاملات من tune.run. إذا لم يتم تعيينresources_per_trialفيkwargs، فإن القيمة الافتراضية هي نواة وحدة معالجة مركزية واحدة ووحدة معالجة رسومية واحدة (إذا كانت متاحة). إذا لم يتم تعيينprogress_reporterفيkwargs، يتم استخدام ray.tune.CLIReporter.
يعيد
[trainer_utils.BestRun أو list[trainer_utils.BestRun]]
جميع المعلومات حول أفضل تشغيل أو أفضل عمليات التشغيل لتحسين متعدد الأهداف. يمكن العثور على ملخص التجربة في خاصية run_summary لخلفية Ray.
شغّل بحثًا على المعاملات الفائقة باستخدام optuna أو Ray Tune. يُحدَّد الكمية المُحسَّنة بواسطة compute_objective، والتي تكون افتراضيًا دالةً تُرجع خسارة التقييم عند عدم تقديم مقياس، ومجموع جميع المقاييس في حال وجودها.
To use this method, you need to have provided a
model_initwhen initializing your Trainer: we need to reinitialize the model at each new run. This is incompatible with theoptimizersargument, so you need to subclass Trainer and override the method create_optimizer_and_scheduler() for custom optimizer/scheduler.
init_hf_repo
< source >( token: str | None = Noneprivate: bool | None = None )
يُهيّئ مستودع git في self.args.hub_model_id.
ما إذا كانت هذه العملية هي العملية الرئيسية المحلية (على سبيل المثال، على جهاز واحد إذا كان التدريب يتم بطريقة موزعة على عدة أجهزة).
سواء كان هذا العملية الرئيسية العامة أم لا (عند التدريب بطريقة موزعة على عدة أجهزة، لن تكون هذه القيمة True إلا لعملية واحدة).
log
< source >( logs: dictstart_time: float | None = None )
سجّل logs على الكائنات المختلفة التي تراقب التدريب.
أنشئ فئة فرعية وأعد تعريف هذه الطريقة لحقن سلوك مخصص.
log_metrics
< source >( splitmetrics )
سجّل المقاييس بطريقة مُنسّقة بشكل خاص.
في البيئة الموزعة، يتم تنفيذ هذا الإجراء فقط للعملية ذات الترتيب 0.
ملاحظات حول تقارير الذاكرة:
للحصول على تقرير لاستخدام الذاكرة، يجب عليك تثبيت psutil. يمكنك القيام بذلك عبر pip install psutil.
الآن، عند تشغيل هذه الطريقة، ستظهر لك تقرير يتضمن:
init_mem_cpu_alloc_delta = 1301MB
init_mem_cpu_peaked_delta = 154MB
init_mem_gpu_alloc_delta = 230MB
init_mem_gpu_peaked_delta = 0MB
train_mem_cpu_alloc_delta = 1345MB
train_mem_cpu_peaked_delta = 0MB
train_mem_gpu_alloc_delta = 693MB
train_mem_gpu_peaked_delta = 7MBفهم التقارير:
- يُخبرك المقطع الأول، مثل
train__، بالمرحلة التي تخصها المقاييس. أما التقارير التي تبدأ بـinit_فتُضاف إلى المرحلة الأولى التي يتم تشغيلها. وبذلك، إذا تم تشغيل التقييم فقط، فسيتم الإبلاغ عن استهلاك الذاكرة الخاص بـ__init__إلى جانب مقاييسeval_. - المقطع الثالث، وهو إما
cpuأوgpu، يُخبرك ما إذا كان الأمر يتعلق بمقياس ذاكرة الوصول العشوائي العامة أو ذاكرة gpu0. *_alloc_delta- هو الفرق في عداد الذاكرة المستخدمة/المخصصة بين نهاية المرحلة وبدايتها - وقد يكون سالبًا إذا كانت الدالة أفرجت عن ذاكرة أكثر مما خصصته.*_peaked_delta- هو أي ذاكرة إضافية استُهلكت ثم أُطلِقت - مقارنةً بعدّاد الذاكرة المخصصة الحالي - وهو لا يكون سالبًا أبدًا. عند النظر إلى مقاييس أي مرحلة، تجمع بينalloc_delta+peaked_deltaلتعرف مقدار الذاكرة المطلوبة لإكمال تلك المرحلة.
تتم عملية الإبلاغ فقط للعملية ذات الترتيب 0 ولوحدة المعالجة الرسومية 0 (إذا كانت موجودة). وعادةً ما يكون ذلك كافياً، لأن العملية الرئيسية تقوم بمعظم العمل، لكن الأمر قد لا يكون كذلك تماماً إذا تم استخدام توازي النموذج، حيث قد تستخدم وحدات المعالجة الرسومية الأخرى كمية مختلفة من ذاكرة وحدة المعالجة الرسومية. كما أن الأمر ليس مماثلاً في حالة DataParallel، حيث قد تتطلب وحدة المعالجة الرسومية 0 مساحة ذاكرة أكبر بكثير من بقية الوحدات لأنها تخزن تدرجات وحالات المُحسِّن لجميع وحدات المعالجة الرسومية المشاركة. ربما ستتطور هذه التقارير في المستقبل لقياس تلك الجوانب أيضاً.
تقيس مقياس ذاكرة الوصول العشوائي المعالج (CPU RAM) حجم مجموعة المقيم (RSS)، والذي يشمل الذاكرة الفريدة للعملية والذاكرة المشتركة مع العمليات الأخرى. من المهم ملاحظة أنه لا يشمل الذاكرة المُبدَلة (swapped out)، لذا قد تكون التقارير غير دقيقة.
يُقاس ذروة الذاكرة على المعالج المركزي (CPU) باستخدام خيط عينات (sampling thread). بسبب قفل GIL في بايثون، قد يفوت هذا الخيط بعض ذروات الذاكرة إذا لم يحصل على فرصة للتشغيل في اللحظة التي استُخدمت فيها أعلى كمية من الذاكرة. لذلك، قد تكون هذه التقارير أقل من الواقع. كان استخدام tracemalloc سيُبلغ عن ذروة الذاكرة بدقة، لكنه لا يُبلغ عن تخصيصات الذاكرة خارج بايثون. لذا، إذا خصصت إضافة C++ CUDA ذاكرتها الخاصة، فلن يتم الإبلاغ عنها. ولذلك تم التخلي عنه لصالح نهج أخذ عينات من الذاكرة، الذي يقرأ استخدام الذاكرة الحالي للعملية.
يتم تخصيص وحدة المعالجة الرسومية (GPU) وإبلاغ عن ذروة الذاكرة باستخدام torch.cuda.memory_allocated() وtorch.cuda.max_memory_allocated(). يبلغ هذا المقياس عن “الفروقات” فقط للتخصيصات الخاصة بـ PyTorch، لأن نظام إدارة الذاكرة في torch.cuda لا يتتبع أي ذاكرة مُخصصة خارج PyTorch. على سبيل المثال، عادةً ما يؤدي أول استدعاء لـ CUDA إلى تحميل نواة CUDA، والتي قد تستهلك من 0.5 إلى 2 غيغابايت من ذاكرة GPU.
لاحظ أن هذا المتتبع لا يأخذ في الاعتبار تخصيصات الذاكرة خارج استدعاءات __init__ وtrain وevaluate وpredict الخاصة بـTrainer.
بما أن استدعاءات evaluation قد تحدث أثناء train، فلا يمكننا التعامل مع الاستدعاءات المتداخلة لأن torch.cuda.max_memory_allocated هو عداد واحد، فإذا تم إعادة ضبطه بواسطة استدعاء تقييم متداخل، فإن متتبع train
سوف يبلّغ عن معلومات غير صحيحة. إذا تم حل هذه المشكلة في PyTorch
فسيصبح من الممكن تغيير هذا الصنف ليكون قابلًا لإعادة الدخول. وحتى ذلك الحين، سنقوم بتتبع المستوى الخارجي فقط لطرق train وevaluate وpredict. وهذا يعني أنه إذا تم استدعاء eval أثناء train، فإن الثاني
هو الذي سيحسب استهلاكه للذاكرة واستهلاك الأول.
وهذا يعني أيضًا أنه إذا استدعى أي أداة أخرى تُستخدم مع Trainer الدالة torch.cuda.reset_peak_memory_stats، فقد تصبح إحصائيات ذروة ذاكرة وحدة معالجة الرسوميات غير صالحة. كما أن Trainer سيُخلّ بالسلوك الطبيعي لأي أدوات من هذا النوع تعتمد على استدعاء torch.cuda.reset_peak_memory_stats بنفسها.
للحصول على أفضل أداء، قد ترغب في تعطيل ملفّات الذاكرة (memory profiling) عند التشغيل في بيئة الإنتاج.
metrics_format
< source >( metrics: dict ) → metrics (dict[str, float])
إعادة تنسيق قيم مقاييس Trainer إلى صيغة قابلة للقراءة من قِبل المستخدم.
Helper to get number of samples in a ~torch.utils.data.DataLoader by accessing its dataset. When
dataloader.dataset does not exist or has no length, estimates as best it can
pop_callback
< source >( callback: type[transformers.trainer_callback.TrainerCallback] | transformers.trainer_callback.TrainerCallback ) → TrainerCallback
المعاملات
- callback (
typeأو [`~transformers.TrainerCallback]`) — فئة TrainerCallback أو كائن من فئة TrainerCallback. في الحالة الأولى، سيتم استرجاع أول عضو من تلك الفئة الموجود في قائمة الاستدعاءات.
يعيد
المستدعى المُزال، إذا تم العثور عليه.
إزالة مستدعٍ من القائمة الحالية لـ TrainerCallback وإرجاعه.
إذا لم يُعثر على الاستدعاء العكسي، تُرجع None (ولا يتم رفع أي خطأ).
predict
< source >( test_dataset: Datasetignore_keys: list[str] | None = Nonemetric_key_prefix: str = 'test' )
المعاملات
- test_dataset (
Dataset) — مجموعة البيانات التي تُنفَّذ عليها التنبؤات. إذا كانت من نوعdatasets.Dataset، تُحذف تلقائيًا الأعمدة غير المقبولة بواسطة طريقةmodel.forward(). - ignore_keys (
list[str]، اختياري) — قائمة بمفاتيح في مخرجات النموذج (إذا كان قاموسًا) يجب تجاهلها عند جمع التنبؤات. - metric_key_prefix (
str، اختياري، القيمة الافتراضية"test") — بادئة اختيارية تُستخدم كبادئة لمفاتيح المقاييس. على سبيل المثال، سيُسمى المقياس “bleu” باسم “test_bleu” إذا كانت البادئة “test” (الافتراضية)
تشغيل التنبؤ وإرجاع التنبؤات والمقاييس المحتملة.
اعتمادًا على مجموعة البيانات واستخدامك، قد تحتوي مجموعة الاختبار على تسميات. في هذه الحالة، سيعيد هذا الدالة أيضًا مقاييس، كما في evaluate().
إذا كانت التنبؤات أو التسميات لديك لها طول تسلسل مختلف (على سبيل المثال، لأنك تقوم بتوسيط ديناميكي في مهمة تصنيف الرموز)، فسيتم توسيط التنبؤات (على اليمين) للسماح بدمجها في مصفوفة واحدة. فهرس التوسيط هو -100.
تُرجع: NamedTuple tuple مُسمّى بالمفاتيح التالية:
- التنبؤات (
np.ndarray): التنبؤات علىtest_dataset. - label_ids (
np.ndarray، اختياري): التسميات (إذا كانت مجموعة البيانات تحتوي على تسميات). - المقاييس (
dict[str, float]، اختياري): قاموس المقاييس المحتملة (إذا احتوت مجموعة البيانات على تسميات).
خطوة التنبؤ
< source >( model: Moduleinputs: dictprediction_loss_only: boolignore_keys: list[str] | None = None ) → tuple[Optional[torch.Tensor], Optional[torch.Tensor], Optional[torch.Tensor]]
المعاملات
- model (
nn.Module) — النموذج المراد تقييمه. - inputs (
dict[str, torch.Tensor | Any]) — مدخلات النموذج وأهدافه.سيتم فك حزمة القاموس قبل تمريره إلى النموذج. تتوقع معظم النماذج أن تكون الأهداف تحت الحجة
labels. راجع توثيق نموذجك لمعرفة جميع الحجج المقبولة. - prediction_loss_only (
bool) — ما إذا كان يجب إرجاع الخسارة فقط أم لا. - ignore_keys (
list[str]، اختياري) — قائمة بمفاتيح في مخرجات النموذج (إذا كان قاموسًا) يجب تجاهلها عند جمع التنبؤات.
يعيد
tuple[Optional[torch.Tensor], Optional[torch.Tensor], Optional[torch.Tensor]]
مجموعة (tuple) تحتوي على الخسارة (loss) والنتائج (logits) والوسوم (labels) (كل منها اختياري).
أداء خطوة تقييم على model باستخدام inputs.
أنشئ فئة فرعية وأعد تعريف الدوال لحقن سلوك مخصص.
push_to_hub
< source >( commit_message: str | None = 'End of training'blocking: bool = Truetoken: str | None = Nonerevision: str | None = Noneprivate: bool | None = None**kwargs )
المعاملات
- commit_message (
str، اختياري، الافتراضي"End of training") — الرسالة التي تُرسل عند الدفع. - blocking (
bool، اختياري، القيمة الافتراضيةTrue) — ما إذا كان ينبغي للدالة أن تُرجع القيمة فقط بعد اكتمال عمليةgit push. - token (
str، اختياري، القيمة الافتراضيةNone) — رمز (Token) يملك صلاحية الكتابة لتجاوز الحجج الأصلية الخاصة بـ Trainer. - revision (
str، اختياري) — مراجعة git التي سيتم الالتزام منها. الافتراضي هو رأس فرع "main". - private (
bool، اختياري) — ما إذا كان يجب جعل المستودع خاصًا عند إنشائه. القيمة الافتراضية هيargs.hub_private_repo. لا يكون له أي تأثير إذا كان المستودع موجودًا مسبقًا. - kwargs (
dict[str, Any]، اختياري) — معلمات إضافية تُمرَّر إلى create_model_card().
ارفع self.model وself.processing_class إلى مركز النماذج 🤗 في المستودع self.args.hub_model_id.
remove_callback
< source >( callback: type[transformers.trainer_callback.TrainerCallback] | transformers.trainer_callback.TrainerCallback )
المعاملات
- callback (
typeأو [`~transformers.TrainerCallback`]) — فئة TrainerCallback أو مثيل من TrainerCallback. في الحالة الأولى، سيتم حذف أول عضو من تلك الفئة الموجود في قائمة الاستدعاءات.
إزالة مستدعٍ من القائمة الحالية لـ TrainerCallback.
save_metrics
< source >( splitmetricscombined = True )
احفظ المقاييس في ملف json خاص بتلك التقسيمة، مثل train_results.json.
في البيئة الموزعة، يتم تنفيذ هذا الإجراء فقط للعملية ذات الترتيب 0.
لفهم المقاييس، يرجى قراءة log_metrics() في التوثيق. والفرق الوحيد هو أن الأرقام الخام غير المنسّقة تُحفظ في الطريقة الحالية.
سيحفظ النموذج، مما يتيح لك إعادة تحميله باستخدام from_pretrained().
سيتم الحفظ من العملية الرئيسية فقط.
يحفظ حالة Trainer، لأن Trainer.save_model يحفظ المرمّز (tokenizer) مع النموذج فقط.
في البيئة الموزعة، يتم تنفيذ هذا الإجراء فقط للعملية ذات الترتيب 0.
يُحسب ويعيد القيم التالية:
num_train_epochsnum_update_steps_per_epochnum_examplesnum_train_samplestotal_train_batch_sizesteps_in_epoch(إجمالي الدفعات في كل حقبة)max_steps
احفظ عدد عمليات الفاصلة العائمة التي تم إجراؤها في النموذج.
تدريب
< source >( resume_from_checkpoint: str | bool | None = Nonetrial: optuna.Trial | dict[str, Any] | None = Noneignore_keys_for_eval: list[str] | None = None ) → TrainOutput
المعاملات
- resume_from_checkpoint (
strأوbool، اختياري) — إذا كانstr، فهو المسار المحلي لنقطة تفتيش محفوظة بواسطة نسخة سابقة من Trainer. وإذا كانboolوقيمتهTrue، يتم تحميل آخر نقطة تفتيش في args.output_dir كما حفظتها نسخة سابقة من Trainer. إذا كانت موجودة، فسيستأنف التدريب من حالات النموذج/المُحسِّن/المجدول المحمَّلة من هنا. - trial (
optuna.Trialأوdict[str, Any]، اختياري) — التجربة أو قاموس المعاملات الفائقة للبحث في المعاملات الفائقة. - ignore_keys_for_eval (
list[str]، اختياري) — قائمة بالمفاتيح في مخرجات النموذج (إذا كان قاموسًا) التي يجب تجاهلها عند جمع التنبؤات للتقييم أثناء التدريب.
يعيد
TrainOutput
كائن يحتوي على عدد الخطوات العالمية، وخسارة التدريب، والمقاييس.
نقطة الدخول الرئيسية للتدريب.
خطوة التدريب
< source >( model: Moduleinputs: dictnum_items_in_batch: typing.Union[torch.Tensor, int, NoneType] = None ) → torch.Tensor
المعاملات
- model (
nn.Module) — النموذج المراد تدريبه. - inputs (
dict[str, torch.Tensor | Any]) — مدخلات النموذج وأهدافه.سيتم فك حزمة القاموس قبل تمريره إلى النموذج. تتوقع معظم النماذج أن تكون الأهداف تحت الحجة
labels. راجع توثيق نموذجك لمعرفة جميع الحجج المقبولة.
يعيد
torch.Tensor
الموتر الذي يحتوي على خسارة التدريب على هذه الدفعة.
نفّذ خطوة تدريب على دفعة من المدخلات.
أنشئ فئة فرعية وأعد تعريف الدوال لحقن سلوك مخصص.
Seq2SeqTrainer
فئة transformers.Seq2SeqTrainer
< source >( model: typing.Union[ForwardRef('PreTrainedModel'), torch.nn.Module, NoneType] = Noneargs: typing.Optional[ForwardRef('TrainingArguments')] = Nonedata_collator: typing.Optional[ForwardRef('DataCollator')] = Nonetrain_dataset: typing.Union[torch.utils.data.Dataset, ForwardRef('IterableDataset'), ForwardRef('datasets.Dataset'), NoneType] = Noneeval_dataset: typing.Union[torch.utils.data.Dataset, dict[str, torch.utils.data.Dataset], NoneType] = Noneprocessing_class: typing.Union[ForwardRef('PreTrainedTokenizerBase'), ForwardRef('BaseImageProcessor'), ForwardRef('FeatureExtractionMixin'), ForwardRef('ProcessorMixin'), NoneType] = Nonemodel_init: collections.abc.Callable[[], 'PreTrainedModel'] | None = Nonecompute_loss_func: collections.abc.Callable | None = Nonecompute_metrics: collections.abc.Callable[['EvalPrediction'], dict] | None = Nonecallbacks: list['TrainerCallback'] | None = Noneoptimizers: tuple = (None, None)preprocess_logits_for_metrics: collections.abc.Callable[[torch.Tensor, torch.Tensor], torch.Tensor] | None = None )
evaluate
< source >( eval_dataset: typing.Optional[torch.utils.data.Dataset] = Noneignore_keys: list[str] | None = Nonemetric_key_prefix: str = 'eval'**gen_kwargs )
المعاملات
- eval_dataset (
Dataset، اختياري) — مرّر مجموعة بيانات إذا كنت ترغب في تجاوزself.eval_dataset. إذا كانت من نوع Dataset، فسيتم حذف الأعمدة غير المقبولة تلقائيًا بواسطة طريقةmodel.forward(). يجب أن تنفّذ طريقة__len__. - ignore_keys (
list[str]، اختياري) — قائمة بمفاتيح في مخرجات النموذج (إذا كان قاموسًا) يجب تجاهلها عند جمع التنبؤات. - metric_key_prefix (
str، اختياري، القيمة الافتراضية"eval") — بادئة اختيارية تُستخدم كبادئة لمفاتيح المقاييس. على سبيل المثال، سيُسمّى المقياس "bleu" باسم "eval_bleu" إذا كانت البادئة"eval"(الافتراضية) - max_length (
int، اختياري) — الحد الأقصى لطول الهدف المستخدم عند التنبؤ باستخدام طريقة generate. - num_beams (
int, اختياري) — عدد الحزم (beams) المستخدمة في بحث الحزم (beam search) عند التنبؤ باستخدام طريقة generate. القيمة 1 تعني عدم استخدام بحث الحزم. - gen_kwargs —
معلمات إضافية خاصة بـ
generate.
تشغيل التقييم وإرجاع المقاييس.
ستكون سكريبت الاستدعاء مسؤولة عن توفير طريقة لحساب المقاييس، إذ إنها تعتمد على المهمة (مرّرها إلى معامل compute_metrics في init).
يمكنك أيضًا إنشاء فئة فرعية وتجاوز هذه الطريقة لحقن سلوك مخصص.
predict
< source >( test_dataset: Datasetignore_keys: list[str] | None = Nonemetric_key_prefix: str = 'test'**gen_kwargs )
المعاملات
- test_dataset (
Dataset) — مجموعة البيانات التي تُنفَّذ عليها التنبؤات. إذا كانت من نوع Dataset، تُحذف تلقائيًا الأعمدة غير المقبولة بواسطة طريقةmodel.forward(). يجب أن تُنفّذ الطريقة__len__ - ignore_keys (
list[str]، اختياري) — قائمة بمفاتيح في مخرجات النموذج (إذا كان قاموسًا) يجب تجاهلها عند جمع التنبؤات. - metric_key_prefix (
str، اختياري، القيمة الافتراضية"eval") — بادئة اختيارية تُستخدم كبادئة لمفاتيح المقاييس. على سبيل المثال، سيُسمّى المقياس "bleu" باسم "eval_bleu" إذا كانت البادئة"eval"(الافتراضية) - max_length (
int، اختياري) — الحد الأقصى لطول الهدف المستخدم عند التنبؤ باستخدام طريقة generate. - num_beams (
int, اختياري) — عدد الحزم (beams) المستخدمة في بحث الحزم (beam search) عند التنبؤ باستخدام طريقة generate. القيمة 1 تعني عدم استخدام بحث الحزم. - gen_kwargs —
معلمات إضافية خاصة بـ
generate.
تشغيل التنبؤ وإرجاع التنبؤات والمقاييس المحتملة.
اعتمادًا على مجموعة البيانات واستخدامك، قد تحتوي مجموعة الاختبار على تسميات. في هذه الحالة، سيعيد هذا الدالة أيضًا مقاييس، كما في evaluate().
إذا كانت التنبؤات أو التسميات لديك لها أطوال تسلسل مختلفة (على سبيل المثال، لأنك تقوم بتوسيط ديناميكي في مهمة تصنيف الرموز)، فسيتم توسيط التنبؤات (على اليمين) للسماح بدمجها في مصفوفة واحدة. فهرس التوسيط هو -100.
تُرجع: NamedTuple tuple مُسمّى بالمفاتيح التالية:
- التنبؤات (
np.ndarray): التنبؤات علىtest_dataset. - label_ids (
np.ndarray، اختياري): التسميات (إذا كانت مجموعة البيانات تحتوي على تسميات). - المقاييس (
dict[str, float]، اختياري): قاموس المقاييس المحتملة (إذا احتوت مجموعة البيانات على تسميات).
TrainingArguments
فئة transformers.TrainingArguments
< source >( output_dir: str | None = Noneper_device_train_batch_size: int = 8num_train_epochs: float = 3.0max_steps: int = -1learning_rate: float = 5e-05lr_scheduler_type: transformers.trainer_utils.SchedulerType | str = 'linear'lr_scheduler_kwargs: dict | str | None = Nonewarmup_steps: float = 0optim: transformers.training_args.OptimizerNames | str = 'adamw_torch_fused'optim_args: str | None = Noneweight_decay: float = 0.0adam_beta1: float = 0.9adam_beta2: float = 0.999adam_epsilon: float = 1e-08optim_target_modules: None | str | list[str] = Nonegradient_accumulation_steps: int = 1average_tokens_across_devices: bool = Truemax_grad_norm: float = 1.0label_smoothing_factor: float = 0.0bf16: bool = Falsefp16: bool = Falsebf16_full_eval: bool = Falsefp16_full_eval: bool = Falsetf32: bool | None = Noneactivation_checkpointing: bool | None = Noneactivation_checkpointing_kwargs: dict[str, typing.Any] | str | None = Nonegradient_checkpointing: bool | None = Nonegradient_checkpointing_kwargs: dict[str, typing.Any] | str | None = Nonetorch_compile: bool = Falsetorch_compile_backend: str | None = Nonetorch_compile_mode: str | None = Noneuse_liger_kernel: bool = Falseliger_kernel_config: dict[str, bool] | None = Noneuse_cache: bool = Falseneftune_noise_alpha: float | None = Nonetorch_empty_cache_steps: int | None = Noneauto_find_batch_size: bool = Falselogging_strategy: transformers.trainer_utils.IntervalStrategy | str = 'steps'logging_steps: float = 500logging_first_step: bool = Falselog_on_each_node: bool = Truelogging_nan_inf_filter: bool = Trueinclude_num_input_tokens_seen: str | bool = 'no'log_level: str = 'passive'log_level_replica: str = 'warning'disable_tqdm: bool | None = Nonereport_to: None | str | list[str] = 'none'run_name: str | None = Noneproject: str = 'huggingface'trackio_space_id: str | None = Nonetrackio_bucket_id: str | None = Nonetrackio_static_space_id: typing.Union[str, NoneType, typing.Literal[False]] = Noneeval_strategy: transformers.trainer_utils.IntervalStrategy | str = 'no'eval_steps: float | None = Noneeval_delay: float = 0per_device_eval_batch_size: int = 8prediction_loss_only: bool = Falseeval_on_start: bool = Falseeval_do_concat_batches: bool = Trueeval_use_gather_object: bool = Falseeval_accumulation_steps: int | None = Noneinclude_for_metrics: list = <factory>batch_eval_metrics: bool = Falsesave_only_model: bool = Falsesave_strategy: transformers.trainer_utils.SaveStrategy | str = 'steps'save_steps: float = 500save_on_each_node: bool = Falsesave_total_limit: int | None = Noneenable_jit_checkpoint: bool = Falsepush_to_hub: bool = Falsehub_token: str | None = Nonehub_private_repo: bool | None = Nonehub_model_id: str | None = Nonehub_strategy: transformers.trainer_utils.HubStrategy | str = 'every_save'hub_always_push: bool = Falsehub_revision: str | None = Noneload_best_model_at_end: bool = Falsemetric_for_best_model: str | None = Nonegreater_is_better: bool | None = Noneignore_data_skip: bool = Falserestore_callback_states_from_checkpoint: bool = Falsefull_determinism: bool = Falseseed: int = 42data_seed: int | None = Noneuse_cpu: bool = Falseaccelerator_config: dict | str | None = Noneparallelism_config: typing.Any | None = Nonedataloader_drop_last: bool = Falsedataloader_num_workers: int = 0dataloader_pin_memory: bool = Truedataloader_persistent_workers: bool = Falsedataloader_prefetch_factor: int | None = Nonedataloader_multiprocessing_context: str | None = Nonedataloader_in_order: bool = Trueremove_unused_columns: bool = Truelabel_names: list[str] | None = Nonetrain_sampling_strategy: str = 'random'length_column_name: str = 'length'ddp_find_unused_parameters: bool | None = Noneddp_bucket_cap_mb: int | None = Noneddp_broadcast_buffers: bool | None = Noneddp_static_graph: bool | None = Noneddp_backend: str | None = Noneddp_timeout: int = 1800fsdp: str | None = Nonefsdp_config: dict[str, typing.Any] | str | None = Nonedeepspeed: dict | str | None = Nonedebug: str | list[transformers.debug_utils.DebugOption] = ''skip_memory_metrics: bool = Truedo_train: bool = Falsedo_eval: bool = Falsedo_predict: bool = Falseresume_from_checkpoint: str | None = Nonelocal_rank: int = -1 )
المعاملات
- output_dir (
str، اختياري، القيمة الافتراضية"trainer_output") — مجلد الإخراج الذي سيتم فيه كتابة تنبؤات النموذج ونقاط التفتيش.
مدة التدريب وحجم الدفعة
- per_device_train_batch_size (
int، اختياري، القيمة الافتراضية 8) — حجم الدفعة لكل جهاز. يُحسب حجم الدفعة الكلي على النحو التالي:per_device_train_batch_size * number_of_devicesفي إعدادات متعددة GPUs أو موزعة. - num_train_epochs(
float, اختياري، القيمة الافتراضية 3.0) — إجمالي عدد فترات التدريب (epochs) التي يجب تنفيذها (إذا لم تكن قيمة صحيحة، فسيتم تنفيذ الجزء العشري كنسبة مئوية من الفترة الأخيرة قبل إيقاف التدريب). - max_steps (
int، اختياري، القيمة الافتراضية -1) — يتجاوزnum_train_epochs. إذا تم ضبطه على رقم موجب، فهو يمثل العدد الإجمالي لخطوات التدريب التي يجب تنفيذها. بالنسبة إلى مجموعة بيانات محدودة، يتم تكرار التدريب عبر مجموعة البيانات (إذا استُنفد كل البيانات) حتى يتم الوصول إلىmax_steps. يجب ضبطه على قيمة موجبة عندما لا تنفّذ مجموعة بيانات التدريب__len__(مثل مجموعة بيانات البث)، لأن العدد الإجمالي للخطوات لا يمكن استنتاجه في هذه الحالة، وهو مطلوب لتحديد حد حلقة التدريب وإعداد مجدول معدل التعلم.
معدل التعلم والمجدول
- learning_rate (
float، اختياري، القيمة الافتراضية 5e-5) — معدل التعلم الأولي لمُحسِّن التدريب. عادةً ما يكون هذا هو معدل التعلم الأقصى عند استخدام مُجدوِل مع فترة إحماء. - lr_scheduler_type (
strأو SchedulerType, اختياري, الافتراضي هو"linear") — نوع جدولة معدل التعلم المستخدم. راجع SchedulerType لمعرفة جميع القيم الممكنة. الخيارات الشائعة:- “linear” = get_linear_schedule_with_warmup()
- “cosine” = get_cosine_schedule_with_warmup()
- “constant” = get_constant_schedule()
- “constant_with_warmup” = get_constant_schedule_with_warmup()
- lr_scheduler_kwargs (
dictأوstr، اختياري، القيمة الافتراضيةNone) — الحجج الإضافية الخاصة بـ lr_scheduler. راجع توثيق كل مُجدول لمعرفة القيم الممكنة. - warmup_steps (
intأوfloat, اختياري, الافتراضي 0) — عدد الخطوات لدفء خطي من 0 إلىlearning_rate. يساعد الدفء في استقرار التدريب في المرحلة الأولية. يمكن أن يكون:- عدد صحيح: عدد خطوات الإحماء الدقيق
- عدد عشري ضمن المدى [0, 1): يُفسَّر كنسبة من إجمالي خطوات التدريب
المُحسِّن
- optim (
strأوtraining_args.OptimizerNames, اختياري, الافتراضي هو"adamw_torch"(لـ torch>=2.8"adamw_torch_fused")) — المُحسِّن (Optimizer) المستخدم. الخيارات الشائعة:"adamw_torch": AdamW في PyTorch (الافتراضي الموصى به)"adamw_torch_fused": نواة AdamW المدمجة"adamw_hf": تنفيذ AdamW من HuggingFace"sgd": هبوط التدرج العشوائي مع الزخم"adafactor": مُحسِّن فعّال من حيث الذاكرة للنماذج الكبيرة"adamw_8bit": AdamW بدقة 8 بت (يتطلب bitsandbytes) راجعOptimizerNamesللحصول على القائمة الكاملة.
- optim_args (
str, اختياري) — حجج اختيارية تُمرَّر إلى المُحسِّنات مثل AnyPrecisionAdamW وAdEMAMix وGaLore. - weight_decay (
float، اختياري، القيمة الافتراضية 0) — معامل اضمحلال الوزن الذي يطبّقه المُحسِّن (وليس دالة الخسارة). يضيف تنظيم L2 لمنع الإفراط في التخصيص من خلال معاقبة الأوزان الكبيرة. يُستثنى تلقائيًا من معاملات الانحياز وLayerNorm. القيم النموذجية: 0.01 (قياسي)، 0.1 (تنظيم أقوى)، 0.0 (بدون تنظيم). - adam_beta1 (
float, اختياري، القيمة الافتراضية 0.9) — معدل الاضمحلال الأسي لتقديرات اللحظة الأولى (الزخم) في المُحسِّنات القائمة على Adam. يتحكم في مقدار سجل التدرجات الذي يجب الاحتفاظ به. - adam_beta2 (
float, اختياري، القيمة الافتراضية 0.999) — معدل الاضمحلال الأسي لتقديرات العزوم الثانية (التباين) في المُحسِّنات القائمة على Adam. يتحكم في تحجيم معدل التعلم التكيفي. - adam_epsilon (
float, اختياري، القيمة الافتراضية 1e-8) — قيمة إيبسلون للاستقرار العددي في المُحسِّنات القائمة على Adam. تمنع القسمة على الصفر في مقام قاعدة التحديث. - optim_target_modules (
Union[str, list[str]]، اختياري) — وحدات الهدف التي سيتم تحسينها، أي أسماء الوحدات التي ترغب في تدريبها. يُستخدم حاليًا لخوارزمية GaLore وخوارزمية APOLLO. راجع تنفيذ GaLore وتنفيذ APOLLO لمزيد من التفاصيل. يجب التأكد من تمرير مُحسِّن GaLore أو APOLLO صالح، مثل أحد ما يلي: “apollo_adamw” و“galore_adamw” و“galore_adamw_8bit” و“galore_adafactor”، والتأكد من أن وحدات الهدف هي وحداتnn.Linearفقط.
التنظيم واستقرار التدريب
- gradient_accumulation_steps (
int, اختياري, الافتراضي 1) — عدد خطوات التحديث لتجميع التدرجات قبل تنفيذ مسار التراجع/التحديث. يحاكي أحجام دفعات أكبر دون استهلاك ذاكرة إضافية. حجم الدفعة الفعّال =per_device_train_batch_size × num_devices × gradient_accumulation_steps.عند استخدام تراكم التدرجات، يُحتسب "خطوة" واحدة على أنها خطوة واحدة تتضمن مسارًا عكسيًا. لذلك، ستتم عمليات التسجيل والتقييم والحفظ كل
gradient_accumulation_steps × xxx_stepمن أمثلة التدريب. - average_tokens_across_devices (
bool، اختياري، القيمة الافتراضيةTrue) — ما إذا كان سيتم أخذ متوسط الرموز عبر الأجهزة أم لا. إذا تم التفعيل، فسيتم استخدام all_reduce لمزامنة num_tokens_in_batch لحساب الدقة بدقة. المرجع: https://github.com/huggingface/transformers/issues/34242 - max_grad_norm (
float, اختياري، القيمة الافتراضية 1.0) — الحد الأقصى لطول التدرّج (Norm) لقصّ التدرّجات. يُطبَّق بعد مرور التدرّج العكسي وقبل خطوة المُحسِّن. يمنع انفجار التدرّجات عن طريق تصغير التدرّجات عندما يتجاوز طولها الكلي هذا العتبة. اضبطه على 0 لتعطيل القصّ. القيم النموذجية: 1.0 (قياسي)، 0.5 (أكثر تحفظاً)، 5.0 (أقل عدوانية). - label_smoothing_factor (
float, اختياري، القيمة الافتراضية 0.0) — معامل تنعيم التسميات لمنع الثقة المفرطة. يستبدل الأهداف الصلبة 0/1 بأهداف ناعمة: يصبح 0 هوε/num_labelsويصبح 1 هو1 - ε + ε/num_labels، حيث ε =label_smoothing_factor. تعني القيمة صفرًا عدم وجود تنعيم. النطاق النموذجي: من 0.0 إلى 0.1.
التدريب بالدقة المختلطة
- bf16 (
bool، اختياري، القيمة الافتراضيةFalse) — تفعيل تدريب الدقة المختلطة bfloat16 (BF16) يُفضَّل عمومًا على FP16 نظرًا لاستقراره العددي الأفضل وعدم الحاجة إلى تحجيم الفقد. - fp16 (
bool، اختياري، القيمة الافتراضيةFalse) — تفعيل التدريب بدقة مختلطة float16 (FP16). يُفضَّل استخدام BF16 بدلاً من ذلك إذا كان جهازك يدعمه. - bf16_full_eval (
bool، اختياري، القيمة الافتراضيةFalse) — استخدام دقة BF16 الكاملة للتقييم (وليس الدقة المختلطة فقط). أسرع ويوفر الذاكرة، لكنه قد يؤثر قليلاً على قيم المقاييس. ينطبق فقط أثناء التقييم. - fp16_full_eval (
bool، اختياري، القيمة الافتراضيةFalse) — استخدام دقة FP16 الكاملة للتقييم (وليس مجرد دقة مختلطة). أسرع ويوفر الذاكرة، لكنه قد يؤثر قليلاً على قيم المقاييس. ينطبق فقط أثناء التقييم. - tf32 (
bool، اختياري) — تفعيل وضع TensorFloat-32 (TF32) على وحدات معالجة الرسوميات من نوع Ampere والأحدث. يستخدم TF32 دقة بمقدار 19 بت للضرب المصفوفي (بدلاً من 23 بت في FP32)، مما يوفر تسريعًا يصل إلى 8 أضعاف مع فقدان دقة ضئيل. تعتمد القيمة الافتراضية على إصدار PyTorch. راجع وثائق TF32.
التحقق من التفعيل
- activation_checkpointing (
bool, اختياري، القيمة الافتراضيةFalse) — تفعيل فحص التفعيل لتبادل الحساب مع الذاكرة. يقلل من استهلاك الذاكرة عن طريق مسح التفعيلات أثناء المرور الأمامي وإعادة حسابها أثناء المرور الخلفي. يتيح تدريب نماذج أكبر أو أحجام دفعات أكبر مقابل تكلفة تدريب أبطأ بنسبة ~20%. - activation_checkpointing_kwargs (
dict، اختياري، القيمة الافتراضيةNone) — حجج الكلمات المفتاحية التي تُمرَّر إلىactivation_checkpointing_enable().every_n_layersيُنشئ نقاط فحص (checkpoints) لكل طبقة مُفكِّكة (decoder) رقمها مضاعف لـ n بدلاً من جميع الطبقات؛1هو السلوك المعتاد الشامل أو الباطل، والقيم الأكبر تُعيد بعض الذاكرة إلى السرعة.offloadيحتفظ بالتفعيلات المحفوظة في ذاكرة مضيف مثبّتة (pinned host memory)، مما يُحررlayers x sequence x hiddenبايت من ذاكرة الجهاز ويجعل الخطوة أبطأ. أي مفتاح آخر يُمرَّر إلىtorch.utils.checkpoint.checkpoint. - gradient_checkpointing (
bool، اختياري) — اسم مستعار غير مستخدم لـactivation_checkpointing، وسيتم إزالته في الإصدار v6. - gradient_checkpointing_kwargs (
dict، اختياري) — اسم مستعار غير مستحسن لـactivation_checkpointing_kwargs، وسيتم إزالته في الإصدار v6.
التجميع
- torch_compile (
bool، اختياري، القيمة الافتراضيةFalse) — تجميع النموذج باستخدامtorch.compile()في PyTorch 2.0 لتسريع التدريب. يمكن أن يوفر تسريعًا بنسبة 20-50% دون أي تغييرات في الكود. يستخدم إعدادات التجميع الافتراضية ما لم يتم تحديدtorch_compile_backendأوtorch_compile_mode. - torch_compile_backend (
str، اختياري) — الخلفية (Backend) الخاصة بـtorch.compile(). إذا تم ضبطه، يتم تفعيلtorch_compileتلقائيًا. تشمل الخيارات"inductor"(الافتراضي)،"aot_eager"،"cudagraphs". تختلف الخلفيات حسب إصدار PyTorch - راجع توثيق PyTorch لمعرفة الخيارات المتاحة. - torch_compile_mode (
str, اختياري) — وضع التجميع لـtorch.compile(). إذا تم ضبطه، يتم تفعيلtorch_compileتلقائيًا. الخيارات:"default"،"reduce-overhead"(لتقليل الحمل الإضافي على Python)،"max-autotune"(تحسين عدواني، مع وقت تجميع أطول).
النوى
- use_liger_kernel (
bool، اختياري، القيمة الافتراضيةFalse) — تفعيل تحسينات Liger Kernel. يزيد من الإنتاجية عبر وحدات معالجة الرسومات المتعددة بنسبة ~20% ويقلل من استهلاك الذاكرة بنسبة ~60%. يعمل مع Flash Attention وFSDP وDeepSpeed. يدعم حاليًا نماذج Llama وMistral وMixtral وGemma. - liger_kernel_config (
Optional[dict], اختياري) — إعدادات Liger Kernel. تُمرَّر كـ kwargs إلى_apply_liger_kernel_to_instance(). تشمل الخيارات عادةً:"rope"،"swiglu"،"cross_entropy"،"fused_linear_cross_entropy"،"rms_norm". إذا كانتNone، يتم استخدام الإعدادات الافتراضية.
تحسينات إضافية
- use_cache (
bool، اختياري، القيمة الافتراضيةFalse) — ما إذا كان سيتم تفعيل ذاكرة التخزين المؤقت للنموذج أم لا. في حالة التدريب، عادةً ما لا تكون هذه الخاصية مطلوبة باستثناء بعض طرق PEFT التي تستخدمpast_key_values. - neftune_noise_alpha (
Optional[float]) — إذا لم تكنNone، فسيتم تفعيل تضمينات ضوضاء NEFTune. يمكن أن يحسّن هذا أداء النموذج بشكل كبير في الضبط الدقيق التعليمي. اطّلع على الورقة الأصلية و الكود الأصلي. يدعمPreTrainedModelمن transformers وكذلكPeftModelمن peft. استخدمت الورقة الأصلية قيمًا في النطاق [5.0, 15.0]. - torch_empty_cache_steps (
int, اختياري) — عدد الخطوات التي يجب انتظارها قبل استدعاءtorch.<device>.empty_cache(). إذا تُرك غير مضبوط أو تم ضبطه على None، فلن يتم تفريغ ذاكرة التخزين المؤقت. يمكن أن يساعد ذلك في تجنب أخطاء نفاد ذاكرة CUDA عن طريق خفض ذروة استخدام ذاكرة VRAM، مقابل تكلفة تقارب 10% من الأداء الأبطأ. - auto_find_batch_size (
bool، اختياري، القيمة الافتراضيةFalse) — ما إذا كان سيتم تحديد حجم دفعة التدريب الذي يتناسب مع الذاكرة تلقائيًا من خلال التلاشي الأسي، لتجنب أخطاء نفاد ذاكرة CUDA. لا يتم تعديل حجم دفعة التقييم.
تسجيل ومراقبة التدريب
- logging_strategy (
strأو IntervalStrategy, اختياري, الافتراضي هو"steps") — استراتيجية التسجيل المعتمدة أثناء التدريب. القيم الممكنة هي:"no": لا يتم تسجيل أي سجلات أثناء التدريب."epoch": يتم التسجيل في نهاية كل حقبة."steps": يتم التسجيل كلlogging_steps.
- logging_steps (
intأوfloat، اختياري، القيمة الافتراضية 500) — عدد خطوات التحديث بين سجلّين إذا كانlogging_strategy="steps". يجب أن يكون عددًا صحيحًا أو عددًا عشريًا ضمن النطاق[0,1). إذا كان أقل من 1، فسيُفسَّر كنسبة من إجمالي خطوات التدريب. - logging_first_step (
bool، اختياري، القيمة الافتراضيةFalse) — ما إذا كان سيتم تسجيل الخطوة الأولىglobal_stepأم لا. - log_on_each_node (
bool، اختياري، القيمة الافتراضيةTrue) — في التدريب الموزّع متعدد العقد، ما إذا كان سيتم التسجيل باستخدامlog_levelمرة واحدة لكل عقدة، أم على العقدة الرئيسية فقط. - logging_nan_inf_filter (
bool، اختياري، القيمة الافتراضيةTrue) — تصفية قيم NaN و Inf في الخسائر عند التسجيل. إذا كانتTrue، يتم استبدال خسائر التدريب التي تكون NaN/Inf بمتوسط الخسائر الصالحة الأخيرة، ويُستثنى الدُفعات التي تحتوي على NaN/Inf (مثل الدُفعات التي لا تحتوي على رموز تسميات) من حساب خسارة التقييم. لا يؤثر ذلك على حساب التدرجات، بل على التسجيل فقط. - include_num_input_tokens_seen (
Optional[Union[str, bool]]، اختياري، القيمة الافتراضية “no”) — ما إذا كان سيتم تتبع عدد رموز الإدخال التي تم رؤيتها. يجب أن تكون واحدة من [“all”, “non_padding”, “no”] أو قيمة منطقية تُخضع إلى “all” أو “no”. قد يكون أبطأ في التدريب الموزّع لأن عمليات الجمع (gather) يجب أن تُستدعى.
التسجيل
- log_level (
str، اختياري، القيمة الافتراضيةpassive) — مستوى التسجيل للعملية الرئيسية. الخيارات:"debug"،"info"،"warning"،"error"،"critical"، أو"passive"(لا يغيّر مستوى تسجيل Transformers الحالي، والذي تكون قيمته الافتراضية"warning") - log_level_replica (
str، اختياري، القيمة الافتراضية"warning") — مستوى التسجيل لعمليات النسخ في التدريب الموزّع. نفس الخيارات المتاحة فيlog_level. - disable_tqdm (
bool, اختياري) — تعطيل أشرطة تقدم tqdm. القيمة الافتراضية هيTrueإذا كانlog_levelعلى مستوى warning أو أدنى، وإلا فهيFalse.
تكامل تتبع التجارب
- report_to (
strأوlist[str]، اختياري، القيمة الافتراضية"none") — قائمة التكاملات التي سيتم الإبلاغ عن النتائج والسجلات إليها. المنصات المدعومة هي"azure_ml"،"clearml"،"codecarbon"،"comet_ml"،"dagshub"،"dvclive"،"flyte"،"mlflow"،"swanlab"،"tensorboard"،"trackio"و"wandb". استخدم"all"للإبلاغ إلى جميع التكاملات المثبتة، و"none"لعدم استخدام أي تكاملات. - run_name (
str, اختياري) — وصف للتشغيل. يُستخدم عادةً لتسجيل trackio، wandb، mlflow، comet و swanlab. - project (
str، اختياري، القيمة الافتراضية"huggingface") — اسم المشروع المستخدم للتسجيل. حاليًا، يُستخدم فقط بواسطة Trackio. - trackio_space_id (
strأوNone، اختياري، القيمة الافتراضيةNone) — معرف مساحة Hugging Face التي تُستخدم للتسجيل المباشر عبر Trackio باستخدام مساحة مبنية على Gradio. يجب أن يكون اسمًا كاملًا للمساحة على غرار'username/reponame'أو'orgname/reponame'، أو مجرد'reponame'(تُنشأ المساحة في نطاق المستخدم المسجّل حاليًا). إذا كانت القيمةNone، تُسجَّل المقاييس في مجلد محلي فقط (بدون مساحة على Hub). تتمتع مساحة Gradio تلك بصلاحية القراءة والكتابة إلى Bucket الخاص بـ Trackio، وهو ما تريده أثناء استمرار التدريب—على سبيل المثال عند استئناف تشغيل جزئي أو تجميع السجلات من عدة أجهزة. ستكون المساحة عامة ما لم تضبطhub_private_repo=Trueأو كان الافتراضي في مؤسستك هو إنشاء مساحات خاصة. - trackio_bucket_id (
strأوNone، اختياري، القيمة الافتراضيةNone) — معرف Bucket اختياري على Hugging Face خاص بـ Trackio. إذا لم يُضبط، فسيُشتقّ Trackio معرّفًا تلقائيًا. يُستخدم مع مساحة Gradio (trackio_space_id) وعند نشر مساحة ثابتة (عندما لا تكونtrackio_static_space_idقيمةFalse). - trackio_static_space_id (
strأوFalseأوNone، اختياري، القيمة الافتراضية هيNone) — معرف مساحة Hugging Face الذي سيتم استخدامه للمساحة الثابتة التي تُنشأ بعد اكتمال التدريب. يجب أن يكون اسمًا كاملاً للمساحة على غرار'username/reponame'أو'orgname/reponame'، أو مجرد'reponame'(تُنشأ المساحة في مساحة المستخدم المسجّل حاليًا). إذا كانت القيمة False، فلن يتم إنشاء مساحة ثابتة. إذا كانت القيمة None، وتم دفع النموذج إلى Hub، فسيتم إنشاء مساحة ثابتة باسم افتراضي وسيتم ربطها من بطاقة النموذج. ستكون المساحة عامة ما لم تضبطhub_private_repo=Trueأو كان الإعداد الافتراضي لمنظمتك هو إنشاء مساحات خاصة.
التقييم
- eval_strategy (
strأو IntervalStrategy, اختياري, الافتراضي هو"no") — متى يتم تشغيل التقييم. الخيارات:"no": لا يتم إجراء أي تقييم أثناء التدريب"steps": التقييم كلeval_steps"epoch": التقييم في نهاية كل حقبة
- eval_steps (
intأوfloat، اختياري) — عدد خطوات التحديث بين تقييمين إذا كانeval_strategy="steps". إذا لم يتم ضبطه، فسيُستخدم نفس القيمة الخاصة بـlogging_stepsافتراضيًا. يجب أن يكون عددًا صحيحًا أو عددًا عشريًا ضمن المدى[0,1). إذا كان أقل من 1، سيُفسَّر كنسبة من إجمالي خطوات التدريب. - eval_delay (
float, اختياري) — عدد الفترات أو الخطوات التي يجب انتظارها قبل إجراء أول تقييم، وذلك اعتمادًا على eval_strategy. - per_device_eval_batch_size (
int، اختياري، القيمة الافتراضية 8) — حجم الدفعة لكل نواة تسريع/وحدة معالجة مركزية على الجهاز للتقييم. - prediction_loss_only (
bool، اختياري، القيمة الافتراضيةFalse) — عند إجراء التقييم وتوليد التنبؤات، يُرجع الخسارة فقط. - eval_on_start (
bool، اختياري، القيمة الافتراضيةFalse) — ما إذا كان يجب تنفيذ خطوة تقييم (فحص صحة) قبل التدريب للتأكد من أن خطوات التحقق تعمل بشكل صحيح. - eval_do_concat_batches (
bool، اختياري، القيمة الافتراضيةTrue) — ما إذا كان يجب دمج المدخلات/الخسائر/التسميات/التنبؤات بشكل تكراري عبر الدفعات. إذا كانت القيمةFalse، فسيتم تخزينها بدلاً من ذلك كقوائم، مع إبقاء كل دفعة منفصلة. - eval_use_gather_object (
bool، اختياري، القيمة الافتراضيةFalse) — ما إذا كان يجب تشغيل تجميع الكائنات بشكل تكراري من جميع الأجهزة ضمن قائمة/مجموعة/قاموس متداخل من الكائنات. يجب تفعيل هذا الخيار فقط إذا لم يكن المستخدمون يعيدون مجرد متجهات (tensors)، كما أن PyTorch يوصي صراحةً بعدم تفعيله. يكون هذا الخيار مفيداً عندما تكون بنية التسميات غير قياسية، كما هو الحال في مهام الرؤية الحاسوبية. - eval_accumulation_steps (
int، اختياري) — عدد خطوات التنبؤ التي يتم فيها تجميع تensors المخرجات، قبل نقل النتائج إلى وحدة المعالجة المركزية (CPU). إذا لم يتم ضبطه، فسيتم تجميع التنبؤات بالكامل على مُسرِّع الجهاز قبل نقلها إلى وحدة المعالجة المركزية (CPU) (أسرع لكن يتطلب ذاكرة أكبر).
حساب المقاييس
- include_for_metrics (
list[str], اختياري, الافتراضي هو[]) — تضمين بيانات إضافية في دالةcompute_metricsإذا كانت مطلوبة لحساب المقاييس. الخيارات الممكنة للإضافة إلى قائمةinclude_for_metrics:"inputs": بيانات الإدخال المُمرَّرة إلى النموذج، والمُعدّة لحساب المقاييس المعتمدة على الإدخال."loss": قيم الخسارة المحسوبة أثناء التقييم، والمخصصة لحساب المقاييس المعتمدة على الخسارة.
- batch_eval_metrics (
bool، اختياري، القيمة الافتراضيةFalse) — إذا تم ضبطه علىTrue، فستقوم عملية التقييم باستدعاء compute_metrics في نهاية كل دفعة لتراكم الإحصاءات بدلاً من حفظ جميع قيم التقييم (logits) في الذاكرة. عند ضبطه علىTrue، يجب عليك تمرير دالة compute_metrics تقبل حجة منطقيةcompute_result، والتي عند تمريرTrueإليها، ستُطلق الإحصاءات الإجمالية النهائية من الإحصاءات الإجمالية على مستوى الدفعة التي تراكمها على مجموعة التقييم.
التحقق من النقاط الحرجة والحفظ
- save_only_model (
bool، اختياري، القيمة الافتراضيةFalse) — احفظ أوزان النموذج فقط، دون حالة المُحسِّن/المُجدوِل/حالة المولّد العشوائي. يقلّل هذا بشكل كبير من حجم نقطة التفتيش، لكنه يمنع استئناف التدريب من نقطة التفتيش. استخدمه عندما تحتاج إلى النموذج المدرَّب للاستدلال فقط، وليس للتدريب المستمر. لا يمكنك تحميل النموذج باستخدامfrom_pretrainedإلا إذا كانت هذه الخانة مضبوطة علىTrue. - save_strategy (
strأوSaveStrategy, اختياري, الافتراضي هو"steps") — استراتيجية حفظ نقاط التفتيش المعتمدة أثناء التدريب. القيم الممكنة هي:"no": لا يتم حفظ أي شيء أثناء التدريب."epoch": يتم الحفظ في نهاية كل حقبة."steps": يتم الحفظ كلsave_steps."best": يتم الحفظ كلما تم تحقيقbest_metricجديد.
- save_steps (
intأوfloat، اختياري، القيمة الافتراضية 500) — عدد خطوات التحديث قبل حفظ نقطتي تفتيش إذا كانsave_strategy="steps". يجب أن يكون عددًا صحيحًا أو عددًا عشريًا ضمن المدى[0,1). إذا كان أقل من 1، فسيُفسَّر كنسبة من إجمالي خطوات التدريب. - save_on_each_node (
bool، اختياري، القيمة الافتراضيةFalse) — عند تنفيذ التدريب الموزّع متعدد العقد، يحدد ما إذا كان سيتم حفظ النماذج والنقاط المرجعية على كل عقدة، أم على العقدة الرئيسية فقط. يجب عدم تفعيل هذا الخيار عندما تستخدم العقد المختلفة نفس التخزين، لأن الملفات ستُحفظ بأسماء متطابقة على كل عقدة. - save_total_limit (
int, اختياري) — الحد الأقصى لعدد نقاط التفتيش التي يجب الاحتفاظ بها. يحذف نقاط التفتيش الأقدم فيoutput_dir. عندload_best_model_at_end=True، يتم دائمًا الاحتفاظ بأفضل نقطة تفتيش بالإضافة إلى أحدث النقاط. على سبيل المثال،save_total_limit=5يحتفظ بأحدث 4 نقاط بالإضافة إلى الأفضل - enable_jit_checkpoint (
bool, اختياري، القيمة الافتراضيةFalse) — تفعيل نقطة التفتيش الفورية عند الإرسال (Just-In-Time checkpointing) عند استلام إشارة SIGTERM لإنهاء العمل بسلاسة على الأحمال القابلة للاستحواذ (preemptible workloads). مهم: اضبط فترة الإيقاف السلس في منسّقك (orchestrator) للسماح بزمن كافٍ. في Kubernetes، اضبطterminationGracePeriodSeconds(القيمة الافتراضية 30 ثانية عادةً غير كافية). في Slurm، استخدم--signal=TERM@<seconds>. الفترة السليمة المطلوبة ≥ أطول وقت لتكرار واحد + وقت حفظ نقطة التفتيش.
التكامل مع Hugging Face Hub
- push_to_hub (
bool، اختياري، القيمة الافتراضيةFalse) — ما إذا كان سيتم دفع النموذج إلى Hub في كل مرة يُحفظ فيها النموذج. إذا تم تفعيل هذا الخيار، فسيبدأoutput_dirفي إنشاء دليل git متزامن مع المستودع (المحدد بواسطةhub_model_id) وسيتم دفع المحتوى في كل مرة يتم فيها تشغيل الحفظ (بناءً علىsave_strategyالخاص بك). كما أن استدعاء save_model() سيؤدي أيضاً إلى تشغيل عملية الدفع. - hub_token (
str، اختياري) — المفتاح المستخدم لدفع النموذج إلى Hub. سيُستخدم افتراضيًا المفتاح الموجود في مجلد الكاش الذي تم الحصول عليه عبرhf auth login. - hub_private_repo (
bool، اختياري) — ما إذا كان سيتم جعل المستودع خاصًا. إذا كانت القيمةNone(الافتراضية)، فسيكون المستودع عامًا ما لم يكن الافتراضي للمنظمة هو الخاص. يتم تجاهل هذه القيمة إذا كان المستودع موجودًا مسبقًا. عند الإبلاغ إلى Trackio مع تمكين النشر إلى Hugging Face Spaces، تحدد نفس المنطق ما إذا كان المساحة (Space) خاصًا. - hub_model_id (
str، اختياري) — اسم المستودع الذي يجب إبقاؤه متزامنًا مع output_dir المحلي. يمكن أن يكون معرّف نموذج بسيط، وفي هذه الحالة سيتم دفع النموذج إلى نطاقك. وإلا، يجب أن يكون اسم المستودع الكامل، على سبيل المثال"user_name/model"، مما يتيح لك الدفع إلى منظمة أنت عضو فيها باستخدام"organization_name/model". سيكون الافتراضيuser_name/output_dir_nameحيث يكون output_dir_name هو اسمoutput_dir. - hub_strategy (
strأوHubStrategy, اختياري, الافتراضي هو"every_save") — يحدد ما الذي يجب دفعه إلى Hub ومتى. الخيارات:"end": الدفع فقط في نهاية التدريب"every_save": الدفع عند كل حفظ (غير متزامن حتى لا يعيق التدريب)"checkpoint": يشبه"every_save"مع إضافة دفع أحدث نقطة تفتيش إلى مجلد الفرع"last-checkpoint"لسهولة الاستئناف"all_checkpoints": دفع جميع نقاط التفتيش كما تظهر
- hub_always_push (
bool، اختياري، القيمة الافتراضيةFalse) — ما لم تكن هذه القيمةTrue، سيتخطىTrainerدفع نقطة التفتيش إذا لم يكتمل الدفع السابق. - hub_revision (
str, اختياري) — الإصدار (revision) الذي سيتم استخدامه عند الدفع إلى Hub. يمكن أن يكون اسم فرع، أو وسم، أو تجزئة (hash) لالتزام.
أفضل تتبع للنماذج
- load_best_model_at_end (
bool، اختياري، القيمة الافتراضيةFalse) — تحميل أفضل نقطة تحقق في نهاية التدريب. يتطلب ضبطeval_strategy. عند التفعيل، يتم دائمًا حفظ أفضل نقطة تحقق (انظرsave_total_limit).عندما تكون القيمة `True`، يجب أن يتطابق `save_strategy` مع `eval_strategy` (ما لم تكن قيمة `save_strategy` هي `"best"`)، وإذا كان استخدام `"steps"`، فإن `save_steps` يجب أن يكون مضاعفًا لـ `eval_steps`. - metric_for_best_model (
str, اختياري) — المقياس المستخدم لمقارنة النماذج عندload_best_model_at_end=True. يجب أن يكون اسم مقياس يعيده التقييم، مع أو بدون البادئة"eval_". القيمة الافتراضية هي"loss". إذا قمت بتعيين هذا، فستكون القيمة الافتراضية لـgreater_is_betterهيTrueما لم ينتهِ الاسم بـ"loss". أمثلة:"accuracy"،"f1"،"eval_bleu". - greater_is_better (
bool, اختياري) — ما إذا كانت القيم الأعلى للمقياس أفضل. القيمة الافتراضية مبنية علىmetric_for_best_model:Trueإذا لم ينتهِ اسم المقياس بـ"loss"، وإلاFalse.
استئناف التدريب
- ignore_data_skip (
bool، اختياري، القيمة الافتراضيةFalse) — عند استئناف التدريب، يتخطى هذا الخيار التقدّم السريع عبر مجموعة البيانات للوصول إلى الحالة السابقة. إذا كانت القيمةTrue، يبدأ التدريب من بداية مجموعة البيانات (استئناف أسرع لكن النتائج لن تتطابق مع التدريب المقطوع). إذا كانت القيمةFalse، يتخطى البيانات التي تم رؤيتها (استئناف أبطأ لكن استكمال دقيق). - restore_callback_states_from_checkpoint (
bool، اختياري، القيمة الافتراضيةFalse) — استعادة حالات الاستدعاءات (callbacks) من نقطة التفتيش عند الاستئناف. إذا كانت القيمةTrue، فسيتم تجاوز الاستدعاءات (callbacks) الممرّرة إلى Trainer إذا كانت موجودة في نقطة التفتيش.
قابلية التكرار
- full_determinism (
bool، اختياري، القيمة الافتراضيةFalse) — إذا كانتTrue، يتم استدعاء enable_full_determinism() بدلاً من set_seed() لضمان الحصول على نتائج قابلة للتكرار في التدريب الموزّع. ملاحظة مهمة: سيؤثر هذا سلباً على الأداء، لذا استخدمه فقط لأغراض تصحيح الأخطاء. - seed (
int، اختياري، القيمة الافتراضية 42) — بذرة عشوائية سيتم ضبطها في بداية التدريب. لضمان قابلية إعادة الإنتاج عبر التشغيلات، استخدم دالة~Trainer.model_initلإنشاء النموذج إذا كانت بعض معاميره مهيأة عشوائيًا. - data_seed (
int, اختياري) — البذرة العشوائية المستخدمة مع عينات البيانات. إذا لم يتم ضبطها، فستستخدم مولدات الأرقام العشوائية لعينات البيانات نفس البذرة الخاصة بـseed. يمكن استخدام هذا لضمان قابلية إعادة إنتاج عينات البيانات، بشكل مستقل عن بذرة النموذج.
إعدادات العتاد
- use_cpu (
bool، اختياري، القيمة الافتراضيةFalse) — ما إذا كان سيتم استخدام وحدة المعالجة المركزية (CPU) أم لا. إذا تم ضبطها على False، فسيتم استخدام جهاز/واجهة الخلفية المتاحة من torch.
إعدادات Accelerate
- accelerator_config (
str,dict, أوAcceleratorConfig, اختياري) — إعدادات تكامل Accelerate الداخلي. يمكن أن تكون: مسار إلى ملف إعدادات بصيغة JSON: "accelerator_config.json" قاموس يحتوي على خيارات الإعدادات كائن من نوع AcceleratorConfig الخيارات الرئيسية: split_batches (bool، القيمة الافتراضية False): ما إذا كان سيتم تقسيم الدفعات عبر الأجهزة. إذا كانت True، فإن حجم الدفعة الفعلي يكون متساوياً على جميع الأجهزة (يجب أن يكون المجموع قابلاً للقسمة على num_processes). إذا كانت False، يحصل كل جهاز على حجم الدفعة المحدد. dispatch_batches (bool): إذا كانت True، يقوم العملية الرئيسية فقط بتكرار dataloader وإرسال الدفعات إلى الأجهزة. القيمة الافتراضية True لـ IterableDataset، وFalse في الحالات الأخرى. even_batches (bool، القيمة الافتراضية True): تكرار العينات من بداية مجموعة البيانات لضمان حصول جميع العمال على أحجام دفعات متساوية. use_seedable_sampler (bool، القيمة الافتراضية True): استخدام عينة عشوائية قابلة للتبذير بالكامل من أجل قابلية التكرار. use_configured_state (bool، القيمة الافتراضية False): استخدام AcceleratorState/PartialState مُهيّأ مسبقاً بدلاً من إنشاء واحد جديد. قد يسبب مشاكل في ضبط المعلمات الفائقة.- مسار ملف الإعدادات بصيغة JSON:
"accelerator_config.json" - قاموس بخيارات الإعداد
- مثال من
AcceleratorConfigالخيارات الرئيسية: split_batches(bool، القيمة الافتراضيةFalse): ما إذا كان سيتم تقسيم الدفعات عبر الأجهزة. إذا كانتTrue، فإن حجم الدفعة الفعلي يكون متساوياً على جميع الأجهزة (يجب أن يكون المجموع قابلاً للقسمة على num_processes). إذا كانتFalse، يحصل كل جهاز على حجم الدفعة المحدد.dispatch_batches(bool): إذا كانت القيمةTrue، فإن العملية الرئيسية فقط تتصفح dataloader وتوزّع الدفعات على الأجهزة. القيمة الافتراضية هيTrueفي حالةIterableDataset، وFalseفي الحالات الأخرى.even_batches(bool، القيمة الافتراضيةTrue): يُكرّر العينات من بداية مجموعة البيانات لضمان حصول جميع العمال على أحجام دفعات متساوية.use_seedable_sampler(bool، القيمة الافتراضيةTrue): استخدام مُعيّن عشوائي قابل للتبذير بالكامل من أجل قابلية التكرار.use_configured_state(bool، القيمة الافتراضيةFalse): استخدام حالةAcceleratorState/PartialStateمُهيّأة مسبقًا بدلاً من إنشاء حالة جديدة. قد يسبب ذلك مشاكل في ضبط المعلمات الفائقة.
- مسار ملف الإعدادات بصيغة JSON:
- parallelism_config (
ParallelismConfig، اختياري) — إعدادات التوازي لجلسة التدريب. يتطلب Accelerate1.10.1
Dataloader
- dataloader_drop_last (
bool، اختياري، القيمة الافتراضيةFalse) — هل يتم إسقاط الدفعة الأخيرة غير المكتملة (إذا لم يكن طول مجموعة البيانات قابلاً للقسمة على حجم الدفعة) أم لا. - dataloader_num_workers (
int, اختياري، القيمة الافتراضية 0) — عدد العمليات الفرعية المستخدمة لتحميل البيانات (PyTorch فقط). القيمة 0 تعني أن البيانات ستُحمَّل في العملية الرئيسية. - dataloader_pin_memory (
bool، اختياري، القيمة الافتراضيةTrue) — هل تريد تثبيت الذاكرة في محمّلات البيانات أم لا. ستكون القيمة الافتراضيةTrue. - dataloader_persistent_workers (
bool، اختياري، القيمة الافتراضيةFalse) — إذا كانت القيمة True، فلن يُغلق مُحمِّل البيانات عمليات العمال بعد استهلاك مجموعة البيانات مرة واحدة. هذا يسمح بإبقاء كائنات Dataset الخاصة بالعمال نشطة. قد يسرّع التدريب بشكل محتمل، لكنه سيزيد من استهلاك ذاكرة RAM. ستكون القيمة الافتراضيةFalse. - dataloader_prefetch_factor (
int, اختياري) — عدد الدفعات التي يتم تحميلها مسبقًا بواسطة كل عامل. قيمة 2 تعني أن إجمالي عدد الدفعات المحمّلة مسبقًا عبر جميع العمال سيكون 2 * num_workers. - dataloader_multiprocessing_context (
str، اختياري) — طريقة بدء التشغيل متعددة العمليات المستخدمة لعمال تحميل البيانات ("fork"أو"spawn"أو"forkserver"). الافتراضي هو طريقة بدء التشغيل الافتراضية في PyTorch، باستثناء حالة MPS عندما يكونdataloader_num_workers > 1، حيث تكون القيمة الافتراضية"fork". استخدم"spawn"عند البث من مصادر لا تكون كائناتها آمنة للاستنساخ (مثل HDFS عبرpyarrow). عند استخدام"spawn"، يجب أن تكون أي دالةcollate_fnمخصصة أو كود مجموعة بيانات قابلًا للاستيراد على مستوى الوحدة (بدون دوال lambda أو closures). - dataloader_in_order (
bool، اختياري، القيمة الافتراضيةTrue) — إذا كانتTrue، فإن مُحمِّل البيانات يُخرج الدفعات بالترتيب الذي تم فيه إرسال العمال. اضبطها علىFalseلإخراج الدفعات فور جاهزيتها، مما قد يقلل من زمن التأخير النهائي لأحمال العمل التدفّقية الخاصة بـIterableDataset. يتطلب PyTorch >= 2.6. - remove_unused_columns (
bool، اختياري، القيمة الافتراضيةTrue) — ما إذا كان سيتم حذف الأعمدة التي لا يستخدمها دالة الأمامية للنموذج تلقائيًا أم لا. - label_names (
list[str]، اختياري) — قائمة المفاتيح في قاموس المدخلات الخاص بك التي تتوافق مع التسميات. سيتم افتراضياً اعتماد قائمة أسماء المعاملات التي يقبلها النموذج والتي تحتوي على كلمة “label”، ما لم يكن النموذج المستخدم من نوعXxxForQuestionAnswering، وفي هذه الحالة ستشمل القائمة أيضاً مفاتيح["start_positions", "end_positions"]. يجب عليك تحديدlabel_namesفقط إذا كنت تستخدم أسماء تسميات مخصصة، أو إذا كانforwardالخاص بنموذجك يستهلك عدة تينسورات للتسميات (على سبيل المثال، في الإجابة الاستخراجية على الأسئلة). - train_sampling_strategy (
str, اختياري, الافتراضي هو"random") — المُعيّن (Sampler) المستخدم لـ DataLoader الخاص بالتدريب. القيم الممكنة هي:"random": يستخدمRandomSampler(الافتراضي)."sequential": يستخدمSequentialSampler."group_by_length": يستخدمLengthGroupedSamplerلتجميع العينات ذات الطول المتقارب معًا (لتقليل الحشو وزيادة الكفاءة)."batch_rebalance": يستخدمBatchRebalanceSamplerلموازنة تكلفة الرموز المُكمّلة عبر الأجهزة وخطوات تراكم التدرّجات داخل كل دفعة فعّالة، مما يقلّل من هدر التكميم والذروة في الذاكرة مقارنةً بـ"group_by_length". حاليًا، يُدعم هذا الخيار فقط للتدريب بالتوازي على مستوى البيانات (فإن التوازي على مستوى المكوّنات غير مدعوم بعد).
ملاحظة: عند استخدام
IterableDataset، يتم تجاهل هذا الحُجّة. - length_column_name (
str, اختياري، القيمة الافتراضية"length") — اسم العمود الخاص بالطول المحسوب مسبقاً. إذا كان العمود موجوداً، فسيستخدم التجميع حسب الطول هذه القيم بدلاً من حسابها عند بدء التدريب. يتم تجاهله ما لم يكنtrain_sampling_strategyهو"group_by_length"أو"batch_rebalance"وكان مجموعة البيانات مثلاً منDataset.
DDP (DistributedDataParallel)
- ddp_find_unused_parameters (
bool، اختياري) — عند استخدام التدريب الموزّع، قيمة العلمfind_unused_parametersالمُمرّرة إلىDistributedDataParallel. ستكون القيمة الافتراضيةFalseإذا تم استخدام نقطة التفتيش للتدرّجات، وإلا فستكونTrue. - ddp_bucket_cap_mb (
int، اختياري) — عند استخدام التدريب الموزّع، قيمة العلمbucket_cap_mbالمُمرَّر إلىDistributedDataParallel. - ddp_broadcast_buffers (
bool، اختياري) — عند استخدام التدريب الموزّع، قيمة العلمbroadcast_buffersالمُمرّرة إلىDistributedDataParallel. ستكون القيمة الافتراضيةFalseإذا تم استخدام نقطة التفتيش للتدرّجات، وإلا فستكونTrue. - ddp_static_graph (
bool، اختياري) — عند استخدام التدريب الموزّع، قيمة العلمstatic_graphالمُمرَّر إلىDistributedDataParallel. - ddp_backend (
str, اختياري) — الواجهة الخلفية المستخدمة للتدريب الموزّع. يجب أن تكون واحدة من"nccl"،"mpi"،"xccl"،"gloo"،"hccl". - ddp_timeout (
int، اختياري، القيمة الافتراضية 1800) — مهلة الاستجابة لاستدعاءاتtorch.distributed.init_process_group، وتُستخدم لتجنّب انتهاء مهلة اتصال وحدات معالجة الرسوميات (GPU) عند تنفيذ عمليات بطيئة في التشغيل الموزّع. يُرجى الرجوع إلى توثيق PyTorch لمزيد من المعلومات.
FSDP (التوازي الكامل للبيانات المجزأة)
- fsdp (
bool، اختياري، القيمة الافتراضيةNone) — تفعيل PyTorch Fully Sharded Data Parallel (FSDP) للتدريب الموزّع. مرّرTrueلتفعيل FSDP. - fsdp_config (
strordict, optional) — Configuration settings for whenfsdpis enabled. Pass a path to a JSON config file, such asfsdp_config.json, or an already-loaded dict.المفاتيح المدعومة:
- الإصدار (
int، اختياري، الافتراضي2): إصدار FSDP الذي سيتم استخدامه (2لـ FSDP2، و1لـ FSDP1 القديم). - reshard_after_forward (
bool, اختياري، القيمة الافتراضيةTrue): ما إذا كان يجب إعادة تجزئة المعاملات بعد عملية الانتقال الأمامي. اضبطها علىFalseللحفاظ على تجميع المعاملات بين عمليتي الانتقال الأمامي والعكسي، مما يتجنب إعادة التجميع الشامل (re-all-gather)، ويستخدم ذاكرة ذروة أعلى. - cpu_offload (
bool، اختياري، القيمة الافتراضيةFalse): تحويل المعاملات والتدرجات إلى وحدة المعالجة المركزية (CPU) عند عدم استخدامها لتوفير ذاكرة وحدة معالجة الرسوميات (GPU). - activation_checkpointing (
bool, اختياري، القيمة الافتراضيةFalse): اضبطه علىTrueلتقليل الذاكرة عن طريق إعادة حساب التفعيلات أثناء عملية الرجوع الخلفي. عند استخدام FSDP، يُفضَّل استخدام هذا بدلاً من معامل التدريبactivation_checkpointing، الذي يُدخل عملية all-gather زائدة عن الحاجة في عملية الرجوع الخلفي. - cpu_ram_efficient_loading (
bool, اختياري، القيمة الافتراضيةFalse): اضبطه علىTrueلتحميل نقطة الفحص المُدرَّبة مسبقًا على العملية الأولى فقط. تبدأ العمليات الأخرى بأوزان فارغة وتستقبل الأوزان عبر البث. - state_dict_type (
str، اختياري، القيمة الافتراضية"FULL_STATE_DICT"): تنسيق نقطة التفتيش:"FULL_STATE_DICT"(ملف واحد متوافق مع HF) أو"SHARDED_STATE_DICT"(ملف واحد لكل rank، أسرع للنماذج الكبيرة). - auto_wrap_policy (
str, اختياري، الافتراضي"TRANSFORMER_BASED_WRAP"): سياسة التغليف التلقائي المستخدمة. اختر"TRANSFORMER_BASED_WRAP"أو"SIZE_BASED_WRAP"أو"NO_WRAP". - transformer_layer_cls_to_wrap (
list[str]، اختياري): أسماء فئات طبقات Transformer (حساسة لحالة الأحرف) التي يجب تغليفها، مثلLlamaDecoderLayer. عادةً ما يكون هذا غير ضروري: إذ يعتمد سياسة التغليف على_no_split_modulesالخاص بالنموذج، والذي يغطي معظم نماذج transformers. - min_num_params (
int, اختياري، القيمة الافتراضية0): الحد الأدنى لعدد المعاملات في كل وحدة للتغليف التلقائي القائم على الحجم (يُستخدم معauto_wrap_policy="SIZE_BASED_WRAP"). - xla (
bool، اختياري، القيمة الافتراضيةFalse): ما إذا كان سيتم استخدام تدريب PyTorch/XLA بالتوازي الكامل لبيانات FSDP. تجريبي. - xla_fsdp_settings (
dict, اختياري): قاموس بمعاملات تغليف XLA FSDP. للحصول على قائمة كاملة بالخيارات، راجع مصدر XLA FSDP. - xla_fsdp_grad_ckpt (
bool، اختياري، القيمة الافتراضيةFalse): اضبطه علىTrueلاستخدام نقطة التفتيش التدرّجية على كل طبقة مغلّفة بـ XLA FSDP متداخلة. يتطلبxla=Trueوسياسة تغليف تلقائية (min_num_paramsأوtransformer_layer_cls_to_wrap).
- الإصدار (
DeepSpeed
- deepspeed (
strأوdict, اختياري) — تفعيل DeepSpeed التكامل. القيمة إما:- مسار ملف إعدادات DeepSpeed بصيغة JSON:
"ds_config.json" - تم تحميل الإعدادات كقاموس
إذا كنت تستخدم تهيئة ZeRO، فقم بإنشاء نموذجك بعد تهيئة
TrainingArguments، وإلا فلن يتم تطبيق ZeRO.
- مسار ملف إعدادات DeepSpeed بصيغة JSON:
التصحيح والتحليل (تجريبي)
- debug (
strأو قائمة منDebugOption, اختياري, الافتراضي هو"") — تفعيل ميزة أو أكثر من ميزات التصحيح. هذه ميزة تجريبية. الخيارات الممكنة هي:- “underflow_overflow”: يكشف عن تجاوز الحدود في مدخلات/مخرجات النموذج ويبلّغ عن آخر الإطارات التي أدت إلى
- “tpu_metrics_debug”: طباعة مقاييس التصحيح على TPU
- skip_memory_metrics (
bool، اختياري، القيمة الافتراضيةTrue) — ما إذا كان سيتم تخطي إضافة تقارير ملفّس الذاكرة إلى المقاييس. يتم تخطي هذا الإعداد افتراضيًا لأنه يُبطئ سرعة التدريب والتقييم.
أعلام السكربت الخارجي (غير مستخدمة بواسطة Trainer)
- do_train (
bool، اختياري، القيمة الافتراضيةFalse) — ما إذا كان سيتم تشغيل التدريب أم لا. لا يستخدم هذا الحُجُج مباشرةً بواسطة Trainer، بل يُقصد استخدامه من قِبل سكربتات التدريب/التقييم الخاصة بك. - do_eval (
bool, اختياري) — ما إذا كان سيتم تشغيل التقييم على مجموعة التحقق أم لا. سيُضبط علىTrueإذا كانeval_strategyمختلفًا عن"no". لا يستخدم هذا الحجة مباشرةً بواسطة Trainer، بل يُقصد استخدامه في سكربتات التدريب/التقييم الخاصة بك. - do_predict (
bool، اختياري، القيمة الافتراضيةFalse) — ما إذا كان سيتم تشغيل التنبؤات على مجموعة الاختبار أم لا. لا يستخدم هذا الحجة مباشرةً بواسطة Trainer، بل يُقصد استخدامه من قِبل سكربتات التدريب/التقييم الخاصة بك. - resume_from_checkpoint (
str, اختياري) — مسار مجلد يحتوي على نقطة تفتيش صالحة لنموذجك. لا يستخدم هذا الحُجُج مباشرةً بواسطة Trainer، بل يُقصد استخدامه من قِبل سكربتات التدريب/التقييم الخاصة بك.
فئة التهيئة للتحكم في جميع جوانب تدريب النموذج باستخدام Trainer. تُوحّد TrainingArguments جميع المعاملات الفائقة وإعدادات التحسين وتفضيلات التسجيل وخيارات البنية التحتية اللازمة للتدريب.
يمكن لـ HfArgumentParser تحويل هذه الفئة إلى حُجج argparse يمكن تحديدها على سطر الأوامر.
يعيد مستوى التسجيل (log level) المستخدم اعتمادًا على ما إذا كانت هذه العملية هي العملية الرئيسية للعقدة 0، أو العملية الرئيسية لعقدة غير صفرية، أو عملية غير رئيسية.
تكون قيمة مستوى التسجيل للعملية الرئيسية افتراضياً هي مستوى التسجيل المُعيَّن (logging.WARNING إذا لم تقم بأي شيء) ما لم يتم تجاوزها بواسطة معامل log_level.
تكون قيمة مستوى التسجيل الافتراضية لعمليات النسخ logging.WARNING ما لم يتم تجاوزها بواسطة الحجة log_level_replica.
يتم اتخاذ القرار بين إعدادات العملية الرئيسية وإعدادات عملية النسخ بناءً على القيمة المُعادة من should_log.
الحصول على عدد الخطوات المستخدمة للتسخين الخطي.
main_process_first
< source >( local = Truedesc = 'work' )
المعاملات
- local (
bool، اختياري، القيمة الافتراضيةTrue) — إذا كانتTrueفإن "أول" تعني عملية الرتبة 0 لكل عقدة، وإذا كانتFalseفإن "أول" تعني عملية الرتبة 0 للعقدة الرتبة 0. في بيئة متعددة العقد مع نظام ملفات مشترك، من المرجح أن ترغب في استخدامlocal=Falseبحيث تقوم عملية العقدة الأولى الرئيسية فقط بالمعالجة. أما إذا لم يكن نظام الملفات مشتركاً، فستحتاج عملية كل عقدة رئيسية إلى القيام بالمعالجة، وهو السلوك الافتراضي. - desc (
str، اختياري، القيمة الافتراضية"work") — وصف للعمل يُستخدم في سجلات التصحيح
مدير سياق لبيئة torch distributed حيث يحتاج المرء إلى تنفيذ شيء ما على العملية الرئيسية، مع حجب النسخ المكررة، وعند الانتهاء من ذلك يُطلق سراح النسخ المكررة.
من بين هذه الاستخدامات، ميزة map في datasets، والتي يجب تشغيلها مرة واحدة على العملية الرئيسية لتكون فعّالة، حيث تُحفظ نسخة مخبأة من النتائج عند اكتمالها، ثم تُحمَّل تلقائيًا بواسطة النسخ.
set_dataloader
< source >( train_batch_size: int = 8eval_batch_size: int = 8drop_last: bool = Falsenum_workers: int = 0pin_memory: bool = Truepersistent_workers: bool = Falseprefetch_factor: int | None = Nonemultiprocessing_context: str | None = Nonein_order: bool = Trueauto_find_batch_size: bool = Falseignore_data_skip: bool = Falsesampler_seed: int | None = None )
المعاملات
- drop_last (
bool، اختياري، القيمة الافتراضيةFalse) — ما إذا كان يجب حذف الدفعة الأخيرة غير المكتملة (إذا لم يكن طول مجموعة البيانات قابلاً للقسمة على حجم الدفعة) أم لا. - num_workers (
int، اختياري، القيمة الافتراضية 0) — عدد العمليات الفرعية المستخدمة لتحميل البيانات (PyTorch فقط). القيمة 0 تعني أن البيانات ستُحمَّل في العملية الرئيسية. - pin_memory (
bool، اختياري، القيمة الافتراضيةTrue) — ما إذا كنت تريد تثبيت الذاكرة في محمّلات البيانات أم لا. ستكون القيمة الافتراضيةTrue. - persistent_workers (
bool, اختياري، القيمة الافتراضيةFalse) — إذا كانت القيمة True، فلن يُغلق مُحمِّل البيانات عمليات العمال بعد استهلاك مجموعة البيانات مرة واحدة. وهذا يسمح بإبقاء كائنات Dataset الخاصة بالعمال نشطة. قد يسرّع التدريب بشكل محتمل، لكنه سيزيد من استهلاك ذاكرة RAM. ستكون القيمة الافتراضيةFalse. - prefetch_factor (
int، اختياري) — عدد الدفعات التي يتم تحميلها مسبقًا بواسطة كل عامل. قيمة 2 تعني أن إجمالي عدد الدفعات المحمّلة مسبقًا عبر جميع العمال سيكون 2 * num_workers. - multiprocessing_context (
str, اختياري) — طريقة بدء تعدد العمليات المستخدمة لعمال تحميل البيانات ("fork"أو"spawn"أو"forkserver"). الافتراضي هو طريقة البدء الافتراضية في PyTorch. استخدم"spawn"عند البث من مصادر لا تكون كائناتها آمنة للاستنساخ (مثل HDFS عبرpyarrow). عند استخدام"spawn"، يجب أن يكون أيcollate_fnمخصص أو كود مجموعة بيانات قابلاً للاستيراد على مستوى الوحدة (بدون دوال lambda أو closures). - in_order (
bool، اختياري، القيمة الافتراضيةTrue) — إذا كانتTrue، فإن مُحمِّل البيانات يُخرج الدفعات بالترتيب الذي تم فيه إرسال العمال. اضبطها علىFalseلإخراج الدفعات فور جاهزيتها، مما قد يقلل من زمن التأخير النهائي لأحمال العمل التدفّقية الخاصة بـIterableDataset. يتطلب PyTorch >= 2.6. - auto_find_batch_size (
bool، اختياري، القيمة الافتراضيةFalse) — هل يتم تحديد حجم الدفعة الذي يتناسب مع الذاكرة تلقائيًا من خلال التلاشي الأسي، لتجنب أخطاء نفاد ذاكرة CUDA. يتطلب تثبيت accelerate (pip install accelerate) - ignore_data_skip (
bool، اختياري، القيمة الافتراضيةFalse) — عند استئناف التدريب، ما إذا كان سيتم تخطي الفترات والدفعات أم لا، لجعل تحميل البيانات في نفس المرحلة كما كانت في التدريب السابق. إذا تم ضبطه علىTrue، فسيبدأ التدريب بشكل أسرع (لأن خطوة التخطي هذه قد تستغرق وقتاً طويلاً) لكن لن تعطي نفس النتائج التي كان من المفترض أن ينتجها التدريب المقطوع. - sampler_seed (
int, اختياري) — البذرة العشوائية المستخدمة مع عينات البيانات. إذا لم يتم ضبطها، فستستخدم مولدات الأرقام العشوائية لعينة البيانات نفس البذرة الخاصة بـself.seed. يمكن استخدام هذا لضمان قابلية إعادة إنتاج عينة البيانات، بشكل مستقل عن بذرة النموذج.
طريقة تجمع جميع الحُجج المرتبطة بإنشاء محمّلي البيانات.
set_evaluate
< source >( strategy: str | transformers.trainer_utils.IntervalStrategy = 'no'steps: int = 500batch_size: int = 8accumulation_steps: int | None = Nonedelay: float | None = Noneloss_only: bool = False )
المعاملات
- strategy (
strأو IntervalStrategy, اختياري, الافتراضي هو"no") — استراتيجية التقييم المعتمدة أثناء التدريب. القيم الممكنة هي:"no": لا يتم إجراء أي تقييم أثناء التدريب."steps": يتم إجراء التقييم (وسُجّل) كلsteps."epoch": يتم إجراء التقييم في نهاية كل حقبة.
تعيين
strategyمختلف عن"no"سيضبطself.do_evalعلىTrue. - steps (
int، اختياري، القيمة الافتراضية 500) — عدد خطوات التحديث بين تقييمين إذا كانstrategy="steps". - batch_size (
intاختياري، القيمة الافتراضية 8) — حجم الدفعة لكل جهاز (GPU/TPU core/CPU…) المستخدم للتقييم. - accumulation_steps (
int, اختياري) — عدد خطوات التنبؤ التي يتم فيها تجميع الموترات الناتجة قبل نقل النتائج إلى وحدة المعالجة المركزية. إذا لم يتم ضبطه، يتم تجميع التنبؤات بالكامل على وحدة معالجة الرسوميات/وحدة معالجة TPU قبل نقلها إلى وحدة المعالجة المركزية (أسرع لكن يتطلب ذاكرة أكبر). - delay (
float, اختياري) — عدد الفترات أو الخطوات التي يجب الانتظار قبل إجراء أول تقييم، وذلك اعتمادًا على eval_strategy. - loss_only (
bool، اختياري، القيمة الافتراضيةFalse) — يتجاهل جميع المخرجات باستثناء الخسارة.
طريقة تجمع جميع الحُجج المرتبطة بالتقييم.
set_logging
< source >( strategy: str | transformers.trainer_utils.IntervalStrategy = 'steps'steps: int = 500report_to: str | list[str] = 'none'level: str = 'passive'first_step: bool = Falsenan_inf_filter: bool = Falseon_each_node: bool = Falsereplica_level: str = 'passive' )
المعاملات
- strategy (
strأو IntervalStrategy, اختياري, الافتراضي هو"steps") — استراتيجية التسجيل المعتمدة أثناء التدريب. القيم الممكنة هي:"no": لا يتم تسجيل أي سجلات أثناء التدريب."epoch": يتم التسجيل في نهاية كل حقبة."steps": يتم التسجيل كلlogging_steps.
- steps (
int، اختياري، القيمة الافتراضية 500) — عدد خطوات التحديث بين سجلّين إذا كانstrategy="steps". - level (
str، اختياري، القيمة الافتراضية"passive") — مستوى تسجيل السجلات (log level) المستخدم في العملية الرئيسية. الخيارات الممكنة هي مستويات التسجيل كنصوص:"debug"،"info"،"warning"،"error"و"critical"، بالإضافة إلى مستوى"passive"الذي لا يضبط أي شيء ويترك للتطبيق ضبط المستوى. - report_to (
strأوlist[str]، اختياري، القيمة الافتراضية"none") — قائمة التكاملات التي سيتم الإبلاغ عن النتائج والسجلات إليها. المنصات المدعومة هي"azure_ml"،"clearml"،"codecarbon"،"comet_ml"،"dagshub"،"dvclive"،"flyte"،"mlflow"،"swanlab"،"tensorboard"،"trackio"و"wandb". استخدم"all"للإبلاغ إلى جميع التكاملات المثبّتة، و"none"لعدم استخدام أي تكاملات. - first_step (
bool، اختياري، الافتراضيFalse) — ما إذا كان سيتم تسجيل وتقييم الخطوة العالمية الأولىglobal_stepأم لا. - nan_inf_filter (
bool, اختياري, الافتراضي هوTrue) — ما إذا كان سيتم تصفيةnanوinfفي الخسائر الخاصة بالتسجيل. إذا تم ضبطه علىTrueفإن خسارة كل خطوة تكونnanأوinfتُصفّى، ويُعتمد بدلاً منها متوسط الخسارة في نافذة التسجيل الحالية. لا يؤثر nan_inf_filter إلا على تسجيل قيم الخسارة، ولا يغيّر طريقة حساب التدرّج أو تطبيقه على النموذج.nan_inf_filterيؤثر فقط على تسجيل قيم الخسارة، ولا يغيّر طريقة حساب التدرّج أو تطبيقه على النموذج. - on_each_node (
bool، اختياري، القيمة الافتراضيةTrue) — في التدريب الموزّع متعدد العقد، ما إذا كان يجب تسجيل السجلات باستخدامlog_levelمرة واحدة لكل عقدة، أم على العقدة الرئيسية فقط. - replica_level (
str، اختياري، القيمة الافتراضية"passive") — مستوى التسجيل (log level) المستخدم على النسخ. نفس الخيارات المتاحة لـlog_level
طريقة تجمع جميع الحُجج المرتبطة بالتسجيل.
set_lr_scheduler
< source >( name: str | transformers.trainer_utils.SchedulerType = 'linear'num_epochs: float = 3.0max_steps: int = -1warmup_steps: float = 0 )
المعاملات
- name (
strأو SchedulerType، اختياري، القيمة الافتراضية"linear") — نوع المجدول (scheduler) المراد استخدامه. راجع توثيق SchedulerType لمعرفة جميع القيم الممكنة. - num_epochs(
float, اختياري، القيمة الافتراضية 3.0) — إجمالي عدد فترات التدريب (epochs) التي سيتم تنفيذها (إذا لم تكن قيمة صحيحة، فسيتم تنفيذ الجزء العشري كنسبة مئوية من الفترة الأخيرة قبل إيقاف التدريب). - max_steps (
int, اختياري، القيمة الافتراضية -1) — إذا تم تعيينه إلى رقم موجب، فهو يمثل العدد الإجمالي لخطوات التدريب التي يجب تنفيذها. يتجاوزnum_train_epochs. بالنسبة إلى مجموعة بيانات محدودة، يتم تكرار التدريب عبر مجموعة البيانات (إذا استُنفد كل البيانات) حتى يتم الوصول إلىmax_steps. يجب تعيينه إلى قيمة موجبة عندما لا تنفّذ مجموعة بيانات التدريب__len__(مثل مجموعة بيانات التدفق)، لأن العدد الإجمالي للخطوات لا يمكن استنتاجه في هذه الحالة، وهو مطلوب لتحديد حد حلقة التدريب وإعداد جدولة معدل التعلم. - warmup_steps (
float، اختياري، القيمة الافتراضية 0) — عدد الخطوات المستخدمة للتسخين الخطي من 0 إلىlearning_rate. يجب أن يكون عددًا صحيحًا أو عددًا عشريًا ضمن المدى[0,1). إذا كان أقل من 1، فسيُفسَّر كنسبة من الخطوات المستخدمة للتسخين الخطي من 0 إلىlearning_rate.
طريقة تجمع جميع الحُجج المرتبطة بجدول جدولة معدل التعلم ومعاملاته الفائقة.
set_optimizer
< source >( name: str | transformers.training_args.OptimizerNames = 'adamw_torch'learning_rate: float = 5e-05weight_decay: float = 0beta1: float = 0.9beta2: float = 0.999epsilon: float = 1e-08args: str | None = None )
المعاملات
- name (
strأوtraining_args.OptimizerNames، اختياري، القيمة الافتراضية"adamw_torch") — المُحسِّن (optimizer) المستخدم:"adamw_torch"،"adamw_torch_fused"،"adamw_anyprecision"أو"adafactor". - learning_rate (
float، اختياري، القيمة الافتراضية 5e-5) — معدل التعلم الأولي. - weight_decay (
float، اختياري، القيمة الافتراضية 0) — مقدار تآكل الوزن المطبَّق (إذا لم يكن صفراً) على جميع الطبقات باستثناء أوزان الانحياز وLayerNorm. - beta1 (
float, اختياري، القيمة الافتراضية 0.9) — معامل الضبط beta1 لمُحسِّن adam أو أي من صيغه. - beta2 (
float، اختياري، القيمة الافتراضية 0.999) — معامل الضبط beta2 لخوارزمية adam أو متغيراتها. - epsilon (
float، اختياري، القيمة الافتراضية 1e-8) — معامل epsilon للمُحسِّن adam أو متغيراته. - args (
str، اختياري) — حجج اختيارية تُمرَّر إلى AnyPrecisionAdamW (لا فائدة منها إلا عندoptim="adamw_anyprecision").
طريقة تجمع جميع الحُجج المرتبطة بمُحسِّن التدريب (optimizer) ومعاملاته الفائقة.
set_push_to_hub
< source >( model_id: strstrategy: str | transformers.trainer_utils.HubStrategy = 'every_save'token: str | None = Noneprivate_repo: bool | None = Nonealways_push: bool = Falserevision: str | None = None )
المعاملات
- model_id (
str) — اسم المستودع الذي يجب إبقاؤه متزامنًا مع output_dir المحلي. يمكن أن يكون معرّف نموذج بسيط، وفي هذه الحالة سيتم دفع النموذج إلى نطاقك. وإلا، فيجب أن يكون اسم المستودع الكامل، على سبيل المثال"user_name/model"، مما يتيح لك الدفع إلى منظمة أنت عضو فيها باستخدام"organization_name/model". - strategy (
strأوHubStrategy, اختياري, الافتراضي هو"every_save") — يحدد نطاق ما يتم دفعه إلى Hub ومتى. القيم الممكنة هي:"end": يقوم بدفع النموذج، وتكوينه، وفئة المعالجة (processing_class) مثل مُجزّئ الرموز (tokenizer) (إذا تم تمريرها إلى Trainer)، ومسودة بطاقة النموذج عند استدعاء طريقة save_model()."every_save": يقوم بدفع النموذج، وتكوينه، وفئة المعالجة (مثل مُجزّئ الرموز، إذا تم تمريرها إلى Trainer)، ومسودة بطاقة النموذج، في كل مرة يتم فيها حفظ النموذج. تكون عمليات الدفع غير متزامنة حتى لا تعيق التدريب، وفي حال كانت عمليات الحفظ متكررة جداً، لا يُحاول الدفع الجديد إلا بعد اكتمال الدفع السابق. يتم تنفيذ دفع أخير بالنموذج النهائي في نهاية التدريب."checkpoint": يشبه"every_save"لكن يتم أيضًا دفع أحدث نقطة تفتيش في مجلد فرعي باسم last-checkpoint، مما يتيح لك استئناف التدريب بسهولة باستخدامtrainer.train(resume_from_checkpoint="last-checkpoint")."all_checkpoints": يشبه"checkpoint"لكن جميع نقاط التفتيش تُدفع كما تظهر في مجلد الإخراج (لذا ستحصل على مجلد نقطة تفتيش واحد لكل مجلد في مستودعك النهائي)
- token (
str، اختياري) — الرمز الذي يُستخدم لدفع النموذج إلى Hub. سيُستخدم افتراضيًا الرمز الموجود في مجلد الكاش الذي تم الحصول عليه عبرhf auth login. - private_repo (
bool، اختياري، القيمة الافتراضيةFalse) — ما إذا كان يجب جعل المستودع خاصاً. إذا كانت القيمةNone(الافتراضية)، فسيكون المستودع عاماً ما لم تكن القيمة الافتراضية للمنظمة هي الخاص. يتم تجاهل هذه القيمة إذا كان المستودع موجوداً مسبقاً. - always_push (
bool، اختياري، القيمة الافتراضيةFalse) — ما لم تكن هذه القيمةTrue، فسيُرجئTrainerدفع نقطة التفتيش إذا لم تكتمل عملية الدفع السابقة. - revision (
str, اختياري) — الإصدار (revision) الذي سيتم استخدامه عند الدفع إلى Hub. يمكن أن يكون اسم فرع، أو وسم (tag)، أو تجزئة (hash) لالتزام (commit).
طريقة تجمع جميع الحُجج المرتبطة بمزامنة نقاط التفتيش مع Hub.
عند استدعاء هذه الطريقة، سيُضبط
self.push_to_hubعلىTrue، مما يعني أنoutput_dirسيبدأ بمجلد git متزامن مع المستودع (المحدد بواسطةmodel_id)، وسيتم دفع المحتوى في كل مرة يتم فيها تشغيل حفظ (بناءً علىself.save_strategy). كما أن استدعاء save_model() سيُشغّل عملية الدفع أيضاً.
set_save
< source >( strategy: str | transformers.trainer_utils.IntervalStrategy = 'steps'steps: int = 500total_limit: int | None = Noneon_each_node: bool = False )
المعاملات
- strategy (
strأو IntervalStrategy, اختياري, الافتراضي هو"steps") — استراتيجية حفظ نقاط التفتيش المعتمدة أثناء التدريب. القيم الممكنة هي:"no": لا يتم حفظ أي شيء أثناء التدريب."epoch": يتم الحفظ في نهاية كل حقبة."steps": يتم الحفظ كلsave_steps.
- steps (
int، اختياري، القيمة الافتراضية 500) — عدد خطوات التحديث قبل حفظ نقطتي تفتيش إذا كانstrategy="steps". - total_limit (
int، اختياري) — إذا تم تمرير قيمة، فسيتم تحديد إجمالي عدد نقاط التفتيش. يحذف نقاط التفتيش الأقدم فيoutput_dir. - on_each_node (
bool, اختياري, الافتراضي هوFalse) — عند تنفيذ التدريب الموزّع متعدد العقد، ما إذا كان يجب حفظ النماذج والنقاط المرجعية على كل عقدة، أم على العقدة الرئيسية فقط. لا ينبغي تفعيل هذا الخيار عندما تستخدم العقد المختلفة نفس التخزين، لأن الملفات ستُحفظ بنفس الأسماء على كل عقدة.يجب عدم تفعيل هذا الخيار عندما تستخدم العقد المختلفة نفس التخزين، لأن الملفات ستُحفظ بأسماء متطابقة لكل عقدة.
طريقة تجمع جميع الحُجج المرتبطة بحفظ نقاط التفتيش.
set_testing
< source >( batch_size: int = 8loss_only: bool = False )
طريقة تجمع جميع الحجج الأساسية المرتبطة باختبار على مجموعة بيانات محجوزة.
ستؤدي استدعاء هذه الطريقة إلى تعيين
self.do_predictتلقائيًا إلىTrue.
set_training
< source >( learning_rate: float = 5e-05batch_size: int = 8weight_decay: float = 0num_epochs: float = 3max_steps: int = -1gradient_accumulation_steps: int = 1seed: int = 42activation_checkpointing: bool = Falsegradient_checkpointing: bool | None = None )
المعاملات
- learning_rate (
float، اختياري، القيمة الافتراضية 5e-5) — معدل التعلم الأولي لمُحسِّن التدريب. - batch_size (
intاختياري، القيمة الافتراضية 8) — حجم الدفعة لكل جهاز (نواة GPU/TPU/CPU…) المستخدم للتدريب. - weight_decay (
float, اختياري، القيمة الافتراضية 0) — مقدار تآكل الأوزان الذي يُطبَّق (إذا لم يكن صفراً) على جميع الطبقات باستثناء أوزان الانحياز وLayerNorm في المُحسِّن. - num_epochs (
float، اختياري، القيمة الافتراضية 3.0) — إجمالي عدد فترات التدريب (epochs) التي سيتم تنفيذها (إذا لم تكن القيمة عددًا صحيحًا، فسيتم تنفيذ الجزء العشري كنسبة مئوية من الفترة الأخيرة قبل إيقاف التدريب). - max_steps (
int, اختياري، القيمة الافتراضية -1) — إذا تم تعيينه إلى رقم موجب، فهو يمثل العدد الإجمالي لخطوات التدريب التي يجب تنفيذها. يتجاوزnum_train_epochs. بالنسبة إلى مجموعة بيانات محدودة، يتم تكرار التدريب عبر مجموعة البيانات (إذا استُنفد كل البيانات) حتى يتم الوصول إلىmax_steps. يجب تعيينه إلى قيمة موجبة عندما لا تنفّذ مجموعة بيانات التدريب__len__(مثل مجموعة بيانات التدفق)، لأن العدد الإجمالي للخطوات لا يمكن استنتاجه في هذه الحالة، وهو مطلوب لتحديد حد حلقة التدريب وإعداد جدولة معدل التعلم. - gradient_accumulation_steps (
int, اختياري, الافتراضي 1) — عدد خطوات التحديث لتجميع التدرجات قبل تنفيذ مسار الرجوع/التحديث.عند استخدام تراكم التدرجات، يُحتسب كل خطوة كخطوة واحدة تتضمن المرور العكسي. لذلك، ستُجرى عمليات التسجيل والتقييم والحفظ كل
gradient_accumulation_steps * xxx_stepمن أمثلة التدريب. - seed (
int، اختياري، القيمة الافتراضية 42) — بذرة عشوائية سيتم ضبطها في بداية التدريب. لضمان قابلية إعادة الإنتاج عبر التشغيلات، استخدم الدالة~Trainer.model_initلإنشاء النموذج إذا كانت بعض معاميره مهيأة عشوائيًا. - activation_checkpointing (
bool، اختياري، القيمة الافتراضيةFalse) — إذا كانت القيمة True، فسيتم استخدام فحص التفعيل (activation checkpointing) لتوفير الذاكرة على حساب إبطاء عملية الرجوع الخلفي (backward pass). - gradient_checkpointing (
bool، اختياري) — اسم مستعار غير مستخدم لـactivation_checkpointing، وسيتم إزالته في الإصدار v6.
طريقة تجمع جميع الحجج الأساسية المرتبطة بالتدريب.
ستؤدي استدعاء هذه الطريقة إلى تعيين
self.do_trainتلقائيًا إلىTrue.
يسلسل هذه النسخة مع استبدال Enum بقيمها (لدعم التسلسل بصيغة JSON). كما يُعمّي على قيم الرموز عن طريق إزالة قيمها.
يسلسل هذه النسخة إلى نص JSON.
التسلسل المُطهَّر للاستخدام مع hparams في TensorBoard
Seq2SeqTrainingArguments
فئة transformers.Seq2SeqTrainingArguments
< source >( output_dir: str | None = Noneper_device_train_batch_size: int = 8num_train_epochs: float = 3.0max_steps: int = -1learning_rate: float = 5e-05lr_scheduler_type: transformers.trainer_utils.SchedulerType | str = 'linear'lr_scheduler_kwargs: dict | str | None = Nonewarmup_steps: float = 0optim: transformers.training_args.OptimizerNames | str = 'adamw_torch_fused'optim_args: str | None = Noneweight_decay: float = 0.0adam_beta1: float = 0.9adam_beta2: float = 0.999adam_epsilon: float = 1e-08optim_target_modules: None | str | list[str] = Nonegradient_accumulation_steps: int = 1average_tokens_across_devices: bool = Truemax_grad_norm: float = 1.0label_smoothing_factor: float = 0.0bf16: bool = Falsefp16: bool = Falsebf16_full_eval: bool = Falsefp16_full_eval: bool = Falsetf32: bool | None = Noneactivation_checkpointing: bool | None = Noneactivation_checkpointing_kwargs: dict[str, typing.Any] | str | None = Nonegradient_checkpointing: bool | None = Nonegradient_checkpointing_kwargs: dict[str, typing.Any] | str | None = Nonetorch_compile: bool = Falsetorch_compile_backend: str | None = Nonetorch_compile_mode: str | None = Noneuse_liger_kernel: bool = Falseliger_kernel_config: dict[str, bool] | None = Noneuse_cache: bool = Falseneftune_noise_alpha: float | None = Nonetorch_empty_cache_steps: int | None = Noneauto_find_batch_size: bool = Falselogging_strategy: transformers.trainer_utils.IntervalStrategy | str = 'steps'logging_steps: float = 500logging_first_step: bool = Falselog_on_each_node: bool = Truelogging_nan_inf_filter: bool = Trueinclude_num_input_tokens_seen: str | bool = 'no'log_level: str = 'passive'log_level_replica: str = 'warning'disable_tqdm: bool | None = Nonereport_to: None | str | list[str] = 'none'run_name: str | None = Noneproject: str = 'huggingface'trackio_space_id: str | None = Nonetrackio_bucket_id: str | None = Nonetrackio_static_space_id: typing.Union[str, NoneType, typing.Literal[False]] = Noneeval_strategy: transformers.trainer_utils.IntervalStrategy | str = 'no'eval_steps: float | None = Noneeval_delay: float = 0per_device_eval_batch_size: int = 8prediction_loss_only: bool = Falseeval_on_start: bool = Falseeval_do_concat_batches: bool = Trueeval_use_gather_object: bool = Falseeval_accumulation_steps: int | None = Noneinclude_for_metrics: list = <factory>batch_eval_metrics: bool = Falsesave_only_model: bool = Falsesave_strategy: transformers.trainer_utils.SaveStrategy | str = 'steps'save_steps: float = 500save_on_each_node: bool = Falsesave_total_limit: int | None = Noneenable_jit_checkpoint: bool = Falsepush_to_hub: bool = Falsehub_token: str | None = Nonehub_private_repo: bool | None = Nonehub_model_id: str | None = Nonehub_strategy: transformers.trainer_utils.HubStrategy | str = 'every_save'hub_always_push: bool = Falsehub_revision: str | None = Noneload_best_model_at_end: bool = Falsemetric_for_best_model: str | None = Nonegreater_is_better: bool | None = Noneignore_data_skip: bool = Falserestore_callback_states_from_checkpoint: bool = Falsefull_determinism: bool = Falseseed: int = 42data_seed: int | None = Noneuse_cpu: bool = Falseaccelerator_config: dict | str | None = Noneparallelism_config: typing.Any | None = Nonedataloader_drop_last: bool = Falsedataloader_num_workers: int = 0dataloader_pin_memory: bool = Truedataloader_persistent_workers: bool = Falsedataloader_prefetch_factor: int | None = Nonedataloader_multiprocessing_context: str | None = Nonedataloader_in_order: bool = Trueremove_unused_columns: bool = Truelabel_names: list[str] | None = Nonetrain_sampling_strategy: str = 'random'length_column_name: str = 'length'ddp_find_unused_parameters: bool | None = Noneddp_bucket_cap_mb: int | None = Noneddp_broadcast_buffers: bool | None = Noneddp_static_graph: bool | None = Noneddp_backend: str | None = Noneddp_timeout: int = 1800fsdp: str | None = Nonefsdp_config: dict[str, typing.Any] | str | None = Nonedeepspeed: dict | str | None = Nonedebug: str | list[transformers.debug_utils.DebugOption] = ''skip_memory_metrics: bool = Truedo_train: bool = Falsedo_eval: bool = Falsedo_predict: bool = Falseresume_from_checkpoint: str | None = Nonelocal_rank: int = -1sortish_sampler: bool = Falsepredict_with_generate: bool = Falsegeneration_max_length: int | None = Nonegeneration_num_beams: int | None = Nonegeneration_config: str | pathlib.Path | transformers.generation.configuration_utils.GenerationConfig | None = None )
المعاملات
- output_dir (
str، اختياري، القيمة الافتراضية"trainer_output") — مجلد الإخراج الذي سيتم فيه كتابة تنبؤات النموذج ونقاط التفتيش.
مدة التدريب وحجم الدفعة
- per_device_train_batch_size (
int، اختياري، القيمة الافتراضية 8) — حجم الدفعة لكل جهاز. يُحسب حجم الدفعة الكلي على النحو التالي:per_device_train_batch_size * number_of_devicesفي إعدادات متعددة GPUs أو موزعة. - num_train_epochs(
float, اختياري، القيمة الافتراضية 3.0) — إجمالي عدد فترات التدريب (epochs) التي يجب تنفيذها (إذا لم تكن قيمة صحيحة، فسيتم تنفيذ الجزء العشري كنسبة مئوية من الفترة الأخيرة قبل إيقاف التدريب). - max_steps (
int، اختياري، القيمة الافتراضية -1) — يتجاوزnum_train_epochs. إذا تم ضبطه على رقم موجب، فهو يمثل العدد الإجمالي لخطوات التدريب التي يجب تنفيذها. بالنسبة إلى مجموعة بيانات محدودة، يتم تكرار التدريب عبر مجموعة البيانات (إذا استُنفد كل البيانات) حتى يتم الوصول إلىmax_steps. يجب ضبطه على قيمة موجبة عندما لا تنفّذ مجموعة بيانات التدريب__len__(مثل مجموعة بيانات البث)، لأن العدد الإجمالي للخطوات لا يمكن استنتاجه في هذه الحالة، وهو مطلوب لتحديد حد حلقة التدريب وإعداد مجدول معدل التعلم.
معدل التعلم والمجدول
- learning_rate (
float، اختياري، القيمة الافتراضية 5e-5) — معدل التعلم الأولي لمُحسِّن التدريب. عادةً ما يكون هذا هو معدل التعلم الأقصى عند استخدام مُجدوِل مع فترة إحماء. - lr_scheduler_type (
strأو SchedulerType, اختياري, الافتراضي هو"linear") — نوع جدولة معدل التعلم المستخدم. راجع SchedulerType لمعرفة جميع القيم الممكنة. الخيارات الشائعة:- “linear” = get_linear_schedule_with_warmup()
- “cosine” = get_cosine_schedule_with_warmup()
- “constant” = get_constant_schedule()
- “constant_with_warmup” = get_constant_schedule_with_warmup()
- lr_scheduler_kwargs (
dictأوstr، اختياري، القيمة الافتراضيةNone) — الحجج الإضافية الخاصة بـ lr_scheduler. راجع توثيق كل مُجدول لمعرفة القيم الممكنة. - warmup_steps (
intأوfloat, اختياري, الافتراضي 0) — عدد الخطوات لدفء خطي من 0 إلىlearning_rate. يساعد الدفء في استقرار التدريب في المرحلة الأولية. يمكن أن يكون:- عدد صحيح: عدد خطوات الإحماء الدقيق
- عدد عشري ضمن المدى [0, 1): يُفسَّر كنسبة من إجمالي خطوات التدريب
المُحسِّن
- optim (
strأوtraining_args.OptimizerNames, اختياري, الافتراضي هو"adamw_torch"(لـ torch>=2.8"adamw_torch_fused")) — المُحسِّن (Optimizer) المستخدم. الخيارات الشائعة:"adamw_torch": AdamW في PyTorch (الافتراضي الموصى به)"adamw_torch_fused": نواة AdamW المدمجة"adamw_hf": تنفيذ AdamW من HuggingFace"sgd": هبوط التدرج العشوائي مع الزخم"adafactor": مُحسِّن فعّال من حيث الذاكرة للنماذج الكبيرة"adamw_8bit": AdamW بدقة 8 بت (يتطلب bitsandbytes) راجعOptimizerNamesللحصول على القائمة الكاملة.
- optim_args (
str, اختياري) — حجج اختيارية تُمرَّر إلى المُحسِّنات مثل AnyPrecisionAdamW وAdEMAMix وGaLore. - weight_decay (
float، اختياري، القيمة الافتراضية 0) — معامل اضمحلال الوزن الذي يطبّقه المُحسِّن (وليس دالة الخسارة). يضيف تنظيم L2 لمنع الإفراط في التخصيص من خلال معاقبة الأوزان الكبيرة. يُستثنى تلقائيًا من معاملات الانحياز وLayerNorm. القيم النموذجية: 0.01 (قياسي)، 0.1 (تنظيم أقوى)، 0.0 (بدون تنظيم). - adam_beta1 (
float, اختياري، القيمة الافتراضية 0.9) — معدل الاضمحلال الأسي لتقديرات اللحظة الأولى (الزخم) في المُحسِّنات القائمة على Adam. يتحكم في مقدار سجل التدرجات الذي يجب الاحتفاظ به. - adam_beta2 (
float, اختياري، القيمة الافتراضية 0.999) — معدل الاضمحلال الأسي لتقديرات العزوم الثانية (التباين) في المُحسِّنات القائمة على Adam. يتحكم في تحجيم معدل التعلم التكيفي. - adam_epsilon (
float, اختياري، القيمة الافتراضية 1e-8) — قيمة إيبسلون للاستقرار العددي في المُحسِّنات القائمة على Adam. تمنع القسمة على الصفر في مقام قاعدة التحديث. - optim_target_modules (
Union[str, list[str]]، اختياري) — وحدات الهدف التي سيتم تحسينها، أي أسماء الوحدات التي ترغب في تدريبها. يُستخدم حاليًا لخوارزمية GaLore وخوارزمية APOLLO. راجع تنفيذ GaLore وتنفيذ APOLLO لمزيد من التفاصيل. يجب التأكد من تمرير مُحسِّن GaLore أو APOLLO صالح، مثل أحد ما يلي: “apollo_adamw” و“galore_adamw” و“galore_adamw_8bit” و“galore_adafactor”، والتأكد من أن وحدات الهدف هي وحداتnn.Linearفقط.
التنظيم واستقرار التدريب
- gradient_accumulation_steps (
int, اختياري, الافتراضي 1) — عدد خطوات التحديث لتجميع التدرجات قبل تنفيذ مسار التراجع/التحديث. يحاكي أحجام دفعات أكبر دون استهلاك ذاكرة إضافية. حجم الدفعة الفعّال =per_device_train_batch_size × num_devices × gradient_accumulation_steps.عند استخدام تراكم التدرجات، يُحتسب "خطوة" واحدة على أنها خطوة واحدة تتضمن مسارًا عكسيًا. لذلك، ستتم عمليات التسجيل والتقييم والحفظ كل
gradient_accumulation_steps × xxx_stepمن أمثلة التدريب. - average_tokens_across_devices (
bool، اختياري، القيمة الافتراضيةTrue) — ما إذا كان سيتم أخذ متوسط الرموز عبر الأجهزة أم لا. إذا تم التفعيل، فسيتم استخدام all_reduce لمزامنة num_tokens_in_batch لحساب الدقة بدقة. المرجع: https://github.com/huggingface/transformers/issues/34242 - max_grad_norm (
float, اختياري، القيمة الافتراضية 1.0) — الحد الأقصى لطول التدرّج (Norm) لقصّ التدرّجات. يُطبَّق بعد مرور التدرّج العكسي وقبل خطوة المُحسِّن. يمنع انفجار التدرّجات عن طريق تصغير التدرّجات عندما يتجاوز طولها الكلي هذا العتبة. اضبطه على 0 لتعطيل القصّ. القيم النموذجية: 1.0 (قياسي)، 0.5 (أكثر تحفظاً)، 5.0 (أقل عدوانية). - label_smoothing_factor (
float, اختياري، القيمة الافتراضية 0.0) — معامل تنعيم التسميات لمنع الثقة المفرطة. يستبدل الأهداف الصلبة 0/1 بأهداف ناعمة: يصبح 0 هوε/num_labelsويصبح 1 هو1 - ε + ε/num_labels، حيث ε =label_smoothing_factor. تعني القيمة صفرًا عدم وجود تنعيم. النطاق النموذجي: من 0.0 إلى 0.1.
التدريب بالدقة المختلطة
- bf16 (
bool، اختياري، القيمة الافتراضيةFalse) — تفعيل تدريب الدقة المختلطة bfloat16 (BF16) يُفضَّل عمومًا على FP16 نظرًا لاستقراره العددي الأفضل وعدم الحاجة إلى تحجيم الفقد. - fp16 (
bool، اختياري، القيمة الافتراضيةFalse) — تفعيل التدريب بدقة مختلطة float16 (FP16). يُفضَّل استخدام BF16 بدلاً من ذلك إذا كان جهازك يدعمه. - bf16_full_eval (
bool، اختياري، القيمة الافتراضيةFalse) — استخدام دقة BF16 الكاملة للتقييم (وليس الدقة المختلطة فقط). أسرع ويوفر الذاكرة، لكنه قد يؤثر قليلاً على قيم المقاييس. ينطبق فقط أثناء التقييم. - fp16_full_eval (
bool، اختياري، القيمة الافتراضيةFalse) — استخدام دقة FP16 الكاملة للتقييم (وليس مجرد دقة مختلطة). أسرع ويوفر الذاكرة، لكنه قد يؤثر قليلاً على قيم المقاييس. ينطبق فقط أثناء التقييم. - tf32 (
bool، اختياري) — تفعيل وضع TensorFloat-32 (TF32) على وحدات معالجة الرسوميات من نوع Ampere والأحدث. يستخدم TF32 دقة بمقدار 19 بت للضرب المصفوفي (بدلاً من 23 بت في FP32)، مما يوفر تسريعًا يصل إلى 8 أضعاف مع فقدان دقة ضئيل. تعتمد القيمة الافتراضية على إصدار PyTorch. راجع وثائق TF32.
التحقق من التفعيل
- activation_checkpointing (
bool, اختياري، القيمة الافتراضيةFalse) — تفعيل فحص التفعيل لتبادل الحساب مع الذاكرة. يقلل من استهلاك الذاكرة عن طريق مسح التفعيلات أثناء المرور الأمامي وإعادة حسابها أثناء المرور الخلفي. يتيح تدريب نماذج أكبر أو أحجام دفعات أكبر مقابل تكلفة تدريب أبطأ بنسبة ~20%. - activation_checkpointing_kwargs (
dict، اختياري، القيمة الافتراضيةNone) — حجج الكلمات المفتاحية التي تُمرَّر إلىactivation_checkpointing_enable().every_n_layersيُنشئ نقاط فحص (checkpoints) لكل طبقة مُفكِّكة (decoder) رقمها مضاعف لـ n بدلاً من جميع الطبقات؛1هو السلوك المعتاد الشامل أو الباطل، والقيم الأكبر تُعيد بعض الذاكرة إلى السرعة.offloadيحتفظ بالتفعيلات المحفوظة في ذاكرة مضيف مثبّتة (pinned host memory)، مما يُحررlayers x sequence x hiddenبايت من ذاكرة الجهاز ويجعل الخطوة أبطأ. أي مفتاح آخر يُمرَّر إلىtorch.utils.checkpoint.checkpoint. - gradient_checkpointing (
bool، اختياري) — اسم مستعار غير مستخدم لـactivation_checkpointing، وسيتم إزالته في الإصدار v6. - gradient_checkpointing_kwargs (
dict، اختياري) — اسم مستعار غير مستحسن لـactivation_checkpointing_kwargs، وسيتم إزالته في الإصدار v6.
التجميع
- torch_compile (
bool، اختياري، القيمة الافتراضيةFalse) — تجميع النموذج باستخدامtorch.compile()في PyTorch 2.0 لتسريع التدريب. يمكن أن يوفر تسريعًا بنسبة 20-50% دون أي تغييرات في الكود. يستخدم إعدادات التجميع الافتراضية ما لم يتم تحديدtorch_compile_backendأوtorch_compile_mode. - torch_compile_backend (
str، اختياري) — الخلفية (Backend) الخاصة بـtorch.compile(). إذا تم ضبطه، يتم تفعيلtorch_compileتلقائيًا. تشمل الخيارات"inductor"(الافتراضي)،"aot_eager"،"cudagraphs". تختلف الخلفيات حسب إصدار PyTorch - راجع توثيق PyTorch لمعرفة الخيارات المتاحة. - torch_compile_mode (
str, اختياري) — وضع التجميع لـtorch.compile(). إذا تم ضبطه، يتم تفعيلtorch_compileتلقائيًا. الخيارات:"default"،"reduce-overhead"(لتقليل الحمل الإضافي على Python)،"max-autotune"(تحسين عدواني، مع وقت تجميع أطول).
النوى
- use_liger_kernel (
bool، اختياري، القيمة الافتراضيةFalse) — تفعيل تحسينات Liger Kernel. يزيد من الإنتاجية عبر وحدات معالجة الرسومات المتعددة بنسبة ~20% ويقلل من استهلاك الذاكرة بنسبة ~60%. يعمل مع Flash Attention وFSDP وDeepSpeed. يدعم حاليًا نماذج Llama وMistral وMixtral وGemma. - liger_kernel_config (
Optional[dict], اختياري) — إعدادات Liger Kernel. تُمرَّر كـ kwargs إلى_apply_liger_kernel_to_instance(). تشمل الخيارات عادةً:"rope"،"swiglu"،"cross_entropy"،"fused_linear_cross_entropy"،"rms_norm". إذا كانتNone، يتم استخدام الإعدادات الافتراضية.
تحسينات إضافية
- use_cache (
bool، اختياري، القيمة الافتراضيةFalse) — ما إذا كان سيتم تفعيل ذاكرة التخزين المؤقت للنموذج أم لا. في حالة التدريب، عادةً ما لا تكون هذه الخاصية مطلوبة باستثناء بعض طرق PEFT التي تستخدمpast_key_values. - neftune_noise_alpha (
Optional[float]) — إذا لم تكنNone، فسيتم تفعيل تضمينات ضوضاء NEFTune. يمكن أن يحسّن هذا أداء النموذج بشكل كبير في الضبط الدقيق التعليمي. اطّلع على الورقة الأصلية و الكود الأصلي. يدعمPreTrainedModelمن transformers وكذلكPeftModelمن peft. استخدمت الورقة الأصلية قيمًا في النطاق [5.0, 15.0]. - torch_empty_cache_steps (
int, اختياري) — عدد الخطوات التي يجب انتظارها قبل استدعاءtorch.<device>.empty_cache(). إذا تُرك غير مضبوط أو تم ضبطه على None، فلن يتم تفريغ ذاكرة التخزين المؤقت. يمكن أن يساعد ذلك في تجنب أخطاء نفاد ذاكرة CUDA عن طريق خفض ذروة استخدام ذاكرة VRAM، مقابل تكلفة تقارب 10% من الأداء الأبطأ. - auto_find_batch_size (
bool، اختياري، القيمة الافتراضيةFalse) — ما إذا كان سيتم تحديد حجم دفعة التدريب الذي يتناسب مع الذاكرة تلقائيًا من خلال التلاشي الأسي، لتجنب أخطاء نفاد ذاكرة CUDA. لا يتم تعديل حجم دفعة التقييم.
تسجيل ومراقبة التدريب
- logging_strategy (
strأو IntervalStrategy, اختياري, الافتراضي هو"steps") — استراتيجية التسجيل المعتمدة أثناء التدريب. القيم الممكنة هي:"no": لا يتم تسجيل أي سجلات أثناء التدريب."epoch": يتم التسجيل في نهاية كل حقبة."steps": يتم التسجيل كلlogging_steps.
- logging_steps (
intأوfloat، اختياري، القيمة الافتراضية 500) — عدد خطوات التحديث بين سجلّين إذا كانlogging_strategy="steps". يجب أن يكون عددًا صحيحًا أو عددًا عشريًا ضمن النطاق[0,1). إذا كان أقل من 1، فسيُفسَّر كنسبة من إجمالي خطوات التدريب. - logging_first_step (
bool، اختياري، القيمة الافتراضيةFalse) — ما إذا كان سيتم تسجيل الخطوة الأولىglobal_stepأم لا. - log_on_each_node (
bool، اختياري، القيمة الافتراضيةTrue) — في التدريب الموزّع متعدد العقد، ما إذا كان سيتم التسجيل باستخدامlog_levelمرة واحدة لكل عقدة، أم على العقدة الرئيسية فقط. - logging_nan_inf_filter (
bool، اختياري، القيمة الافتراضيةTrue) — تصفية قيم NaN و Inf في الخسائر عند التسجيل. إذا كانتTrue، يتم استبدال خسائر التدريب التي تكون NaN/Inf بمتوسط الخسائر الصالحة الأخيرة، ويُستثنى الدُفعات التي تحتوي على NaN/Inf (مثل الدُفعات التي لا تحتوي على رموز تسميات) من حساب خسارة التقييم. لا يؤثر ذلك على حساب التدرجات، بل على التسجيل فقط. - include_num_input_tokens_seen (
Optional[Union[str, bool]]، اختياري، القيمة الافتراضية “no”) — ما إذا كان سيتم تتبع عدد رموز الإدخال التي تم رؤيتها. يجب أن تكون واحدة من [“all”, “non_padding”, “no”] أو قيمة منطقية تُخضع إلى “all” أو “no”. قد يكون أبطأ في التدريب الموزّع لأن عمليات الجمع (gather) يجب أن تُستدعى.
التسجيل
- log_level (
str، اختياري، القيمة الافتراضيةpassive) — مستوى التسجيل للعملية الرئيسية. الخيارات:"debug"،"info"،"warning"،"error"،"critical"، أو"passive"(لا يغيّر مستوى تسجيل Transformers الحالي، والذي تكون قيمته الافتراضية"warning") - log_level_replica (
str، اختياري، القيمة الافتراضية"warning") — مستوى التسجيل لعمليات النسخ في التدريب الموزّع. نفس الخيارات المتاحة فيlog_level. - disable_tqdm (
bool, اختياري) — تعطيل أشرطة تقدم tqdm. القيمة الافتراضية هيTrueإذا كانlog_levelعلى مستوى warning أو أدنى، وإلا فهيFalse.
تكامل تتبع التجارب
- report_to (
strأوlist[str]، اختياري، القيمة الافتراضية"none") — قائمة التكاملات التي سيتم الإبلاغ عن النتائج والسجلات إليها. المنصات المدعومة هي"azure_ml"،"clearml"،"codecarbon"،"comet_ml"،"dagshub"،"dvclive"،"flyte"،"mlflow"،"swanlab"،"tensorboard"،"trackio"و"wandb". استخدم"all"للإبلاغ إلى جميع التكاملات المثبتة، و"none"لعدم استخدام أي تكاملات. - run_name (
str, اختياري) — وصف للتشغيل. يُستخدم عادةً لتسجيل trackio، wandb، mlflow، comet و swanlab. - project (
str، اختياري، القيمة الافتراضية"huggingface") — اسم المشروع المستخدم للتسجيل. حاليًا، يُستخدم فقط بواسطة Trackio. - trackio_space_id (
strأوNone، اختياري، القيمة الافتراضيةNone) — معرف مساحة Hugging Face التي تُستخدم للتسجيل المباشر عبر Trackio باستخدام مساحة مبنية على Gradio. يجب أن يكون اسمًا كاملًا للمساحة على غرار'username/reponame'أو'orgname/reponame'، أو مجرد'reponame'(تُنشأ المساحة في نطاق المستخدم المسجّل حاليًا). إذا كانت القيمةNone، تُسجَّل المقاييس في مجلد محلي فقط (بدون مساحة على Hub). تتمتع مساحة Gradio تلك بصلاحية القراءة والكتابة إلى Bucket الخاص بـ Trackio، وهو ما تريده أثناء استمرار التدريب—على سبيل المثال عند استئناف تشغيل جزئي أو تجميع السجلات من عدة أجهزة. ستكون المساحة عامة ما لم تضبطhub_private_repo=Trueأو كان الافتراضي في مؤسستك هو إنشاء مساحات خاصة. - trackio_bucket_id (
strأوNone، اختياري، القيمة الافتراضيةNone) — معرف Bucket اختياري على Hugging Face خاص بـ Trackio. إذا لم يُضبط، فسيُشتقّ Trackio معرّفًا تلقائيًا. يُستخدم مع مساحة Gradio (trackio_space_id) وعند نشر مساحة ثابتة (عندما لا تكونtrackio_static_space_idقيمةFalse). - trackio_static_space_id (
strأوFalseأوNone، اختياري، القيمة الافتراضية هيNone) — معرف مساحة Hugging Face الذي سيتم استخدامه للمساحة الثابتة التي تُنشأ بعد اكتمال التدريب. يجب أن يكون اسمًا كاملاً للمساحة على غرار'username/reponame'أو'orgname/reponame'، أو مجرد'reponame'(تُنشأ المساحة في مساحة المستخدم المسجّل حاليًا). إذا كانت القيمة False، فلن يتم إنشاء مساحة ثابتة. إذا كانت القيمة None، وتم دفع النموذج إلى Hub، فسيتم إنشاء مساحة ثابتة باسم افتراضي وسيتم ربطها من بطاقة النموذج. ستكون المساحة عامة ما لم تضبطhub_private_repo=Trueأو كان الإعداد الافتراضي لمنظمتك هو إنشاء مساحات خاصة.
التقييم
- eval_strategy (
strأو IntervalStrategy, اختياري, الافتراضي هو"no") — متى يتم تشغيل التقييم. الخيارات:"no": لا يتم إجراء أي تقييم أثناء التدريب"steps": التقييم كلeval_steps"epoch": التقييم في نهاية كل حقبة
- eval_steps (
intأوfloat، اختياري) — عدد خطوات التحديث بين تقييمين إذا كانeval_strategy="steps". إذا لم يتم ضبطه، فسيُستخدم نفس القيمة الخاصة بـlogging_stepsافتراضيًا. يجب أن يكون عددًا صحيحًا أو عددًا عشريًا ضمن المدى[0,1). إذا كان أقل من 1، سيُفسَّر كنسبة من إجمالي خطوات التدريب. - eval_delay (
float, اختياري) — عدد الفترات أو الخطوات التي يجب انتظارها قبل إجراء أول تقييم، وذلك اعتمادًا على eval_strategy. - per_device_eval_batch_size (
int، اختياري، القيمة الافتراضية 8) — حجم الدفعة لكل نواة تسريع/وحدة معالجة مركزية على الجهاز للتقييم. - prediction_loss_only (
bool، اختياري، القيمة الافتراضيةFalse) — عند إجراء التقييم وتوليد التنبؤات، يُرجع الخسارة فقط. - eval_on_start (
bool، اختياري، القيمة الافتراضيةFalse) — ما إذا كان يجب تنفيذ خطوة تقييم (فحص صحة) قبل التدريب للتأكد من أن خطوات التحقق تعمل بشكل صحيح. - eval_do_concat_batches (
bool، اختياري، القيمة الافتراضيةTrue) — ما إذا كان يجب دمج المدخلات/الخسائر/التسميات/التنبؤات بشكل تكراري عبر الدفعات. إذا كانت القيمةFalse، فسيتم تخزينها بدلاً من ذلك كقوائم، مع إبقاء كل دفعة منفصلة. - eval_use_gather_object (
bool، اختياري، القيمة الافتراضيةFalse) — ما إذا كان يجب تشغيل تجميع الكائنات بشكل تكراري من جميع الأجهزة ضمن قائمة/مجموعة/قاموس متداخل من الكائنات. يجب تفعيل هذا الخيار فقط إذا لم يكن المستخدمون يعيدون مجرد متجهات (tensors)، كما أن PyTorch يوصي صراحةً بعدم تفعيله. يكون هذا الخيار مفيداً عندما تكون بنية التسميات غير قياسية، كما هو الحال في مهام الرؤية الحاسوبية. - eval_accumulation_steps (
int، اختياري) — عدد خطوات التنبؤ التي يتم فيها تجميع تensors المخرجات، قبل نقل النتائج إلى وحدة المعالجة المركزية (CPU). إذا لم يتم ضبطه، فسيتم تجميع التنبؤات بالكامل على مُسرِّع الجهاز قبل نقلها إلى وحدة المعالجة المركزية (CPU) (أسرع لكن يتطلب ذاكرة أكبر).
حساب المقاييس
- include_for_metrics (
list[str], اختياري, الافتراضي هو[]) — تضمين بيانات إضافية في دالةcompute_metricsإذا كانت مطلوبة لحساب المقاييس. الخيارات الممكنة للإضافة إلى قائمةinclude_for_metrics:"inputs": بيانات الإدخال المُمرَّرة إلى النموذج، والمُعدّة لحساب المقاييس المعتمدة على الإدخال."loss": قيم الخسارة المحسوبة أثناء التقييم، والمخصصة لحساب المقاييس المعتمدة على الخسارة.
- batch_eval_metrics (
bool، اختياري، القيمة الافتراضيةFalse) — إذا تم ضبطه علىTrue، فستقوم عملية التقييم باستدعاء compute_metrics في نهاية كل دفعة لتراكم الإحصاءات بدلاً من حفظ جميع قيم التقييم (logits) في الذاكرة. عند ضبطه علىTrue، يجب عليك تمرير دالة compute_metrics تقبل حجة منطقيةcompute_result، والتي عند تمريرTrueإليها، ستُطلق الإحصاءات الإجمالية النهائية من الإحصاءات الإجمالية على مستوى الدفعة التي تراكمها على مجموعة التقييم.
التحقق من النقاط الحرجة والحفظ
- save_only_model (
bool، اختياري، القيمة الافتراضيةFalse) — احفظ أوزان النموذج فقط، دون حالة المُحسِّن/المُجدوِل/حالة المولّد العشوائي. يقلّل هذا بشكل كبير من حجم نقطة التفتيش، لكنه يمنع استئناف التدريب من نقطة التفتيش. استخدمه عندما تحتاج إلى النموذج المدرَّب للاستدلال فقط، وليس للتدريب المستمر. لا يمكنك تحميل النموذج باستخدامfrom_pretrainedإلا إذا كانت هذه الخانة مضبوطة علىTrue. - save_strategy (
strأوSaveStrategy, اختياري, الافتراضي هو"steps") — استراتيجية حفظ نقاط التفتيش المعتمدة أثناء التدريب. القيم الممكنة هي:"no": لا يتم حفظ أي شيء أثناء التدريب."epoch": يتم الحفظ في نهاية كل حقبة."steps": يتم الحفظ كلsave_steps."best": يتم الحفظ كلما تم تحقيقbest_metricجديد.
- save_steps (
intأوfloat، اختياري، القيمة الافتراضية 500) — عدد خطوات التحديث قبل حفظ نقطتي تفتيش إذا كانsave_strategy="steps". يجب أن يكون عددًا صحيحًا أو عددًا عشريًا ضمن المدى[0,1). إذا كان أقل من 1، فسيُفسَّر كنسبة من إجمالي خطوات التدريب. - save_on_each_node (
bool، اختياري، القيمة الافتراضيةFalse) — عند تنفيذ التدريب الموزّع متعدد العقد، يحدد ما إذا كان سيتم حفظ النماذج والنقاط المرجعية على كل عقدة، أم على العقدة الرئيسية فقط. يجب عدم تفعيل هذا الخيار عندما تستخدم العقد المختلفة نفس التخزين، لأن الملفات ستُحفظ بأسماء متطابقة على كل عقدة. - save_total_limit (
int, اختياري) — الحد الأقصى لعدد نقاط التفتيش التي يجب الاحتفاظ بها. يحذف نقاط التفتيش الأقدم فيoutput_dir. عندload_best_model_at_end=True، يتم دائمًا الاحتفاظ بأفضل نقطة تفتيش بالإضافة إلى أحدث النقاط. على سبيل المثال،save_total_limit=5يحتفظ بأحدث 4 نقاط بالإضافة إلى الأفضل - enable_jit_checkpoint (
bool, اختياري، القيمة الافتراضيةFalse) — تفعيل نقطة التفتيش الفورية عند الإرسال (Just-In-Time checkpointing) عند استلام إشارة SIGTERM لإنهاء العمل بسلاسة على الأحمال القابلة للاستحواذ (preemptible workloads). مهم: اضبط فترة الإيقاف السلس في منسّقك (orchestrator) للسماح بزمن كافٍ. في Kubernetes، اضبطterminationGracePeriodSeconds(القيمة الافتراضية 30 ثانية عادةً غير كافية). في Slurm، استخدم--signal=TERM@<seconds>. الفترة السليمة المطلوبة ≥ أطول وقت لتكرار واحد + وقت حفظ نقطة التفتيش.
التكامل مع Hugging Face Hub
- push_to_hub (
bool، اختياري، القيمة الافتراضيةFalse) — ما إذا كان سيتم دفع النموذج إلى Hub في كل مرة يُحفظ فيها النموذج. إذا تم تفعيل هذا الخيار، فسيبدأoutput_dirفي إنشاء دليل git متزامن مع المستودع (المحدد بواسطةhub_model_id) وسيتم دفع المحتوى في كل مرة يتم فيها تشغيل الحفظ (بناءً علىsave_strategyالخاص بك). كما أن استدعاء save_model() سيؤدي أيضاً إلى تشغيل عملية الدفع. - hub_token (
str، اختياري) — المفتاح المستخدم لدفع النموذج إلى Hub. سيُستخدم افتراضيًا المفتاح الموجود في مجلد الكاش الذي تم الحصول عليه عبرhf auth login. - hub_private_repo (
bool، اختياري) — ما إذا كان سيتم جعل المستودع خاصًا. إذا كانت القيمةNone(الافتراضية)، فسيكون المستودع عامًا ما لم يكن الافتراضي للمنظمة هو الخاص. يتم تجاهل هذه القيمة إذا كان المستودع موجودًا مسبقًا. عند الإبلاغ إلى Trackio مع تمكين النشر إلى Hugging Face Spaces، تحدد نفس المنطق ما إذا كان المساحة (Space) خاصًا. - hub_model_id (
str، اختياري) — اسم المستودع الذي يجب إبقاؤه متزامنًا مع output_dir المحلي. يمكن أن يكون معرّف نموذج بسيط، وفي هذه الحالة سيتم دفع النموذج إلى نطاقك. وإلا، يجب أن يكون اسم المستودع الكامل، على سبيل المثال"user_name/model"، مما يتيح لك الدفع إلى منظمة أنت عضو فيها باستخدام"organization_name/model". سيكون الافتراضيuser_name/output_dir_nameحيث يكون output_dir_name هو اسمoutput_dir. - hub_strategy (
strأوHubStrategy, اختياري, الافتراضي هو"every_save") — يحدد ما الذي يجب دفعه إلى Hub ومتى. الخيارات:"end": الدفع فقط في نهاية التدريب"every_save": الدفع عند كل حفظ (غير متزامن حتى لا يعيق التدريب)"checkpoint": يشبه"every_save"مع إضافة دفع أحدث نقطة تفتيش إلى مجلد الفرع"last-checkpoint"لسهولة الاستئناف"all_checkpoints": دفع جميع نقاط التفتيش كما تظهر
- hub_always_push (
bool، اختياري، القيمة الافتراضيةFalse) — ما لم تكن هذه القيمةTrue، سيتخطىTrainerدفع نقطة التفتيش إذا لم يكتمل الدفع السابق. - hub_revision (
str, اختياري) — الإصدار (revision) الذي سيتم استخدامه عند الدفع إلى Hub. يمكن أن يكون اسم فرع، أو وسم، أو تجزئة (hash) لالتزام.
أفضل تتبع للنماذج
- load_best_model_at_end (
bool، اختياري، القيمة الافتراضيةFalse) — تحميل أفضل نقطة تحقق في نهاية التدريب. يتطلب ضبطeval_strategy. عند التفعيل، يتم دائمًا حفظ أفضل نقطة تحقق (انظرsave_total_limit).عندما تكون القيمة `True`، يجب أن يتطابق `save_strategy` مع `eval_strategy` (ما لم تكن قيمة `save_strategy` هي `"best"`)، وإذا كان استخدام `"steps"`، فإن `save_steps` يجب أن يكون مضاعفًا لـ `eval_steps`. - metric_for_best_model (
str, اختياري) — المقياس المستخدم لمقارنة النماذج عندload_best_model_at_end=True. يجب أن يكون اسم مقياس يعيده التقييم، مع أو بدون البادئة"eval_". القيمة الافتراضية هي"loss". إذا قمت بتعيين هذا، فستكون القيمة الافتراضية لـgreater_is_betterهيTrueما لم ينتهِ الاسم بـ"loss". أمثلة:"accuracy"،"f1"،"eval_bleu". - greater_is_better (
bool, اختياري) — ما إذا كانت القيم الأعلى للمقياس أفضل. القيمة الافتراضية مبنية علىmetric_for_best_model:Trueإذا لم ينتهِ اسم المقياس بـ"loss"، وإلاFalse.
استئناف التدريب
- ignore_data_skip (
bool، اختياري، القيمة الافتراضيةFalse) — عند استئناف التدريب، يتخطى هذا الخيار التقدّم السريع عبر مجموعة البيانات للوصول إلى الحالة السابقة. إذا كانت القيمةTrue، يبدأ التدريب من بداية مجموعة البيانات (استئناف أسرع لكن النتائج لن تتطابق مع التدريب المقطوع). إذا كانت القيمةFalse، يتخطى البيانات التي تم رؤيتها (استئناف أبطأ لكن استكمال دقيق). - restore_callback_states_from_checkpoint (
bool، اختياري، القيمة الافتراضيةFalse) — استعادة حالات الاستدعاءات (callbacks) من نقطة التفتيش عند الاستئناف. إذا كانت القيمةTrue، فسيتم تجاوز الاستدعاءات (callbacks) الممرّرة إلى Trainer إذا كانت موجودة في نقطة التفتيش.
قابلية التكرار
- full_determinism (
bool، اختياري، القيمة الافتراضيةFalse) — إذا كانتTrue، يتم استدعاء enable_full_determinism() بدلاً من set_seed() لضمان الحصول على نتائج قابلة للتكرار في التدريب الموزّع. ملاحظة مهمة: سيؤثر هذا سلباً على الأداء، لذا استخدمه فقط لأغراض تصحيح الأخطاء. - seed (
int، اختياري، القيمة الافتراضية 42) — بذرة عشوائية سيتم ضبطها في بداية التدريب. لضمان قابلية إعادة الإنتاج عبر التشغيلات، استخدم دالة~Trainer.model_initلإنشاء النموذج إذا كانت بعض معاميره مهيأة عشوائيًا. - data_seed (
int, اختياري) — البذرة العشوائية المستخدمة مع عينات البيانات. إذا لم يتم ضبطها، فستستخدم مولدات الأرقام العشوائية لعينات البيانات نفس البذرة الخاصة بـseed. يمكن استخدام هذا لضمان قابلية إعادة إنتاج عينات البيانات، بشكل مستقل عن بذرة النموذج.
إعدادات العتاد
- use_cpu (
bool، اختياري، القيمة الافتراضيةFalse) — ما إذا كان سيتم استخدام وحدة المعالجة المركزية (CPU) أم لا. إذا تم ضبطها على False، فسيتم استخدام جهاز/واجهة الخلفية المتاحة من torch.
إعدادات Accelerate
- accelerator_config (
str,dict, أوAcceleratorConfig, اختياري) — إعدادات تكامل Accelerate الداخلي. يمكن أن تكون: مسار إلى ملف إعدادات بصيغة JSON: "accelerator_config.json" قاموس يحتوي على خيارات الإعدادات كائن من نوع AcceleratorConfig الخيارات الرئيسية: split_batches (bool، القيمة الافتراضية False): ما إذا كان سيتم تقسيم الدفعات عبر الأجهزة. إذا كانت True، فإن حجم الدفعة الفعلي يكون متساوياً على جميع الأجهزة (يجب أن يكون المجموع قابلاً للقسمة على num_processes). إذا كانت False، يحصل كل جهاز على حجم الدفعة المحدد. dispatch_batches (bool): إذا كانت True، يقوم العملية الرئيسية فقط بتكرار dataloader وإرسال الدفعات إلى الأجهزة. القيمة الافتراضية True لـ IterableDataset، وFalse في الحالات الأخرى. even_batches (bool، القيمة الافتراضية True): تكرار العينات من بداية مجموعة البيانات لضمان حصول جميع العمال على أحجام دفعات متساوية. use_seedable_sampler (bool، القيمة الافتراضية True): استخدام عينة عشوائية قابلة للتبذير بالكامل من أجل قابلية التكرار. use_configured_state (bool، القيمة الافتراضية False): استخدام AcceleratorState/PartialState مُهيّأ مسبقاً بدلاً من إنشاء واحد جديد. قد يسبب مشاكل في ضبط المعلمات الفائقة.- مسار ملف الإعدادات بصيغة JSON:
"accelerator_config.json" - قاموس بخيارات الإعداد
- مثال من
AcceleratorConfigالخيارات الرئيسية: split_batches(bool، القيمة الافتراضيةFalse): ما إذا كان سيتم تقسيم الدفعات عبر الأجهزة. إذا كانتTrue، فإن حجم الدفعة الفعلي يكون متساوياً على جميع الأجهزة (يجب أن يكون المجموع قابلاً للقسمة على num_processes). إذا كانتFalse، يحصل كل جهاز على حجم الدفعة المحدد.dispatch_batches(bool): إذا كانت القيمةTrue، فإن العملية الرئيسية فقط تتصفح dataloader وتوزّع الدفعات على الأجهزة. القيمة الافتراضية هيTrueفي حالةIterableDataset، وFalseفي الحالات الأخرى.even_batches(bool، القيمة الافتراضيةTrue): يُكرّر العينات من بداية مجموعة البيانات لضمان حصول جميع العمال على أحجام دفعات متساوية.use_seedable_sampler(bool، القيمة الافتراضيةTrue): استخدام مُعيّن عشوائي قابل للتبذير بالكامل من أجل قابلية التكرار.use_configured_state(bool، القيمة الافتراضيةFalse): استخدام حالةAcceleratorState/PartialStateمُهيّأة مسبقًا بدلاً من إنشاء حالة جديدة. قد يسبب ذلك مشاكل في ضبط المعلمات الفائقة.
- مسار ملف الإعدادات بصيغة JSON:
- parallelism_config (
ParallelismConfig، اختياري) — إعدادات التوازي لجلسة التدريب. يتطلب Accelerate1.10.1
Dataloader
- dataloader_drop_last (
bool، اختياري، القيمة الافتراضيةFalse) — هل يتم إسقاط الدفعة الأخيرة غير المكتملة (إذا لم يكن طول مجموعة البيانات قابلاً للقسمة على حجم الدفعة) أم لا. - dataloader_num_workers (
int, اختياري، القيمة الافتراضية 0) — عدد العمليات الفرعية المستخدمة لتحميل البيانات (PyTorch فقط). القيمة 0 تعني أن البيانات ستُحمَّل في العملية الرئيسية. - dataloader_pin_memory (
bool، اختياري، القيمة الافتراضيةTrue) — هل تريد تثبيت الذاكرة في محمّلات البيانات أم لا. ستكون القيمة الافتراضيةTrue. - dataloader_persistent_workers (
bool، اختياري، القيمة الافتراضيةFalse) — إذا كانت القيمة True، فلن يُغلق مُحمِّل البيانات عمليات العمال بعد استهلاك مجموعة البيانات مرة واحدة. هذا يسمح بإبقاء كائنات Dataset الخاصة بالعمال نشطة. قد يسرّع التدريب بشكل محتمل، لكنه سيزيد من استهلاك ذاكرة RAM. ستكون القيمة الافتراضيةFalse. - dataloader_prefetch_factor (
int, اختياري) — عدد الدفعات التي يتم تحميلها مسبقًا بواسطة كل عامل. قيمة 2 تعني أن إجمالي عدد الدفعات المحمّلة مسبقًا عبر جميع العمال سيكون 2 * num_workers. - dataloader_multiprocessing_context (
str، اختياري) — طريقة بدء التشغيل متعددة العمليات المستخدمة لعمال تحميل البيانات ("fork"أو"spawn"أو"forkserver"). الافتراضي هو طريقة بدء التشغيل الافتراضية في PyTorch، باستثناء حالة MPS عندما يكونdataloader_num_workers > 1، حيث تكون القيمة الافتراضية"fork". استخدم"spawn"عند البث من مصادر لا تكون كائناتها آمنة للاستنساخ (مثل HDFS عبرpyarrow). عند استخدام"spawn"، يجب أن تكون أي دالةcollate_fnمخصصة أو كود مجموعة بيانات قابلًا للاستيراد على مستوى الوحدة (بدون دوال lambda أو closures). - dataloader_in_order (
bool، اختياري، القيمة الافتراضيةTrue) — إذا كانتTrue، فإن مُحمِّل البيانات يُخرج الدفعات بالترتيب الذي تم فيه إرسال العمال. اضبطها علىFalseلإخراج الدفعات فور جاهزيتها، مما قد يقلل من زمن التأخير النهائي لأحمال العمل التدفّقية الخاصة بـIterableDataset. يتطلب PyTorch >= 2.6. - remove_unused_columns (
bool، اختياري، القيمة الافتراضيةTrue) — ما إذا كان سيتم حذف الأعمدة التي لا يستخدمها دالة الأمامية للنموذج تلقائيًا أم لا. - label_names (
list[str]، اختياري) — قائمة المفاتيح في قاموس المدخلات الخاص بك التي تتوافق مع التسميات. سيتم افتراضياً اعتماد قائمة أسماء المعاملات التي يقبلها النموذج والتي تحتوي على كلمة “label”، ما لم يكن النموذج المستخدم من نوعXxxForQuestionAnswering، وفي هذه الحالة ستشمل القائمة أيضاً مفاتيح["start_positions", "end_positions"]. يجب عليك تحديدlabel_namesفقط إذا كنت تستخدم أسماء تسميات مخصصة، أو إذا كانforwardالخاص بنموذجك يستهلك عدة تينسورات للتسميات (على سبيل المثال، في الإجابة الاستخراجية على الأسئلة). - train_sampling_strategy (
str, اختياري, الافتراضي هو"random") — المُعيّن (Sampler) المستخدم لـ DataLoader الخاص بالتدريب. القيم الممكنة هي:"random": يستخدمRandomSampler(الافتراضي)."sequential": يستخدمSequentialSampler."group_by_length": يستخدمLengthGroupedSamplerلتجميع العينات ذات الطول المتقارب معًا (لتقليل الحشو وزيادة الكفاءة)."batch_rebalance": يستخدمBatchRebalanceSamplerلموازنة تكلفة الرموز المُكمّلة عبر الأجهزة وخطوات تراكم التدرّجات داخل كل دفعة فعّالة، مما يقلّل من هدر التكميم والذروة في الذاكرة مقارنةً بـ"group_by_length". حاليًا، يُدعم هذا الخيار فقط للتدريب بالتوازي على مستوى البيانات (فإن التوازي على مستوى المكوّنات غير مدعوم بعد).
ملاحظة: عند استخدام
IterableDataset، يتم تجاهل هذا الحُجّة. - length_column_name (
str, اختياري، القيمة الافتراضية"length") — اسم العمود الخاص بالطول المحسوب مسبقاً. إذا كان العمود موجوداً، فسيستخدم التجميع حسب الطول هذه القيم بدلاً من حسابها عند بدء التدريب. يتم تجاهله ما لم يكنtrain_sampling_strategyهو"group_by_length"أو"batch_rebalance"وكان مجموعة البيانات مثلاً منDataset.
DDP (DistributedDataParallel)
- ddp_find_unused_parameters (
bool، اختياري) — عند استخدام التدريب الموزّع، قيمة العلمfind_unused_parametersالمُمرّرة إلىDistributedDataParallel. ستكون القيمة الافتراضيةFalseإذا تم استخدام نقطة التفتيش للتدرّجات، وإلا فستكونTrue. - ddp_bucket_cap_mb (
int، اختياري) — عند استخدام التدريب الموزّع، قيمة العلمbucket_cap_mbالمُمرَّر إلىDistributedDataParallel. - ddp_broadcast_buffers (
bool، اختياري) — عند استخدام التدريب الموزّع، قيمة العلمbroadcast_buffersالمُمرّرة إلىDistributedDataParallel. ستكون القيمة الافتراضيةFalseإذا تم استخدام نقطة التفتيش للتدرّجات، وإلا فستكونTrue. - ddp_static_graph (
bool، اختياري) — عند استخدام التدريب الموزّع، قيمة العلمstatic_graphالمُمرَّر إلىDistributedDataParallel. - ddp_backend (
str, اختياري) — الواجهة الخلفية المستخدمة للتدريب الموزّع. يجب أن تكون واحدة من"nccl"،"mpi"،"xccl"،"gloo"،"hccl". - ddp_timeout (
int، اختياري، القيمة الافتراضية 1800) — مهلة الاستجابة لاستدعاءاتtorch.distributed.init_process_group، وتُستخدم لتجنّب انتهاء مهلة اتصال وحدات معالجة الرسوميات (GPU) عند تنفيذ عمليات بطيئة في التشغيل الموزّع. يُرجى الرجوع إلى توثيق PyTorch لمزيد من المعلومات.
FSDP (التوازي الكامل للبيانات المجزأة)
- fsdp (
bool، اختياري، القيمة الافتراضيةNone) — تفعيل PyTorch Fully Sharded Data Parallel (FSDP) للتدريب الموزّع. مرّرTrueلتفعيل FSDP. - fsdp_config (
strordict, optional) — Configuration settings for whenfsdpis enabled. Pass a path to a JSON config file, such asfsdp_config.json, or an already-loaded dict.المفاتيح المدعومة:
- الإصدار (
int، اختياري، الافتراضي2): إصدار FSDP الذي سيتم استخدامه (2لـ FSDP2، و1لـ FSDP1 القديم). - reshard_after_forward (
bool, اختياري، القيمة الافتراضيةTrue): ما إذا كان يجب إعادة تجزئة المعاملات بعد عملية الانتقال الأمامي. اضبطها علىFalseللحفاظ على تجميع المعاملات بين عمليتي الانتقال الأمامي والعكسي، مما يتجنب إعادة التجميع الشامل (re-all-gather)، ويستخدم ذاكرة ذروة أعلى. - cpu_offload (
bool، اختياري، القيمة الافتراضيةFalse): تحويل المعاملات والتدرجات إلى وحدة المعالجة المركزية (CPU) عند عدم استخدامها لتوفير ذاكرة وحدة معالجة الرسوميات (GPU). - activation_checkpointing (
bool, اختياري، القيمة الافتراضيةFalse): اضبطه علىTrueلتقليل الذاكرة عن طريق إعادة حساب التفعيلات أثناء عملية الرجوع الخلفي. عند استخدام FSDP، يُفضَّل استخدام هذا بدلاً من معامل التدريبactivation_checkpointing، الذي يُدخل عملية all-gather زائدة عن الحاجة في عملية الرجوع الخلفي. - cpu_ram_efficient_loading (
bool, اختياري، القيمة الافتراضيةFalse): اضبطه علىTrueلتحميل نقطة الفحص المُدرَّبة مسبقًا على العملية الأولى فقط. تبدأ العمليات الأخرى بأوزان فارغة وتستقبل الأوزان عبر البث. - state_dict_type (
str، اختياري، القيمة الافتراضية"FULL_STATE_DICT"): تنسيق نقطة التفتيش:"FULL_STATE_DICT"(ملف واحد متوافق مع HF) أو"SHARDED_STATE_DICT"(ملف واحد لكل rank، أسرع للنماذج الكبيرة). - auto_wrap_policy (
str, اختياري، الافتراضي"TRANSFORMER_BASED_WRAP"): سياسة التغليف التلقائي المستخدمة. اختر"TRANSFORMER_BASED_WRAP"أو"SIZE_BASED_WRAP"أو"NO_WRAP". - transformer_layer_cls_to_wrap (
list[str]، اختياري): أسماء فئات طبقات Transformer (حساسة لحالة الأحرف) التي يجب تغليفها، مثلLlamaDecoderLayer. عادةً ما يكون هذا غير ضروري: إذ يعتمد سياسة التغليف على_no_split_modulesالخاص بالنموذج، والذي يغطي معظم نماذج transformers. - min_num_params (
int, اختياري، القيمة الافتراضية0): الحد الأدنى لعدد المعاملات في كل وحدة للتغليف التلقائي القائم على الحجم (يُستخدم معauto_wrap_policy="SIZE_BASED_WRAP"). - xla (
bool، اختياري، القيمة الافتراضيةFalse): ما إذا كان سيتم استخدام تدريب PyTorch/XLA بالتوازي الكامل لبيانات FSDP. تجريبي. - xla_fsdp_settings (
dict, اختياري): قاموس بمعاملات تغليف XLA FSDP. للحصول على قائمة كاملة بالخيارات، راجع مصدر XLA FSDP. - xla_fsdp_grad_ckpt (
bool، اختياري، القيمة الافتراضيةFalse): اضبطه علىTrueلاستخدام نقطة التفتيش التدرّجية على كل طبقة مغلّفة بـ XLA FSDP متداخلة. يتطلبxla=Trueوسياسة تغليف تلقائية (min_num_paramsأوtransformer_layer_cls_to_wrap).
- الإصدار (
DeepSpeed
- deepspeed (
strأوdict, اختياري) — تفعيل DeepSpeed التكامل. القيمة إما:- مسار ملف إعدادات DeepSpeed بصيغة JSON:
"ds_config.json" - تم تحميل الإعدادات كقاموس
إذا كنت تستخدم تهيئة ZeRO، فقم بإنشاء نموذجك بعد تهيئة
TrainingArguments، وإلا فلن يتم تطبيق ZeRO.
- مسار ملف إعدادات DeepSpeed بصيغة JSON:
التصحيح والتحليل (تجريبي)
- debug (
strأو قائمة منDebugOption, اختياري, الافتراضي هو"") — تفعيل ميزة أو أكثر من ميزات التصحيح. هذه ميزة تجريبية. الخيارات الممكنة هي:- “underflow_overflow”: يكشف عن تجاوز الحدود في مدخلات/مخرجات النموذج ويبلّغ عن آخر الإطارات التي أدت إلى
- “tpu_metrics_debug”: طباعة مقاييس التصحيح على TPU
- skip_memory_metrics (
bool، اختياري، القيمة الافتراضيةTrue) — ما إذا كان سيتم تخطي إضافة تقارير ملفّس الذاكرة إلى المقاييس. يتم تخطي هذا الإعداد افتراضيًا لأنه يُبطئ سرعة التدريب والتقييم.
أعلام السكربت الخارجي (غير مستخدمة بواسطة Trainer)
- do_train (
bool، اختياري، القيمة الافتراضيةFalse) — ما إذا كان سيتم تشغيل التدريب أم لا. لا يستخدم هذا الحُجُج مباشرةً بواسطة Trainer، بل يُقصد استخدامه من قِبل سكربتات التدريب/التقييم الخاصة بك. - do_eval (
bool, اختياري) — ما إذا كان سيتم تشغيل التقييم على مجموعة التحقق أم لا. سيُضبط علىTrueإذا كانeval_strategyمختلفًا عن"no". لا يستخدم هذا الحجة مباشرةً بواسطة Trainer، بل يُقصد استخدامه في سكربتات التدريب/التقييم الخاصة بك. - do_predict (
bool، اختياري، القيمة الافتراضيةFalse) — ما إذا كان سيتم تشغيل التنبؤات على مجموعة الاختبار أم لا. لا يستخدم هذا الحجة مباشرةً بواسطة Trainer، بل يُقصد استخدامه من قِبل سكربتات التدريب/التقييم الخاصة بك. - resume_from_checkpoint (
str, اختياري) — مسار مجلد يحتوي على نقطة تفتيش صالحة لنموذجك. لا يستخدم هذا الحُجُج مباشرةً بواسطة Trainer، بل يُقصد استخدامه من قِبل سكربتات التدريب/التقييم الخاصة بك. - sortish_sampler (
bool, اختياري, الافتراضي هوFalse) — هل نستخدم sortish sampler أم لا. هذا ممكن فقط إذا كانت مجموعات البيانات الأساسية من نوع Seq2SeqDataset حاليًا، لكن سيصبح متاحًا بشكل عام في المستقبل القريب.يُرتّب المدخلات وفقاً لطولها بهدف تقليل حجم الحشو، مع إضافة قدر بسيط من العشوائية لمجموعة التدريب.
- predict_with_generate (
bool، اختياري، القيمة الافتراضيةFalse) — ما إذا كان سيتم استخدام generate لحساب مقاييس التوليد (ROUGE، BLEU). - generation_max_length (
int, اختياري) — قيمةmax_lengthالمستخدمة في كل حلقة تقييم عند تعيينpredict_with_generate=True. ستكون القيمة الافتراضية هي قيمةmax_lengthفي إعدادات النموذج. - generation_num_beams (
int, اختياري) — قيمةnum_beamsالمستخدمة في كل حلقة تقييم عند تعيينpredict_with_generate=True. ستكون القيمة الافتراضية هي قيمةnum_beamsفي إعدادات النموذج. - generation_config (
strأوPathأو GenerationConfig, اختياري) — يتيح تحميل GenerationConfig منfrom_pretrainedطريقة. يمكن أن يكون:- سلسلة نصية، وهي معرّف النموذج لإعدادات نموذج مُدرَّب مسبقًا مستضاف داخل مستودع نموذج على huggingface.co.
- مسار إلى مجلد يحتوي على ملف إعدادات تم حفظه باستخدام طريقة save_pretrained()، على سبيل المثال
./my_model_directory/. - كائن GenerationConfig.
فئة التهيئة للتحكم في جميع جوانب تدريب النموذج باستخدام Trainer. تُوحّد TrainingArguments جميع المعاملات الفائقة وإعدادات التحسين وتفضيلات التسجيل وخيارات البنية التحتية اللازمة للتدريب.
يمكن لـ HfArgumentParser تحويل هذه الفئة إلى حُجج argparse يمكن تحديدها على سطر الأوامر.
يسلسل هذه النسخة مع استبدال Enum بقيمها وGenerationConfig بقواميس (لدعم التسلسل بصيغة JSON). كما يُعمّي على قيم الرموز (tokens) عن طريق إزالة قيمها.