Transformers documentation

DDP

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

DDP

يحافظ DistributedDataParallel (DDP) على نسخة كاملة من النموذج على كل وحدة معالجة رسومية. تعالج كل وحدة معالجة رسومية جزءًا غير متداخل من البيانات عبر تمريرة أمامية وتمريرة خلفية. قبل خطوة المُحسِّن، يقوم all-reduce بمتوسط التدرجات عبر جميع وحدات المعالجة الرسومية بحيث تبقى كل نسخة من النموذج متطابقة. استخدم DDP عندما يتسع نموذجك على وحدة معالجة رسومية واحدة.

                         ┌─────────────────┐
                         │  training data  │
                         └────────┬────────┘
               ┌──────────────────┼──────────────────┐
               │ shard 0          │ shard 1          │ shard 2
               ▼                  ▼                  ▼
        ┌─────────────┐    ┌─────────────┐    ┌─────────────┐
        │   model     │    │   model     │    │   model     │
        │  (copy 0)   │    │  (copy 1)   │    │  (copy 2)   │
        │   GPU 0     │    │   GPU 1     │    │   GPU 2     │
        └──────┬──────┘    └──────┬──────┘    └──────┬──────┘
               │ grads            │ grads            │ grads
               └──────────────────┼──────────────────┘
                               all-reduce
                          (average gradients)
               ┌──────────────────┼──────────────────┐
               ▼                  ▼                  ▼
        ┌─────────────┐    ┌─────────────┐    ┌─────────────┐
        │  optimizer  │    │  optimizer  │    │  optimizer  │
        │    step     │    │    step     │    │    step     │
        └─────────────┘    └─────────────┘    └─────────────┘
          (identical)        (identical)        (identical)

تُفعَّل DDP تلقائيًا عند الإقلاع باستخدام مُطلق متعدد العمليات مثل Accelerate.

# 4 GPUs on one machine
accelerate launch --num_processes 4 train.py

تهيئة DDP

مرّر هذه TrainingArguments للتحكم في سلوك DDP.

  • gradient_accumulation_steps() يحدد متى يتم تنفيذ all-reduce. يتخطى Trainer تنفيذ all-reduce في خطوات التراكم الوسيطة وينفذه فقط في الدفعة الجزئية النهائية. على سبيل المثال، عند استخدام gradient_accumulation_steps=4، يتم تنفيذ all-reduce كل 4 عمليات تمرير عكسي.
  • ~TrainingArguments.ddp_find_unused_parameters يتتبع رسم autograd في نهاية تمرير الأمامي للبحث عن المعاملات التي لن تستقبل تدرجًا، ثم يعلّمها بأنها جاهزة حتى لا تعيق عملية all-reduce. لا تستخدمه مع ~TrainingArguments.gradient_checkpointing لأن فحص التدرجات يتخلص من التفعيلات الوسيطة ويعيد حسابها على الفور.
  • ~TrainingArguments.ddp_bucket_cap_mb هو حجم الدلو لتجميع التدرجات في عملية all-reduce واحدة خلال المرور العكسي. كلما زاد حجم الدلو، قلّت استدعاءات all-reduce وانخفضت تكلفة الإقلاع.
  • ~TrainingArguments.ddp_broadcast_buffers يزامن مخازن النموذج (مثل إحصاءات BatchNorm المتحركة) من rank 0 إلى جميع الـ ranks الأخرى في بداية كل تمريرة أمامية. عطّل هذا الخيار إذا كان نموذجك يستخدم LayerNorm فقط. لا تستخدمه مع ~TrainingArguments.gradient_checkpointing.
  • ~TrainingArguments.ddp_backend يحدد واجهة الاتصال. استخدم "nccl" لشرائح NVIDIA GPU (الافتراضي والأسرع)، و"gloo" للتدريب على المعالج أو تصحيح الأخطاء، و"xccl" أو "hccl" أو "cncl" للأجهزة الأخرى.
  • ddp_timeout() يحدد الحد الزمني لإتمام جميع العمليات والتشغيلات (all-reduce، broadcast). إذا توقف أحد العمليات، كما يحدث عند تحميل نموذج كبير ببطء، يرفع المهلة الزمنية خطأً بدلاً من الانسداد بشكل غير محدود.
from transformers import TrainingArguments

args = TrainingArguments(
    ...,
    gradient_accumulation_steps=4,
    ddp_backend="nccl",
    ddp_find_unused_parameters=False,
    ddp_bucket_cap_mb=25,
    ddp_broadcast_buffers=True,
    ddp_timeout=1800,
)

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

  • راجع FSDP لتدريب النماذج التي تكون كبيرة جدًا بحيث لا تتسع على وحدة معالجة رسومية واحدة.
  • راجع DeepSpeed لتحسين ZeRO وإزالة التحميل.
  • اقرأ الفصل التوازي في البيانات من دليل المقياس الفائق لمزيد من المعلومات حول كيفية عمل DDP.
Update on GitHub