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

التوازي في الموترات للتدريب

يقوم توازي الموترات (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 لمعرفة كيفية إضافة المُكيّفات وتحميلها وتدريبها، بما في ذلك ملاحظات التدريب الموزّع.

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

Update on GitHub