资讯动态

diffusers 如何用 accelerate 在多 GPU 上分发提示词做数据并行推理

发布时间:2026/9/11 17:51:12 来源:尧图企业网站定制
diffusers 如何用 accelerate 在多 GPU 上分发提示词做数据并行推理【免费下载链接】diffusers Diffusers: State-of-the-art diffusion models for image, video, and audio generation in PyTorch.项目地址: https://gitcode.com/GitHub_Trending/di/diffusers你手上有一批提示词prompts要跑同一个扩散管线模型本身已经能放进单卡显存但逐条串行处理太慢。用 Diffusers 搭配 Accelerate 做数据并行推理可以解决这个问题每张 GPU 各加载一份完整的DiffusionPipeline副本Accelerate 自动把提示词列表切分到各个 GPU 进程每个进程处理自己那份提示词。结果是总吞吐随 GPU 数量提升单条提示词的延迟不变。以下内容依据仓库中的 分布式推理文档 和 安装文档 整理。什么情况下用数据并行分布式推理文档在 Choosing a strategy 小节给出了一张策略对照表。Accelerate / DDP 这一行的定位是维度文档中的说明切分对象prompts across replicas把提示词切给各副本减少的开销nothing — each device holds a full copy每张卡持有完整模型副本不减少显存占用单条提示词延迟unchanged不变适用场景the model already fits and you have many prompts模型已能放进单卡、且提示词量大文档同时给出实践建议如果你追求的是大量提示词下的吞吐且模型已经放得下就用数据并行。它是这些策略中唯一不改动模型就能让吞吐线性扩展的方式且不影响单条提示词的延迟。如果你的问题是模型放不下单卡这条路不适用应查看同一文档中的device_map、Context parallelism 或 Tensor parallelism 小节——它们解决的是显存装不下的问题与本文目标不同。准备环境文档示例在多卡 CUDA 环境上运行accelerate launch --num_processes2即使用 2 张 GPU。先安装 diffusers 与 transformers再安装 accelerateuv pip install diffusers[torch] transformers uv pip install accelerate这两条命令分别来自 安装文档pip 安装选项和分布式推理文档的 Accelerate 小节。编写分布式推理脚本脚本包含三个关键点均按文档 Accelerate 小节的说明实现初始化accelerate.PartialState它负责创建分布式环境管理进程管理、设备分配与进程协调process management, device control and distribution, and process coordination。你不需要手动计算 rank 或 world_size。把 pipeline 移到distributed_state.device这一步为每个进程分配一块 GPU即pipeline.to(distributed_state.device)。用split_between_processes分发提示词把它作为上下文管理器使用Accelerate 会自动按进程数切分提示词列表with块内的prompt就是当前进程分到的那一份。文档中用distributed_state.process_index给每个进程的结果文件命名。按文档示例拼出的完整脚本如下模型 ID 与提示词均取自文档示例实际使用时换成你自己的模型和提示词列表import torch from accelerate import PartialState from diffusers import DiffusionPipeline pipeline DiffusionPipeline.from_pretrained( Qwen/Qwen-Image, dtypetorch.float16 ) distributed_state PartialState() pipeline.to(distributed_state.device) with distributed_state.split_between_processes([a dog, a cat]) as prompt: result pipeline(prompt).images[0] result.save(fresult_{distributed_state.process_index}.png)注意split_between_processes的入参就是完整提示词列表。文档示例传入 2 条提示词配合--num_processes2运行时每个进程分到 1 条。用 accelerate launch 启动把脚本保存为run_distributed.py文档启动命令中使用的文件名然后执行accelerate launch run_distributed.py --num_processes2文档说明--num_processes参数用于设置要使用的 GPU 数量。如果你的脚本用了别的文件名命令中的run_distributed.py相应替换即可。确认结果文档代码中每个进程把生成的图片保存为result_{process_index}.png。以上面 2 进程、2 条提示词的示例运行后预期产物是result_0.png和result_1.png分别由 0 号和 1 号进程写出——检查这两个文件即是对应的文档示例输出。进程数增多时同理每个进程各产出自己编号命名的文件。替代路径不用 accelerate 的 DDP 写法同一文档的 PyTorch Distributed 小节给出等价的数据并行示例手动init_process_group(nccl, rankrank, world_sizeworld_size)建进程组用mp.spawn派生进程每个进程处理不同提示词启动命令为torchrun --nproc_per_node2 run_distributed.py如果你不想引入 accelerate 依赖、想自己控制进程组初始化可以参考该小节两条路径的并行方式相同模型全量复制到每张卡、按提示词切分负载。边界与限制数据并行不降低单卡显存占用每张卡都持有完整模型副本Best when 的前提是模型已经放得下。单条提示词延迟保持不变提升的是总吞吐不是单图速度。文档中其余策略device_map、Context parallelism、Tensor parallelism面向模型装不下的场景不要与数据并行混用在同一条推理链路上选型判断以文档 Choosing a strategy 小节的对照表为准。【免费下载链接】diffusers Diffusers: State-of-the-art diffusion models for image, video, and audio generation in PyTorch.项目地址: https://gitcode.com/GitHub_Trending/di/diffusers创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价