Diffusers documentation

分布式推理

Hugging Face's logo
Join the Hugging Face community

and get access to the augmented documentation experience

to get started

分布式推理

分布式推理将工作负载拆分到多个 GPU 上。它有助于在内存中容纳更大的模型,并同时处理更多提示。

Diffusers 支持四种策略。每种策略都有各自的指南,本页将帮助你选择其中一种。

选择策略

每种策略解决不同的问题,因此请根据限制你的资源选择一种。

策略拆分减少单个提示词的延迟最佳适用场景
数据并行副本之间的提示无,因为每个 GPU 都保存一份完整副本unchanged模型已经适配,并且您拥有许多提示
device_map跨设备的组件权重内存略差模型无法容纳,且互连速度较慢
上下文并行输入序列激活内存lower序列较长,例如高分辨率图像或视频
张量并行权重矩阵权重内存lower某个组件的权重无法容纳,且互连速度很快

一些实用建议:

  • 如果模型本身已经能够装入显存,且你有大量提示词,请使用数据并行。它在不改动模型的情况下,通过增加 GPU 数量来提升吞吐量,同时不会影响单条提示词的延迟。你可以使用 Accelerate 或 PyTorch Distributed 来配置。
  • 如果单个组件的权重无法容纳,请优先尝试张量并行,因为它能同时降低内存占用和延迟。张量并行在每个块边界处都需要通信,因此需要 NVLink 等高速互连。在 PCIe 上,每层的通信开销可能会超过其节省的计算量,此时 device_map 是更好的选择。device_map 还能处理各组件单独来看没问题、但整体规模过大的情况。
  • 如果问题出在激活值而非权重上,请使用上下文并行。这有助于处理长序列,例如包含大量帧的大型图像和视频。请从上下文并行指南中的基准测试中选择一个后端。
  • 如果权重和序列都过大,Diffusers 无法对同一模型同时应用张量并行和上下文并行。如果同时传入两个配置,ParallelConfig 会抛出错误,并且无法对已经并行化的模型第二次调用 enable_parallelism。

xDiT 和 ParaAttention 社区集成提供了它们自己的上下文并行实现。

Update on GitHub