Transformers documentation
التوازي في الموترات للتدريب
التوازي في الموترات للتدريب
يقوم توازي الموترات (TP) بتقسيم مصفوفات الأوزان عمودياً أو صفوياً عبر وحدات معالجة الرسوميات (GPUs). تحتفظ كل وحدة معالجة برسومات بشريحة، وتحسب نتيجة جزئية، ثم تتزامن مع عملية اختزال شامل (all-reduce) لإنتاج المخرجات الكاملة.
يعتمد TP على التواصل المتكرر بين وحدات المعالجة الرسومية. ويعمل بشكل أفضل على الأجهزة التي تتميز بروابط سريعة داخل العقدة مثل NVLink.
┌─────────────────────────────┐
│ X (replicated) │
└────┬──────────┬─────────┬───┘
│ │ │
┌────▼───┐ ┌────▼───┐ ┌───▼────┐
│ ▓▓▓ W₀ │ │ ░░░ W₁ │ │ ███ W₂ │
│ X@W₀ │ │ X@W₁ │ │ X@W₂ │
└────┬───┘ └────┬───┘ └───┬────┘
└──────────┼─────────┘
Y₀+Y₁+Y₂
┌────────────────────────────┐
│ Y (full) │
└────────────────────────────┘يدعم Transformers تقسيم التوازي (TP) للبنى المعمارية التي تُعرّف حقل base_model_tp_plan في ملف الإعداد الخاص بها. تحقق من هذا الحقل أولاً لمعرفة ما إذا كان النموذج يدعم تقسيم التوازي الأصلي (TP).
from transformers import AutoConfig
config = AutoConfig.from_pretrained("Qwen/Qwen3-0.6B")
print(config.base_model_tp_plan is not None)
print(config.base_model_tp_plan)إذا كان النموذج يدعم TP، أنشئ DistributedConfig مع عدد الأجهزة في tp_size وقم بتمريره إلى from_pretrained(). يستخدم Transformers الخطة المحددة مسبقًا للنموذج، ويهيّك شبكة الأجهزة، ويقسّم الطبقات المدعومة نيابةً عنك.
يمكنك أيضًا تعيين tp_plan="auto" في DistributedConfig. عند إغفال tp_size، يُستنتج من WORLD_SIZE. تمرير tp_plan مباشرةً إلى from_pretrained() أصبح غير مستحسن وسيُزال في الإصدار v5.18.
لا تستخدم
device_mapمعdistributed_config. فهذان يتعارضان على مستوى تحميل الأوزان. حيث يضعdevice_mapالوحدات الكاملة على وحدات معالجة رسومات محددة، بينما يقوم توازي الموترات بتجزئة نفس المعاملات عبر جميع وحدات معالجة الرسومات.
import torch
from transformers import AutoModelForCausalLM, DistributedConfig
distributed_config = DistributedConfig(tp_size=4)
model = AutoModelForCausalLM.from_pretrained(
"Qwen/Qwen3-0.6B",
dtype=torch.bfloat16,
distributed_config=distributed_config,
)يكتشف Trainer خطة التوازي على مستوى المصفوفات، ويقرأ tp_size من النموذج، ثم ينشئ ParallelismConfig تلقائيًا.
ابدأ التدريب على عقدة واحدة مجهزة بأربع وحدات معالجة رسومية (GPU).
torchrun --nproc-per-node 4 train_tp.py
ParallelismConfig
مرّر ParallelismConfig صراحةً عند دمج TP مع تقنيات التوازي الأخرى مثل FSDP.
import torch
from accelerate import ParallelismConfig
from transformers import AutoModelForCausalLM, DistributedConfig, TrainingArguments
distributed_config = DistributedConfig(tp_size=4)
model = AutoModelForCausalLM.from_pretrained(
"Qwen/Qwen3-0.6B",
dtype=torch.bfloat16,
distributed_config=distributed_config,
)
parallelism_config = ParallelismConfig(tp_size=4)
args = TrainingArguments(
...,
parallelism_config=parallelism_config,
)مُكيّفات PEFT
يمكنك تحميل مُكيّفات PEFT على نموذج أساسي متوازٍ على مستوى المصفوفات (يتطلب peft >= 0.21.1). يتولى PEFT تقسيم أوزان المُكيّف. راجع PEFT لمعرفة كيفية إضافة المُكيّفات وتحميلها وتدريبها، بما في ذلك ملاحظات التدريب الموزّع.
الخطوات التالية
- اقرأ الفصل توازي الموترات من دليل المقياس الفائق لمزيد من التفاصيل حول كيفية عمله.
- اقرأ دليل الاستدلال بالتوازي على مستوى الموترات لمعرفة المزيد حول استراتيجيات التقسيم، وخطط TP اليدوية، وتفاصيل التنفيذ.