Transformers documentation
DDP
ابدأ الآن
الفئات الأساسية
النماذج
المعالجات المسبقة
الاستدلال
واجهة برمجة التطبيقات Pipeline
توليد واجهة برمجة التطبيقات
التحسين
التحدث مع النماذج
التقديم
التدريب
الأجهزة
التكميم
التكاملات مع النظام البيئي
الموارد
واجهة برمجة التطبيقات
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).
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.