Buckets:
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.
xDiT'yi aşağıdaki komutu kullanarak yükleyebilirsiniz:
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 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 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ı
Xet Storage Details
- Size:
- 4.46 kB
- Xet hash:
- 64163ff62fc9014309d3c98a0c49ab58ae08a17ca526f546f2953672f0529877
Xet efficiently stores files, intelligently splitting them into unique chunks and accelerating uploads and downloads. More info.