Diffusers documentation

xDiT

Hugging Face's logo
Join the Hugging Face community

and get access to the augmented documentation experience

to get started

xDiT

xDiT هو محرك استدلال مصمم للنشر المتوازي واسع النطاق لنماذج التحويلات الانتشارية (DiTs). يوفر xDiT مجموعة من الأساليب المتوازية الفعّالة لنماذج الانتشار، بالإضافة إلى تسريع نواة GPU.

تدعم xDiT أربع طرق متوازية، وهي توازي التسلسل الموحّد وPipeFusion وتوازي CFG وتوازي البيانات. يمكن ضبط الطرق المتوازية الأربع في xDiT بطريقة هجينة، لتحسين أنماط الاتصال بما يناسب أفضل ما يمكن أجهزة الشبكة الأساسية.

تركز التحسينات المستقلة عن التوازي على تسريع أداء وحدة معالجة الرسوميات الواحدة. بالإضافة إلى الاستفادة من مكتبات تحسين الانتباه المعروفة، نعتمد على تقنيات تسريع الترجمة مثل torch.compile وonediff.

يُعرض ملخص xDiT على النحو التالي.

You can install xDiT using the following command:
pip install xfuser

فيما يلي مثال على استخدام xDiT لتسريع الاستدلال لنموذج Diffusers.

 import torch
 from diffusers import StableDiffusion3Pipeline

 from xfuser import xFuserArgs, xDiTParallel
 from xfuser.config import FlexibleArgumentParser
 from xfuser.core.distributed import get_world_group

 def main():
+    parser = FlexibleArgumentParser(description="xFuser Arguments")
+    args = xFuserArgs.add_cli_args(parser).parse_args()
+    engine_args = xFuserArgs.from_cli_args(args)
+    engine_config, input_config = engine_args.create_config()

     local_rank = get_world_group().local_rank
     pipe = StableDiffusion3Pipeline.from_pretrained(
         pretrained_model_name_or_path=engine_config.model_config.model,
         dtype=torch.float16,
     ).to(f"cuda:{local_rank}")
    
# do anything you want with pipeline here

+    pipe = xDiTParallel(pipe, engine_config, input_config)

     pipe(
         height=input_config.height,
         width=input_config.height,
         prompt=input_config.prompt,
         num_inference_steps=input_config.num_inference_steps,
         output_type=input_config.output_type,
         generator=torch.Generator(device="cuda").manual_seed(input_config.seed),  # or "mps", "xpu", "cpu"
     )

+    if input_config.output_type == "pil":
+        pipe.save("results", "stable_diffusion_3")

if __name__ == "__main__":
    main()

كما ترون، لا نحتاج سوى إلى استخدام xFuserArgs من xDiT للحصول على معاملات التهيئة، ثم تمرير هذه المعاملات مع كائن خط الأنابيب من مكتبة Diffusers إلى xDiTParallel لإكمال موازاة خط أنابيب محدد في Diffusers.

يمكن عرض معاملات وقت التشغيل الخاصة بـ xDiT في سطر الأوامر باستخدام -h، كما يمكنك الرجوع إلى هذا المثال للاستخدام لمزيد من التفاصيل.

يجب تشغيل xDiT باستخدام torchrun لدعم قدراته المتوازية عبر عدة عقد وشرائح GPU متعددة. على سبيل المثال، يمكن استخدام الأمر التالي للاستدلال المتوازي على 8 شرائح GPU:

torchrun --nproc_per_node=8 ./inference.py --model models/FLUX.1-dev --data_parallel_degree 2 --ulysses_degree 2 --ring_degree 2 --prompt "A snowy mountain" "A small dog" --num_inference_steps 50

النماذج المدعومة

تدعم xDiT مجموعة فرعية من نماذج Diffusers، مثل Flux.1 وStable Diffusion 3 وغيرها. يمكن العثور على أحدث النماذج المدعومة هنا.

معايرة

اختبرنا نماذج مختلفة على أجهزة متنوعة، وفيما يلي بعض بيانات الاختبار المرجعي.

Flux.1-schnell

Stable Diffusion 3

HunyuanDiT

يمكن العثور على مقاييس أداء أكثر تفصيلاً في صفحة github الخاصة بنا.

مرجع

مشروع xDiT

USP: نهج موحّد للتوازي التسلسلي لتوليد الذكاء الاصطناعي في السياقات الطويلة

بايب فوجن: توازٍ خطّي لأنابيب البقع المزاحة للاستدلال على نماذج محوّلات الانتشار

Update on GitHub