# xDiT

[xDiT](https://github.com/xdit-project/xDiT) هو محرك استدلال مصمم للنشر المتوازي واسع النطاق لنماذج التحويلات الانتشارية (DiTs). يوفر xDiT مجموعة من الأساليب المتوازية الفعّالة لنماذج الانتشار، بالإضافة إلى تسريع نواة GPU.

تدعم xDiT أربع طرق متوازية، وهي [توازي التسلسل الموحّد](https://huggingface.co/papers/2405.07719) و[PipeFusion](https://huggingface.co/papers/2405.14430) وتوازي CFG وتوازي البيانات. يمكن ضبط الطرق المتوازية الأربع في xDiT بطريقة هجينة، لتحسين أنماط الاتصال بما يناسب أفضل ما يمكن أجهزة الشبكة الأساسية.

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

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

    

يمكنك تثبيت xDiT باستخدام الأمر التالي:

```bash
pip install xfuser
```

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

```diff
 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`، كما يمكنك الرجوع إلى هذا المثال [للاستخدام](https://github.com/xdit-project/xDiT?tab=readme-ov-file#2-usage) لمزيد من التفاصيل.

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

```bash
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 وغيرها. يمكن العثور على أحدث النماذج المدعومة [هنا](https://github.com/xdit-project/xDiT?tab=readme-ov-file#-supported-dits).

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

### Flux.1-schnell

    

    

### Stable Diffusion 3

    

    

### HunyuanDiT

    

    

    

يمكن العثور على مقاييس أداء أكثر تفصيلاً في [صفحة github](https://github.com/xdit-project/xDiT?tab=readme-ov-file#perf) الخاصة بنا.

## مرجع

[مشروع xDiT](https://github.com/xdit-project/xDiT)

[USP: نهج موحّد للتوازي التسلسلي لتوليد الذكاء الاصطناعي في السياقات الطويلة](https://huggingface.co/papers/2405.07719)

[بايب فوجن: توازٍ خطّي لأنابيب البقع المزاحة للاستدلال على نماذج محوّلات الانتشار](https://huggingface.co/papers/2405.14430)

