# xDiT

[xDiT](https://github.com/xdit-project/xDiT), Diffusion Transformer'ların (DiT) büyük ölçekli paralel dağıtımı için tasarlanmış bir çıkarım motorudur. xDiT, Diffusion Modelleri için verimli paralel yaklaşımların yanı sıra GPU çekirdek hızlandırmaları da sunar.

xDiT'te desteklenen dört paralel yöntem arasında [Unified Sequence Parallelism](https://huggingface.co/papers/2405.07719), [PipeFusion](https://huggingface.co/papers/2405.14430), CFG paralelliği ve veri paralelliği yer alır. xDiT'teki bu dört paralel yöntem hibrit bir şekilde yapılandırılabilir ve altta yatan ağ donanımına en uygun şekilde iletişim kalıpları optimize edilebilir.

Paralelleştirmeye dik olan optimizasyon, tek GPU performansını hızlandırmaya odaklanır. Bilinen Dikkat (Attention) optimizasyon kütüphanelerini kullanmanın yanı sıra, torch.compile ve onediff gibi derleme hızlandırma teknolojilerinden de yararlanıyoruz.

xDiT'nin genel görünümü aşağıda gösterilmektedir.

    

xDiT'yi aşağıdaki komutu kullanarak yükleyebilirsiniz:

```bash
pip install xfuser
```

Bir Diffusers modelinin çıkarımını hızlandırmak için xDiT kullanmanın bir örneği aşağıdadır.

```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()

```

Gördüğünüz gibi, yapılandırma parametrelerini almak için yalnızca xDiT'ten xFuserArgs'ı kullanmamız ve bu parametreleri Diffusers kütüphanesinden gelen pipeline nesnesiyle birlikte xDiTParallel'e iletmemiz yeterlidir; bu sayede Diffusers'ta belirli bir pipeline'ın paralelleştirilmesi tamamlanır.

xDiT çalışma zamanı parametreleri, `-h` kullanılarak komut satırında görüntülenebilir ve daha fazla ayrıntı için bu [kullanım](https://github.com/xdit-project/xDiT?tab=readme-ov-file#2-usage) örneğine başvurabilirsiniz.

xDiT, çoklu düğüm ve çoklu GPU paralel yeteneklerini desteklemek için torchrun ile başlatılmalıdır. Örneğin, 8 GPU'lu paralel çıkarım için aşağıdaki komut kullanılabilir:

```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
```

## Desteklenen modeller

Diffusers modellerinin bir alt kümesi, Flux.1 ve Stable Diffusion 3 gibi, xDiT tarafından desteklenmektedir. Desteklenen en güncel modeller [burada](https://github.com/xdit-project/xDiT?tab=readme-ov-file#-supported-dits) bulunabilir.

## Karma
Çeşitli makinelerde farklı modelleri test ettik ve işte bazı referans ölçüm verileri.

### Flux.1-schnell

    

    

### Stable Diffusion 3

    

    

### HunyuanDiT

    

    

    

Daha ayrıntılı performans metrikleri [github sayfamızda](https://github.com/xdit-project/xDiT?tab=readme-ov-file#perf) bulunabilir.

## Referans

[xDiT-project](https://github.com/xdit-project/xDiT)

[USP: Uzun Bağlam Üretken Yapay Zeka için Birleşik Sıralı Paralellik Yaklaşımı](https://huggingface.co/papers/2405.07719)

[PipeFusion: Diffusion Transformer Modellerinin Çıkarımı İçin Yer Değiştirmiş Yama Boru Hattı Paralelliği](https://huggingface.co/papers/2405.14430)

