Diffusers documentation

التوازي

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

and get access to the augmented documentation experience

to get started

التوازي

تساعد استراتيجيات التوازي في تسريع محولات الانتشار (diffusion transformers) من خلال توزيع العمليات الحسابية على عدة أجهزة، مما يتيح أوقات استدلال/تدريب أسرع. راجع دليل الاستدلال الموزّع لمعرفة المزيد.

ParallelConfig

فئة diffusers.ParallelConfig

< >

( context_parallel_config: diffusers.models._modeling_parallel.ContextParallelConfig | None = Nonetensor_parallel_config: diffusers.models._modeling_parallel.TensorParallelConfig | None = None_rank: int = None_world_size: int = None_device: device = None_mesh: DeviceMesh = None )

المعاملات

  • context_parallel_config (ContextParallelConfig، اختياري) — إعدادات موازاة السياق.
  • tensor_parallel_config (TensorParallelConfig، اختياري) — إعدادات التوازي على مستوى الموترات.

إعدادات لتطبيق أنواع مختلفة من التوازي.

ContextParallelConfig

فئة diffusers.ContextParallelConfig

< >

( ring_degree: int | None = Noneulysses_degree: int | None = Noneconvert_to_fp32: bool = Truerotate_method: typing.Literal['allgather', 'alltoall'] = 'allgather'mesh: typing.Optional[torch.distributed.device_mesh.DeviceMesh] = Noneulysses_anything: bool = Falsering_anything: bool = False_rank: int = None_world_size: int = None_device: device = None_mesh: DeviceMesh = None_flattened_mesh: DeviceMesh = None_ring_mesh: DeviceMesh = None_ulysses_mesh: DeviceMesh = None_ring_local_rank: int = None_ulysses_local_rank: int = None )

المعاملات

  • ring_degree (int, اختياري، القيمة الافتراضية 1) — عدد الأجهزة المستخدمة لـ Ring Attention. يتم تقسيم التسلسل عبر الأجهزة. تحسب كل جهاز الانتباه بين Q المحلي لديها وقطع KV التي تُمرَّر تسلسليًا حول الحلقة. ذاكرة أقل (تحتفظ فقط بـ 1/N من KV في كل مرة)، وتُدمج الحساب مع الاتصال، لكنها تتطلب N تكرارات لرؤية جميع الرموز. الأفضل للتسلسلات الطويلة مع ذاكرة/عرض نطاق محدود. عدد الأجهزة المستخدمة لـ ring attention داخل منطقة التوازي السياقي. يجب أن يكون قاسمًا لعدد الأجهزة الإجمالي في شبكة التوازي السياقي.
  • ulysses_degree (int، اختياري، القيمة الافتراضية 1) — عدد الأجهزة المستخدمة لـ Ulysses Attention. يتم تقسيم التسلسل عبر الأجهزة. تحسب كل جهاز QKV المحلي، ثم تجمع جميع مقاطع KV عبر all-gather لحساب الانتباه الكامل في مسار واحد. يتطلب ذاكرة أعلى (تخزين جميع KV) واتصالات all-to-all عالية النطاق الترددي، لكنه يوفر زمن استجابة أقل. يُعد الخيار الأفضل للتسلسلات المتوسطة مع نطاق ترددي جيد للتوصيل بين الأجهزة.
  • convert_to_fp32 (bool، اختياري، القيمة الافتراضية True) — ما إذا كان سيتم تحويل المخرجات و LSE إلى float32 من أجل الاستقرار العددي في ring attention.
  • rotate_method (str، اختياري، القيمة الافتراضية "allgather") — الطريقة المستخدمة لتدوير حالات المفتاح/القيمة عبر الأجهزة في ring attention. حاليًا، يتم دعم "allgather" فقط.
  • ulysses_anything (bool، اختياري، القيمة الافتراضية False) — ما إذا كان سيتم تفعيل وضع “Ulysses Anything” الذي يدعم أطوال تسلسلات وعدد رؤوس عشوائية لا تقبل القسمة بالتساوي على ulysses_degree. عند التفعيل، يجب أن يكون ulysses_degree أكبر من 1 وأن يكون ring_degree مساوياً لـ 1.
  • ring_anything (bool، اختياري، القيمة الافتراضية False) — ما إذا كان سيتم تفعيل وضع “Ring Anything” الذي يدعم أطوال تسلسلات غير محددة. عند التفعيل، يجب أن يكون ring_degree أكبر من 1 وأن يكون ulysses_degree مساوياً لـ 1.
  • mesh (torch.distributed.device_mesh.DeviceMesh، اختياري) — شبكة أجهزة مخصصة لاستخدامها في توازي السياق. إذا تم تقديمها، فسيتم استخدام هذه الشبكة بدلاً من إنشاء شبكة جديدة. وهذا مفيد عند دمج توازي السياق مع استراتيجيات توازي أخرى (مثل FSDP، وتوازي الموترات) التي تتشارك نفس شبكة الأجهزة. يجب أن تحتوي الشبكة على بُعدين هما “ring” و “ulysses”. استخدم الحجم 1 للأبعاد غير المستخدمة (على سبيل المثال، mesh_shape=(2, 1, 4) مع mesh_dim_names=("ring", "ulysses", "fsdp") لتوازي الحلقة فقط مع FSDP).

إعدادات للتوازي السياقي.

diffusers.hooks.apply_context_parallel

< >

( module: Moduleparallel_config: ContextParallelConfigplan: dict )

تطبيق توازٍ سياقي على نموذج.

TensorParallelConfig

فئة diffusers.TensorParallelConfig

< >

( tp_degree: int = 1mesh: typing.Optional[torch.distributed.device_mesh.DeviceMesh] = None_rank: int = None_world_size: int = None_device: device = None_mesh: DeviceMesh = None_tp_degree: int = None )

المعاملات

  • tp_degree (int، القيمة الافتراضية 1) — عدد الأجهزة التي سيتم تقسيم النموذج عليها. يجب أن يكون قاسماً لعدد رؤوس الانتباه (والأبعاد المخفية لشبكة FFN) في النموذج المُوازى.
  • mesh (torch.distributed.device_mesh.DeviceMesh، اختياري) — شبكة أجهزة مخصصة للاستخدام. إذا تم تقديمها، يُستنتج tp_degree من mesh.size() ويُتجاهل الحُجّة. مفيد عند دمج TP مع استراتيجيات توازٍ أخرى (مثل CP) التي تتشارك نفس الشبكة.

إعدادات للتوازي على مستوى الموترات.

يقوم توازي الموترات بتقسيم مصفوفات الأوزان (عمودياً وصفوفياً) عبر الأجهزة. يحسب كل جهاز نتيجة جزئية؛ ثم يعيد AllReduce/AllGather عند حدود الطبقات بناء المخرجات الكاملة. يستخدم torch.distributed.tensor.parallelize_module مع أنماط التقسيم ColwiseParallel / RowwiseParallel. أنواع الأجهزة المدعومة هي "cuda"، "neuron" و"tpu".

diffusers.hooks.apply_tensor_parallel

< >

( model: Moduleconfig: TensorParallelConfigtp_plan: dictweights_already_sharded: bool = False )

المعاملات

  • model (torch.nn.Module) — النموذج الذي سيتم تقسيمه في مكانه.
  • config (TensorParallelConfig) — إعدادات التوازي على مستوى المصفوفات. يجب أن تكون شبكة الأجهزة الخاصة بها مُهيأة مسبقًا باستخدام config.setup(...).
  • tp_plan (dict) — تعيين مسطّح من أنماط أسماء الوحدات إلى نمط "colwise"/"rowwise" (أو نسخة مضغوطة)، وهو عادةً _tp_plan الخاص بالنموذج.
  • weights_already_sharded (bool، القيمة الافتراضية False) — ما إذا كانت المعاملات المخططة هي بالفعل شتات DTensor، كما هي بعد تحميل from_pretrained بالتدفق. إذا كانت True، يتم تسجيل خطافات الأمامية فقط. يتم تمرير هذا بشكل صريح بدلاً من اكتشافه، لأن معاملًا مخططًا مفقودًا من نقطة الفحص سيظل متجهًا افتراضيًا (meta tensor) وسيجعل الاكتشاف يقول “غير مجزأ” لنموذج هو في الواقع مجزأ جزئيًا.

تطبيق توازي الموترات على نموذج من _tp_plan المسطّح الخاص به.

Update on GitHub