Transformers documentation
أدوات Trainer
أدوات Trainer
تُدرج هذه الصفحة جميع دوال الأداة المستخدمة في Trainer.
لا تُفيد معظم تلك العناصر إلا إذا كنت تدرس كود Trainer في المكتبة.
أدوات
فئة transformers.EvalPrediction
< source >( predictions: numpy.ndarray | tuple[numpy.ndarray]label_ids: numpy.ndarray | tuple[numpy.ndarray]inputs: numpy.ndarray | tuple[numpy.ndarray] | None = Nonelosses: numpy.ndarray | tuple[numpy.ndarray] | None = None )
مخرجات التقييم (تحتوي دائمًا على التسميات)، لاستخدامها في حساب المقاييس.
فئة transformers.IntervalStrategy
< source >( valuenames = Nonemodule = Nonequalname = Nonetype = Nonestart = 1boundary = None )
دالة مساعدة لضمان سلوك قابل للتكرار أثناء التدريب الموزع. راجع https://pytorch.org/docs/stable/notes/randomness.html للحصول على معلومات حول PyTorch
transformers.set_seed
< source >( seed: intdeterministic: bool = False )
دالة مساعدة لضمان سلوك قابل للتكرار من خلال تعيين البذرة في random وnumpy وtorch (إذا كانت مثبتة).
transformers.torch_distributed_zero_first
< source >( local_rank: int )
مُزيِّن لجعل جميع العمليات في التدريب الموزّع تنتظر كل local_master لتنفيذ شيء ما.
التفاصيل الداخلية للمكالمات
فئة transformers.trainer_callback.CallbackHandler
< source >( callbacksmodelprocessing_classoptimizerlr_scheduler )
فئة داخلية تستدعي قائمة المراجعات (callbacks) بالترتيب فقط.
محلل حجة Trainer
فئة transformers.HfArgumentParser
< source >( dataclass_types: typing.Union[transformers.hf_argparser.DataClassType, collections.abc.Iterable[transformers.hf_argparser.DataClassType], NoneType] = None**kwargs )
تستخدم هذه الفئة الفرعية من argparse.ArgumentParser تلميحات الأنواع على فئات البيانات (dataclasses) لتوليد الحجج.
صُممت الفئة لتعمل بشكل جيد مع argparse الأصلية. على وجه التحديد، يمكنك إضافة المزيد من الحُجج (غير المدعومة بواسطة dataclass) إلى المُحلِّل بعد التهيئة، وستحصل على المخرجات بعد التحليل كفضاء أسماء إضافي. اختياري: لإنشاء مجموعات حُجج فرعية، استخدم خاصية _argument_group_name في dataclass.
parse_args_into_dataclasses
< source >( args = Nonereturn_remaining_strings = Falselook_for_args_file = Trueargs_filename = Noneargs_file_flag = None ) → Tuple consisting of
المعاملات
- args — قائمة من السلاسل النصية التي سيتم تحليلها. القيمة الافتراضية مأخوذة من sys.argv. (نفس argparse.ArgumentParser)
- return_remaining_strings — إذا كانت القيمة صحيحة، يُعاد أيضًا قائمة بسلاسل الحروف المتبقية للحجج.
- look_for_args_file — إذا كانت القيمة صحيحة، فسيبحث عن ملف “.args” يحمل الاسم الأساسي نفسه لسكربت نقطة الدخول الخاص بهذه العملية، وسيضيف محتواه المحتمل إلى معاملات سطر الأوامر.
- args_filename — إذا لم يكن None، فسيتم استخدام هذا الملف بدلاً من ملف “.args” المحدد في الحجة السابقة.
- args_file_flag — إذا لم تكن القيمة None، فسيتم البحث عن ملف ضمن معاملات سطر الأوامر المحددة بواسطة هذا العلم. يمكن تحديد العلم عدة مرات، ويُحدَّد الأولوية بناءً على الترتيب (يُعتدّ بالأخير).
يعيد
مجموعة (Tuple) تتكون من
- أمثلة dataclass بنفس الترتيب الذي تم تمريرها به إلى المُهيِّئ.
- إذا كان ذلك ينطبق، فضاء أسماء إضافي لحجج (غير مدعومة بـ dataclass) أخرى تُضاف إلى المحلل بعد التهيئة.
- القائمة المحتملة لسلاسل الحجة المتبقية. (نفس argparse.ArgumentParser.parse_known_args)
تحليل حُجج سطر الأوامر إلى كائنات من أنواع dataclass المحددة.
يعتمد هذا على ArgumentParser.parse_known_args الخاص بـ argparse. راجع التوثيق في:
docs.python.org/3/library/argparse.html#argparse.ArgumentParser.parse_args
parse_dict
< source >( args: dictallow_extra_keys: bool = False ) → Tuple consisting of
المعاملات
- args (
dict) — قاموس يحتوي على قيم الإعداد - allow_extra_keys (
bool، اختياري، القيمة الافتراضيةFalse) — القيمة الافتراضية هي False. إذا كانت False، فسيتم رفع استثناء إذا احتوى القاموس على مفاتيح غير محللة.
يعيد
مجموعة (Tuple) تتكون من
- أمثلة dataclass بنفس الترتيب الذي تم تمريرها به إلى المُهيِّئ.
طريقة مساعدة بديلة لا تستخدم argparse على الإطلاق، بل تستخدم قاموساً (dict) وملء أنواع dataclass.
parse_json_file
< source >( json_file: str | os.PathLikeallow_extra_keys: bool = False ) → Tuple consisting of
المعاملات
- json_file (
strأوos.PathLike) — اسم ملف json الذي سيتم تحليله - allow_extra_keys (
bool، اختياري، القيمة الافتراضيةFalse) — القيمة الافتراضية هي False. إذا كانت False، فسيتم رفع استثناء إذا احتوى ملف json على مفاتيح غير محللة.
يعيد
مجموعة (Tuple) تتكون من
- أمثلة dataclass بنفس الترتيب الذي تم تمريرها به إلى المُهيِّئ.
طريقة مساعدة بديلة لا تستخدم argparse على الإطلاق، بل تقوم بدلاً من ذلك بتحميل ملف json وملء أنواع dataclass.
parse_yaml_file
< source >( yaml_file: str | os.PathLikeallow_extra_keys: bool = False ) → Tuple consisting of
المعاملات
- yaml_file (
strأوos.PathLike) — اسم ملف yaml الذي سيتم تحليله - allow_extra_keys (
bool، اختياري، القيمة الافتراضيةFalse) — القيمة الافتراضية هي False. إذا كانت False، فسيتم رفع استثناء إذا احتوى ملف json على مفاتيح غير محللة.
يعيد
مجموعة (Tuple) تتكون من
- أمثلة dataclass بنفس الترتيب الذي تم تمريرها به إلى المُهيِّئ.
طريقة مساعدة بديلة لا تستخدم argparse على الإطلاق، بل تقوم بدلاً من ذلك بتحميل ملف yaml وملء أنواع dataclass.
أدوات التصحيح
فئة transformers.debug_utils.DebugUnderflowOverflow
< source >( modelmax_frames_to_save = 21trace_batch_nums = Noneabort_after_batch_num = None )
المعاملات
- model (
nn.Module) — النموذج المراد تصحيحه. - max_frames_to_save (
int، اختياري، القيمة الافتراضية 21) — عدد الإطارات السابقة التي يجب تسجيلها - trace_batch_nums(
list[int], اختياري، القيمة الافتراضية[]) — أرقام الدفعات التي يجب تتبعها (يؤدي إلى تعطيل الكشف عن الدور) - abort_after_batch_num (`int“, اختياري) — ما إذا كان يجب إنهاء العملية بعد اكتمال رقم دفعة معين
يساعد هذا الصنف في التصحيح على اكتشاف وفهم المكان الذي تبدأ فيه أوزان النموذج وتفعيلاته في أن تصبح كبيرة جدًا أو صغيرة جدًا، والأهم من ذلك العناصر التي تكون قيمتها nan أو inf.
هناك وضعان للعمل:
- كشف عن نقص/فائض التدفق (افتراضي)
- تتبع الحد الأدنى/الحد الأقصى المطلق للدفعة المحددة دون كشف
الوضع 1: كشف عن/تجاوز الحدود
لتفعيل كشف النقص/الزيادة، قم بتهيئة الكائن مع النموذج:
debug_overflow = DebugUnderflowOverflow(model)
ثم نفّذ التدريب بشكل طبيعي، وإذا تم اكتشاف nan أو inf في عنصر واحد على الأقل من عناصر الأوزان أو المدخلات أو المخرجات، فسيُطلق هذا الوحدة استثناءً ويُطبع max_frames_to_save إطارًا أدّت إلى هذا الحدث، مع الإبلاغ في كل إطار
- اسم الوحدة الكامل بالإضافة إلى اسم الفئة التي تم تنفيذ
forwardالخاصة بها - القيمة الدنيا والعليا المطلقة لجميع العناصر في أوزان كل وحدة، والمدخلات والمخرجات
على سبيل المثال، فيما يلي الترويسة والأطر الأخيرة في تقرير الكشف الخاص بتشغيل google/mt5-small في fp16
الدقة المختلطة:
Detected inf/nan during batch_number=0
Last 21 forward frames:
abs min abs max metadata
[...]
encoder.block.2.layer.1.DenseReluDense.wi_0 Linear
2.17e-07 4.50e+00 weight
1.79e-06 4.65e+00 input[0]
2.68e-06 3.70e+01 output
encoder.block.2.layer.1.DenseReluDense.wi_1 Linear
8.08e-07 2.66e+01 weight
1.79e-06 4.65e+00 input[0]
1.27e-04 2.37e+02 output
encoder.block.2.layer.1.DenseReluDense.wo Linear
1.01e-06 6.44e+00 weight
0.00e+00 9.74e+03 input[0]
3.18e-04 6.27e+04 output
encoder.block.2.layer.1.DenseReluDense T5DenseGatedGeluDense
1.79e-06 4.65e+00 input[0]
3.18e-04 6.27e+04 output
encoder.block.2.layer.1.dropout Dropout
3.18e-04 6.27e+04 input[0]
0.00e+00 inf outputيمكنك أن ترى هنا أن T5DenseGatedGeluDense.forward نتج عنه تنشيطات مخرجات، كان أقصى قيمة مطلقة لها حوالي 62.7K، وهو قريب جداً من الحد الأقصى لـ fp16 البالغ 64K. في الإطار التالي لدينا Dropout الذي يعيد تطبيع الأوزان، بعد أن صفر بعض العناصر، مما يدفع أقصى قيمة مطلقة إلى أكثر من 64K، ونحصل على تجاوز.
كما ترون، فإن الإطارات السابقة هي التي نحتاج إلى فحصها عندما تبدأ الأرقام في الوصول إلى قيم كبيرة جدًا بالنسبة لأرقام fp16.
يتم تنفيذ التتبع في خطاف أمامي (forward hook) يُستدعى فور اكتمال forward.
بشكل افتراضي، يتم طباعة آخر 21 إطارًا. يمكنك تغيير الإعداد الافتراضي لتلبية احتياجاتك. على سبيل المثال:
debug_overflow = DebugUnderflowOverflow(model, max_frames_to_save=100)للتحقق من أنك قمت بإعداد ميزة التصحيح هذه بشكل صحيح، وأنك تنوي استخدامها في تدريب قد يستغرق ساعات حتى يكتمل، شغّلها أولاً مع تفعيل التتبع العادي لدفعة واحدة من بين عدد قليل من الدفعات كما هو موضح في القسم التالي.
الوضع 2. تتبع الحد الأدنى/الحد الأقصى المطلق للدفعات المحددة دون اكتشاف
الوضع الثاني للعمل هو التتبع لكل دفعة مع تعطيل ميزة اكتشاف النقص/الزيادة.
لنفترض أنك تريد مراقبة القيم الدنيا والعليا المطلقة لجميع مكوّنات كل استدعاء forward ل
المجموعة المعطاة، وتنفيذ ذلك فقط للمجموعتين 1 و 3. ثم تقوم بإنشاء هذا الصنف على النحو التالي:
debug_overflow = DebugUnderflowOverflow(model, trace_batch_nums=[1, 3])والآن سيتم تتبع الدفعتين الكاملتين 1 و 3 باستخدام نفس التنسيق الموضح أعلاه. تُرقَّم الدفعات بدءًا من الصفر.
يكون هذا مفيدًا إذا كنت تعلم أن البرنامج يبدأ في العمل بشكل خاطئ بعد رقم دفعة معين، مما يتيح لك الانتقال السريع مباشرةً إلى تلك المنطقة.
الإيقاف المبكر:
يمكنك أيضًا تحديد رقم الدفعة التي يجب التوقف عن التدريب بعدها، وذلك باستخدام:
debug_overflow = DebugUnderflowOverflow(model, trace_batch_nums=[1, 3], abort_after_batch_num=3)تكون هذه الميزة مفيدة بشكل رئيسي في وضع التتبع، لكن يمكنك استخدامها في أي وضع.
الأداء:
بما أن هذا الوحدة تقيس min/`max المطلق لكل وزن من أوزان النموذج في كل تمريرة أمامية، فإنها ستُبطئ التدريب. لذا تذكّر بإيقاف تشغيلها بمجرد تلبية احتياجات التصحيح.