Buckets:

mishig's picture
|
download
raw
5.84 kB

xDiT

xDiT — это движок инференса, разработанный для крупномасштабного параллельного развёртывания Diffusion Transformers (DiTs). xDiT предлагает набор эффективных параллельных подходов для Diffusion Models, а также ускорения на уровне 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,
         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, а для получения подробной информации обратитесь к этому примеру использования.

Для поддержки многоузловой и много-GPU параллельной работы xDiT необходимо запускать с помощью torchrun. Например, для параллельного вывода на 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

Поддерживаемые модели

Поддерживается часть моделей Diffusers в xDiT, например Flux.1, Stable Diffusion 3 и другие. Список актуальных поддерживаемых моделей доступен здесь.

Бенчмарк

Мы протестировали различные модели на разных машинах, и ниже приведены некоторые данные бенчмарков.

Flux.1-schnell

Stable Diffusion 3

HunyuanDiT

Более подробные метрики производительности можно найти на нашей странице GitHub.

Справочник

xDiT-project

USP: единый подход к параллелизму последовательностей для генеративного ИИ с длинным контекстом

PipeFusion: смещённый патч-пайплайн параллелизм для инференса моделей диффузионных трансформеров

Xet Storage Details

Size:
5.84 kB
·
Xet hash:
445a4cb6bfede09c89df37877ebdddacb14f50f5b077e36e1f633ee6e4f19441

Xet efficiently stores files, intelligently splitting them into unique chunks and accelerating uploads and downloads. More info.