Diffusers 文件

xDiT

Hugging Face's logo
加入 Hugging Face 社群

並獲得增強的文件體驗

開始使用

xDiT

xDiT 是一個專為大規模並行部署擴散變換器(Diffusion Transformers, DiTs)而設計的推理引擎。xDiT 提供了一套針對擴散模型的高效並行方法,以及 GPU 核心加速功能。

xDiT 支援四種並行方法,包括 統一序列並行(Unified Sequence Parallelism)PipeFusion、CFG 並行和資料並行。xDiT 中的四種並行方法可以混合配置,以最佳化通訊模式,從而最好地適應底層網路硬體。

與並行化正交的最佳化專注於加速單 GPU 效能。除了利用著名的注意力(Attention)最佳化庫外,我們還利用了 torch.compile 和 onediff 等編譯加速技術。

xDiT 的概覽如下所示。

你可以使用以下命令安裝 xDiT
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,
         torch_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),
     )

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

if __name__ == "__main__":
    main()

如你所見,我們只需使用 xDiT 的 xFuserArgs 來獲取配置引數,並將這些引數與 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-project

USP: 一種用於長上下文生成式 AI 的統一序列並行方法

PipeFusion:用於擴散變換器模型推理的位移補丁管道並行

< > 在 GitHub 上更新

© . This site is unofficial and not affiliated with Hugging Face, Inc.