Diffusers documentation
xDiT
xDiT
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, PipeFusion, 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.

pip install xfuser
Bir Diffusers modelinin çıkarımını hızlandırmak için xDiT kullanmanın bir örneği aşağıdadır.
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 ö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:
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 50Desteklenen modeller
Diffusers modellerinin bir alt kümesi, Flux.1 ve Stable Diffusion 3 gibi, xDiT tarafından desteklenmektedir. Desteklenen en güncel modeller burada 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 bulunabilir.
Referans
USP: Uzun Bağlam Üretken Yapay Zeka için Birleşik Sıralı Paralellik Yaklaşımı
Update on GitHub