Buckets:
| import"../chunks/DsnmJJEf.js";import{i as w,h as C,C as Z,H as l,a as i,E as b,s as I}from"../chunks/DdZvggmf.js";import{p as x,o as j,s as e,f as _,a as U,b as V,c as g,n as G}from"../chunks/BbekZcyp.js";const v='{"title":"xDiT","local":"xdit","sections":[{"title":"支持的模型","local":"支持的模型","sections":[],"depth":2},{"title":"基准测试","local":"基准测试","sections":[{"title":"Flux.1-schnell","local":"flux1-schnell","sections":[],"depth":3},{"title":"Stable Diffusion 3","local":"stable-diffusion-3","sections":[],"depth":3},{"title":"HunyuanDiT","local":"hunyuandit","sections":[],"depth":3}],"depth":2},{"title":"参考文献","local":"参考文献","sections":[],"depth":2}],"depth":1}';var B=g('<meta name="hf:doc:metadata"/>'),X=g(`<p></p> <!> <!> <p><a href="https://github.com/xdit-project/xDiT" rel="nofollow">xDiT</a> 是一个推理引擎,专为大规模并行部署扩散变换器(DiTs)而设计。xDiT 提供了一套用于扩散模型的高效并行方法,以及 GPU 内核加速。</p> <p>xDiT 支持四种并行方法,包括<a href="https://huggingface.co/papers/2405.07719" rel="nofollow">统一序列并行</a>、<a href="https://huggingface.co/papers/2405.14430" rel="nofollow">PipeFusion</a>、CFG 并行和数据并行。xDiT 中的这四种并行方法可以以混合方式配置,优化通信模式以最适合底层网络硬件。</p> <p>与并行化正交的优化侧重于加速单个 GPU 的性能。除了利用知名的注意力优化库外,我们还利用编译加速技术,如 torch.compile 和 onediff。</p> <p>xDiT 的概述如下所示。</p> <div class="flex justify-center"><img src="https://huggingface.co/datasets/xDiT/documentation-images/resolve/main/methods/xdit_overview.png"/></div> 您可以使用以下命令安装 xDiT: <!> <p>以下是一个使用 xDiT 加速 Diffusers 模型推理的示例。</p> <!> <p>如您所见,我们只需要使用 xDiT 中的 xFuserArgs 来获取配置参数,并将这些参数与来自 Diffusers 库的管道对象一起传递给 xDiTParallel,即可完成对 Diffusers 中特定管道的并行化。</p> <p>xDiT 运行时参数可以在命令行中使用 <code>-h</code> 查看,您可以参考此<a href="https://github.com/xdit-project/xDiT?tab=readme-ov-file#2-usage" rel="nofollow">使用</a>示例以获取更多详细信息。 | |
| ils。</p> <p>xDiT 需要使用 torchrun 启动,以支持其多节点、多 GPU 并行能力。例如,以下命令可用于 8-GPU 并行推理:</p> <!> <!> <p>在 xDiT 中支持 Diffusers 模型的一个子集,例如 Flux.1、Stable Diffusion 3 等。最新支持的模型可以在<a href="https://github.com/xdit-project/xDiT?tab=readme-ov-file#-supported-dits" rel="nofollow">这里</a>找到。</p> <!> <p>我们在不同机器上测试了各种模型,以下是一些基准数据。</p> <!> <div class="flex justify-center"><img src="https://huggingface.co/datasets/xDiT/documentation-images/resolve/main/performance/flux/Flux-2k-L40.png"/></div> <div class="flex justify-center"><img src="https://huggingface.co/datasets/xDiT/documentation-images/resolve/main/performance/flux/Flux-2K-A100.png"/></div> <!> <div class="flex justify-center"><img src="https://huggingface.co/datasets/xDiT/documentation-images/resolve/main/performance/sd3/L40-SD3.png"/></div> <div class="flex justify-center"><img src="https://huggingface.co/datasets/xDiT/documentation-images/resolve/main/performance/sd3/A100-SD3.png"/></div> <!> <div class="flex justify-center"><img src="https://huggingface.co/datasets/xDiT/documentation-images/resolve/main/performance/hunuyuandit/L40-HunyuanDiT.png"/></div> <div class="flex justify-center"><img src="https://huggingface.co/datasets/xDiT/documentation-images/resolve/main/performance/hunuyuandit/V100-HunyuanDiT.png"/></div> <div class="flex justify-center"><img src="https://huggingface.co/datasets/xDiT/documentation-images/resolve/main/performance/hunuyuandit/T4-HunyuanDiT.png"/></div> <p>更详细的性能指标可以在我们的 <a href="https://github.com/xdit-project/xDiT?tab=readme-ov-file#perf" rel="nofollow">GitHub 页面</a> 上找到。</p> <!> <p><a href="https://github.com/xdit-project/xDiT" rel="nofollow">xDiT-project</a></p> <p><a href="https://huggingface.co/papers/2405.07719" rel="nofollow">USP: A Unified Sequence Parallelism Approach for Long Context Generative AI</a></p> <p><a href="https://huggingface.co/papers/2405.14430" rel="nofollow">PipeFusion: Displaced Patch Pipeline Parallelism for Inference of Diffusion Transformer Models</a></p> <!> <p></p>`,1);function W(h,T){x(T,!1),j(()=>{new URLSearchParams(window.location.search).get("fw")}),w();var a=X();C("16vwjz4",m=>{var f=B();I(f,"content",v),U(m,f)});var t=e(_(a),2);Z(t,{containerStyle:"float: right; margin-left: 10px; display: inline-flex; position: relative; z-index: 10;"});var n=e(t,2);l(n,{title:"xDiT",local:"xdit",headingTag:"h1"});var s=e(n,12);i(s,{code:"cGlwJTIwaW5zdGFsbCUyMHhmdXNlcg==",highlighted:"pip install xfuser",lang:"bash",wrap:!1});var o=e(s,4);i(o,{code:"JTIwaW1wb3J0JTIwdG9yY2glMEElMjBmcm9tJTIwZGlmZnVzZXJzJTIwaW1wb3J0JTIwU3RhYmxlRGlmZnVzaW9uM1BpcGVsaW5lJTBBJTBBJTIwZnJvbSUyMHhmdXNlciUyMGltcG9ydCUyMHhGdXNlckFyZ3MlMkMlMjB4RGlUUGFyYWxsZWwlMEElMjBmcm9tJTIweGZ1c2VyLmNvbmZpZyUyMGltcG9ydCUyMEZsZXhpYmxlQXJndW1lbnRQYXJzZXIlMEElMjBmcm9tJTIweGZ1c2VyLmNvcmUuZGlzdHJpYnV0ZWQlMjBpbXBvcnQlMjBnZXRfd29ybGRfZ3JvdXAlMEElMEElMjBkZWYlMjBtYWluKCklM0ElMEElMkIlMjAlMjAlMjAlMjBwYXJzZXIlMjAlM0QlMjBGbGV4aWJsZUFyZ3VtZW50UGFyc2VyKGRlc2NyaXB0aW9uJTNEJTIyeEZ1c2VyJTIwQXJndW1lbnRzJTIyKSUwQSUyQiUyMCUyMCUyMCUyMGFyZ3MlMjAlM0QlMjB4RnVzZXJBcmdzLmFkZF9jbGlfYXJncyhwYXJzZXIpLnBhcnNlX2FyZ3MoKSUwQSUyQiUyMCUyMCUyMCUyMGVuZ2luZV9hcmdzJTIwJTNEJTIweEZ1c2VyQXJncy5mcm9tX2NsaV9hcmdzKGFyZ3MpJTBBJTJCJTIwJTIwJTIwJTIwZW5naW5lX2NvbmZpZyUyQyUyMGlucHV0X2NvbmZpZyUyMCUzRCUyMGVuZ2luZV9hcmdzLmNyZWF0ZV9jb25maWcoKSUwQSUwQSUyMCUyMCUyMCUyMCUyMGxvY2FsX3JhbmslMjAlM0QlMjBnZXRfd29ybGRfZ3JvdXAoKS5sb2NhbF9yYW5rJTBBJTIwJTIwJTIwJTIwJTIwcGlwZSUyMCUzRCUyMFN0YWJsZURpZmZ1c2lvbjNQaXBlbGluZS5mcm9tX3ByZXRyYWluZWQoJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwcHJldHJhaW5lZF9tb2RlbF9uYW1lX29yX3BhdGglM0RlbmdpbmVfY29uZmlnLm1vZGVsX2NvbmZpZy5tb2RlbCUyQyUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMHRvcmNoX2R0eXBlJTNEdG9yY2guZmxvYXQxNiUyQyUwQSUyMCUyMCUyMCUyMCUyMCkudG8oZiUyMmN1ZGElM0ElN0Jsb2NhbF9yYW5rJTdEJTIyKSUwQSUyMCUyMCUyMCUyMCUwQSUyMyUyMCVFNSU5QyVBOCVFOCVCRiU5OSVFOSU4NyU4QyVFNSVBRiVCOSVFNyVBRSVBMSVFOSU4MSU5MyVFOCVCRiU5QiVFOCVBMSU4QyVFNCVCQiVCQiVFNCVCRCU5NSVFNiU5MyU4RCVFNCVCRCU5QyUwQSUwQSUyQiUyMCUyMCUyMCUyMHBpcGUlMjAlM0QlMjB4RGlUUGFyYWxsZWwocGlwZSUyQyUyMGVuZ2luZV9jb25maWclMkMlMjBpbnB1dF9jb25maWcpJTBBJTBBJTIwJTIwJTIwJTIwJTIwcGlwZSglMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBoZWlnaHQlM0RpbnB1dF9jb25maWcuaGVpZ2h0JTJDJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwd2lkdGglM0RpbnB1dF9jb25maWcuaGVpZ2h0JTJDJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwcHJvbXB0JTNEaW5wdXRfY29uZmlnLnByb21wdCUyQyUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMG51bV9pbmZlcmVuY2Vfc3RlcHMlM0RpbnB1dF9jb25maWcubnVtX2luZmVyZW5jZV9zdGVwcyUyQyUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMG91dHB1dF90eXBlJTNEaW5wdXRfY29uZmlnLm91dHB1dF90eXBlJTJDJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwZ2VuZXJhdG9yJTNEdG9yY2guR2VuZXJhdG9yKGRldmljZSUzRCUyMmN1ZGElMjIpLm1hbnVhbF9zZWVkKGlucHV0X2NvbmZpZy5zZWVkKSUyQyUwQSUyMCUyMCUyMCUyMCUyMCklMEElMEElMkIlMjAlMjAlMjAlMjBpZiUyMGlucHV0X2NvbmZpZy5vdXRwdXRfdHlwZSUyMCUzRCUzRCUyMCUyMnBpbCUyMiUzQSUwQSUyQiUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMHBpcGUuc2F2ZSglMjJyZXN1bHRzJTIyJTJDJTIwJTIyc3RhYmxlX2RpZmZ1c2lvbl8zJTIyKSUwQSUwQWlmJTIwX19uYW1lX18lMjAlM0QlM0QlMjAlMjJfX21haW5fXyUyMiUzQSUwQSUyMCUyMCUyMCUyMG1haW4oKQ==",highlighted:` 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(): | |
| <span class="hljs-addition">+ parser = FlexibleArgumentParser(description="xFuser Arguments")</span> | |
| <span class="hljs-addition">+ args = xFuserArgs.add_cli_args(parser).parse_args()</span> | |
| <span class="hljs-addition">+ engine_args = xFuserArgs.from_cli_args(args)</span> | |
| <span class="hljs-addition">+ engine_config, input_config = engine_args.create_config()</span> | |
| 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}") | |
| # 在这里对管道进行任何操作 | |
| <span class="hljs-addition">+ pipe = xDiTParallel(pipe, engine_config, input_config)</span> | |
| 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), | |
| ) | |
| <span class="hljs-addition">+ if input_config.output_type == "pil":</span> | |
| <span class="hljs-addition">+ pipe.save("results", "stable_diffusion_3")</span> | |
| if __name__ == "__main__": | |
| main()`,lang:"diff",wrap:!1});var c=e(o,8);i(c,{code:"dG9yY2hydW4lMjAtLW5wcm9jX3Blcl9ub2RlJTNEOCUyMC4lMkZpbmZlcmVuY2UucHklMjAtLW1vZGVsJTIwbW9kZWxzJTJGRkxVWC4xLWRldiUyMC0tZGF0YV9wYXJhbGxlbF9kZWdyZWUlMjAyJTIwLS11bHlzc2VzX2RlZ3JlZSUyMDIlMjAtLXJpbmdfZGVncmVlJTIwMiUyMC0tcHJvbXB0JTIwJTIyQSUyMHNub3d5JTIwbW91bnRhaW4lMjIlMjAlMjJBJTIwc21hbGwlMjBkb2clMjIlMjAtLW51bV9pbmZlcmVuY2Vfc3RlcHMlMjA1MA==",highlighted:'torchrun --nproc_per_node=8 ./inference.py --model models/FLUX.1-dev --data_parallel_degree 2 --ulysses_degree 2 --ring_degree 2 --prompt <span class="hljs-string">"A snowy mountain"</span> <span class="hljs-string">"A small dog"</span> --num_inference_steps 50',lang:"bash",wrap:!1});var r=e(c,2);l(r,{title:"支持的模型",local:"支持的模型",headingTag:"h2"});var p=e(r,4);l(p,{title:"基准测试",local:"基准测试",headingTag:"h2"});var d=e(p,4);l(d,{title:"Flux.1-schnell",local:"flux1-schnell",headingTag:"h3"});var y=e(d,6);l(y,{title:"Stable Diffusion 3",local:"stable-diffusion-3",headingTag:"h3"});var u=e(y,6);l(u,{title:"HunyuanDiT",local:"hunyuandit",headingTag:"h3"});var M=e(u,10);l(M,{title:"参考文献",local:"参考文献",headingTag:"h2"});var J=e(M,8);b(J,{source:"https://github.com/huggingface/diffusers/blob/main/docs/source/zh/optimization/xdit.md"}),G(2),U(h,a),V()}export{W as component}; | |
Xet Storage Details
- Size:
- 10.5 kB
- Xet hash:
- f7479a4cabdc876cd409c7db07520d4d651746756df6ac24d22facc30bdf1d72
·
Xet efficiently stores files, intelligently splitting them into unique chunks and accelerating uploads and downloads. More info.