Transformers documentation

التدريب بدقة مختلطة

You are viewing main version, which requires installation from source. If you'd like regular pip install, checkout the latest stable version (v5.22.1).
Hugging Face's logo
Join the Hugging Face community

and get access to the augmented documentation experience

to get started

التدريب بدقة مختلطة

تخزن عملية التدريب بدقة كاملة (fp32) وتُحسب جميع العمليات باستخدام 32 بت. أما الدقة المختلطة فتستخدم fp16 أو bf16 للعمليات الحسابية المكثفة في المرورين الأمامي والخلفي، مع الاحتفاظ بنسخة من الأوزان بدقة fp32 لتحديث المُحسِّن. يؤدي ذلك إلى تسريع الحسابات، وتقليل الذاكرة المخصصة للأوزان والتفعيلات، والحفاظ على استقرار التدريب.

┌─────────────────────────────────────────────────────┐
│           MIXED PRECISION TRAINING LOOP             │
│                                                     │
│  fp32 master weights ──cast──▶ fp16/bf16            │
│         ▲                          │                │
│         │                    FORWARD (autocast)     │
│         │                    matmuls in fp16/bf16   │
│         │                    reductions stay fp32   │
│         │                          │ loss           │
│         │                    LOSS SCALE ×S  ──fp16  │
│         │                          │                │
│         │                    BACKWARD               │
│         │                    grads in fp16/bf16     │
│         │                          │                │
│         │                    UNSCALE ÷S    ──fp16   │
│         │                    check inf/nan          │
│         │                    cast grads → fp32      │
│         └────────────────────────── optimizer.step  │
└─────────────────────────────────────────────────────┘

اضبط bf16() أو fp16() على True لتفعيل التدريب بدقة مختلطة. كلاهما من الأنواع ذات 16 بت، لكن bf16 يتشارك نطاق الأسس نفسه مع fp32، لذا نادراً ما يحدث تجاوز للحدود. استخدم bf16 على وحدات معالجة الرسوميات من Ampere أو أحدث (A100، H100)، ولجأ إلى fp16 على الأجهزة الأقدم مثل V100 أو T4.

حمّل النموذج بدقة fp32، وإلا أصبح autocast بلا فائدة. فالتحميل بدقة bf16 أو fp16 لا يترك نسخة رئيسية بدقة fp32 يمكن لمُحسِّن التدريب (optimizer) التحديث منها.

from transformers import TrainingArguments

args = TrainingArguments(..., bf16=True)
args = TrainingArguments(..., fp16=True)

إذا كان نموذجك مستقرًا رقميًا في bf16/fp16، يمكنك تجاوز الدقة المختلطة بالكامل وتحميل النموذج وتدريبه مباشرةً في bf16/fp16. وهذا يتجنب إنشاء نسخة من الأوزان بدقة fp32 في الذاكرة.

tf32

tf32 هو وضع حساب على معالجات Ampere الرسومية يستخدم مانتيسا من 10 بتات لعمليات ضرب المصفوفات بدلاً من 23 بتاً. يمكن أن يمنحك هذا تسريعاً، خاصةً عند اقترانه مع bf16/fp16. يفعّل PyTorch وضع tf32 لعمليات ضرب المصفوفات افتراضياً على معالجات Ampere الرسومية والأحدث منها، لكن ضبطه صراحةً في TrainingArguments يضمن تفعيله بغضّ النظر عن إصدار PyTorch أو الإعدادات الافتراضية للبيئة.

from transformers import TrainingArguments

args = TrainingArguments(..., bf16=True, tf32=True)

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

  • اطّلع على دليل Kernels لمعرفة كيفية تسريع التدريب باستخدام نواة مدمجة مخصصة.
  • اطّلع على دليل torch.compile لمعرفة كيفية تجميع المسارين الأمامي والخلفي لزيادة الإنتاجية.
Update on GitHub