Buckets:
| # xDiT | |
| [xDiT](https://github.com/xdit-project/xDiT) es un motor de inferencia diseñado para la implementación paralela a gran escala de Diffusion Transformers (DiTs). xDiT ofrece un conjunto de enfoques paralelos eficientes para Diffusion Models, así como aceleraciones de kernels de GPU. | |
| xDiT admite cuatro métodos paralelos, entre ellos [Unified Sequence Parallelism](https://huggingface.co/papers/2405.07719), [PipeFusion](https://huggingface.co/papers/2405.14430), el paralelismo CFG y el paralelismo de datos. Los cuatro métodos paralelos de xDiT se pueden configurar de forma híbrida, optimizando los patrones de comunicación para adaptarse mejor al hardware de red subyacente. | |
| La optimización ortogonal a la paralelización se centra en acelerar el rendimiento de una sola GPU. Además de utilizar bibliotecas de optimización de Atención bien conocidas, aprovechamos tecnologías de aceleración por compilación como torch.compile y onediff. | |
| A continuación se muestra un resumen de xDiT. | |
| Puede instalar xDiT usando el siguiente comando: | |
| ```bash | |
| pip install xfuser | |
| ``` | |
| Aquí hay un ejemplo de cómo usar xDiT para acelerar la inferencia de un modelo de Diffusers. | |
| ```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() | |
| ``` | |
| Como puede ver, solo necesitamos usar xFuserArgs de xDiT para obtener los parámetros de configuración y pasar estos parámetros junto con el objeto de pipeline de la biblioteca Diffusers a xDiTParallel para completar la paralelización de un pipeline específico en Diffusers. | |
| Los parámetros de tiempo de ejecución de xDiT se pueden ver en la línea de comandos usando `-h`, y puedes consultar este ejemplo de [uso](https://github.com/xdit-project/xDiT?tab=readme-ov-file#2-usage) para más detalles. | |
| xDiT debe iniciarse usando torchrun para soportar sus capacidades de paralelismo multinodo y multigpu. Por ejemplo, el siguiente comando puede usarse para inferencia paralela en 8 GPUs: | |
| ```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 | |
| ``` | |
| ## Modelos compatibles | |
| Un subconjunto de los modelos de Diffusers es compatible con xDiT, como Flux.1, Stable Diffusion 3, etc. Los modelos más recientes compatibles se pueden encontrar [aquí](https://github.com/xdit-project/xDiT?tab=readme-ov-file#-supported-dits). | |
| ## Benchmark | |
| Probamos diferentes modelos en varias máquinas y aquí hay algunos de los datos de las pruebas de rendimiento. | |
| ### Flux.1-schnell | |
| ### Stable Diffusion 3 | |
| ### HunyuanDiT | |
| Se pueden encontrar métricas de rendimiento más detalladas en nuestra [página de GitHub](https://github.com/xdit-project/xDiT?tab=readme-ov-file#perf). | |
| ## Referencia | |
| [xDiT-project](https://github.com/xdit-project/xDiT) | |
| [USP: un enfoque unificado de paralelismo de secuencias para la IA generativa de contexto largo](https://huggingface.co/papers/2405.07719) | |
| [PipeFusion: Paralelismo de pipeline de parches desplazados para la inferencia de modelos de transformadores de difusión](https://huggingface.co/papers/2405.14430) | |
Xet Storage Details
- Size:
- 4.43 kB
- Xet hash:
- d6563968fc2ffc9180f448139c6cc20f21d72bd6aaa536f069a3af72a83e5017
·
Xet efficiently stores files, intelligently splitting them into unique chunks and accelerating uploads and downloads. More info.