Buckets:
| # 基本性能 | |
| 扩散(Diffusion)是一种计算开销较大的随机过程。在获得期望的输出之前,您可能需要多次运行 [DiffusionPipeline](/docs/diffusers/v0.43.0/zh/api/pipelines/overview#diffusers.DiffusionPipeline)。因此,仔细平衡生成速度和内存使用量以加快迭代速度至关重要, | |
| 本指南推荐了一些使用 [DiffusionPipeline](/docs/diffusers/v0.43.0/zh/api/pipelines/overview#diffusers.DiffusionPipeline) 时的基础性能技巧。如需更详细的性能指南,请参阅推理优化部分的文档,例如 [Accelerate 推理](./optimization/fp16) 或 [减少内存使用](./optimization/memory)。 | |
| ## 内存使用 | |
| 减少内存占用可以间接加快生成速度,并有助于模型适配设备。 | |
| [enable_model_cpu_offload()](/docs/diffusers/v0.43.0/zh/api/pipelines/overview#diffusers.DiffusionPipeline.enable_model_cpu_offload) 方法会在模型未使用时将其移至 CPU,以节省 GPU 内存。 | |
| ```py | |
| import torch | |
| from diffusers import DiffusionPipeline | |
| pipeline = DiffusionPipeline.from_pretrained( | |
| "stabilityai/stable-diffusion-xl-base-1.0", | |
| dtype=torch.bfloat16, | |
| device_map="cuda" # or "mps", "xpu", "cpu" | |
| ) | |
| pipeline.enable_model_cpu_offload() | |
| prompt = """ | |
| cinematic film still of a cat sipping a margarita in a pool in Palm Springs, California | |
| highly detailed, high budget hollywood movie, cinemascope, moody, epic, gorgeous, film grain | |
| """ | |
| pipeline(prompt).images[0] | |
| print(f"Max memory reserved: {torch.cuda.max_memory_allocated() / 1024**3:.2f} GB") | |
| ``` | |
| ## 推理速度 | |
| 去噪是扩散过程中计算量最大的环节。优化该过程的方法可以加速推理速度。请尝试以下方法以提升速度。 | |
| - 添加 `device_map="cuda"` 可将流水线放置在 GPU 上。将模型放置在 GPU 等加速器上可以加快处理速度,因为它能够并行执行计算。 | |
| - 设置 `dtype=torch.bfloat16` 以半精度执行流水线。降低数据类型精度可提高速度,因为在较低精度下执行计算所需的时间更短。 | |
| ```py | |
| import torch | |
| import time | |
| from diffusers import DiffusionPipeline, DPMSolverMultistepScheduler | |
| pipeline = DiffusionPipeline.from_pretrained( | |
| "stabilityai/stable-diffusion-xl-base-1.0", | |
| dtype=torch.bfloat16, | |
| device_map="cuda | |
| ) | |
| ``` | |
| - 使用更快的调度器,例如 [DPMSolverMultistepScheduler](/docs/diffusers/v0.43.0/zh/api/schedulers/multistep_dpm_solver#diffusers.DPMSolverMultistepScheduler),它仅需约 20-25 步。 | |
| - 将 `num_inference_steps` 设置为更低的值。减少推理步数会降低整体计算量。但这样做可能会导致生成质量下降。 | |
| ```py | |
| pipeline.scheduler = DPMSolverMultistepScheduler.from_config(pipeline.scheduler.config) | |
| prompt = """ | |
| cinematic film still of a cat sipping a margarita in a pool in Palm Springs, California | |
| highly detailed, high budget hollywood movie, cinemascope, moody, epic, gorgeous, film grain | |
| """ | |
| start_time = time.perf_counter() | |
| image = pipeline(prompt).images[0] | |
| end_time = time.perf_counter() | |
| print(f"Image generation took {end_time - start_time:.3f} seconds") | |
| ``` | |
| ## 生成质量 | |
| 许多现代扩散模型开箱即可生成高质量图像。不过,你仍可通过尝试以下方法来进一步提升生成质量。 | |
| - 尝试使用更详细、更具描述性的提示词。包含诸如图像媒介、主体、风格和美学等细节。负面提示词也有助于引导模型避免不理想的特征,例如使用“低质量”或“模糊”等词语。 | |
| ```py | |
| import torch | |
| from diffusers import DiffusionPipeline | |
| pipeline = DiffusionPipeline.from_pretrained( | |
| "stabilityai/stable-diffusion-xl-base-1.0", | |
| dtype=torch.bfloat16, | |
| device_map="cuda" # or "mps", "xpu", "cpu" | |
| ) | |
| prompt = """ | |
| cinematic film still of a cat sipping a margarita in a pool in Palm Springs, California | |
| highly detailed, high budget hollywood movie, cinemascope, moody, epic, gorgeous, film grain | |
| """ | |
| negative_prompt = "low quality, blurry, ugly, poor details" | |
| pipeline(prompt, negative_prompt=negative_prompt).images[0] | |
| ``` | |
| 有关创建更优质提示词的详细信息,请参阅[Prompt techniques](./using-diffusers/weighted_prompts)文档。 | |
| - 尝试使用不同的调度器,例如 [HeunDiscreteScheduler](/docs/diffusers/v0.43.0/zh/api/schedulers/heun#diffusers.HeunDiscreteScheduler) 或 [LMSDiscreteScheduler](/docs/diffusers/v0.43.0/zh/api/schedulers/lms_discrete#diffusers.LMSDiscreteScheduler),它们以牺牲生成速度为代价来提升质量。 | |
| ```py | |
| import torch | |
| from diffusers import DiffusionPipeline, HeunDiscreteScheduler | |
| pipeline = DiffusionPipeline.from_pretrained( | |
| "stabilityai/stable-diffusion-xl-base-1.0", | |
| dtype=torch.bfloat16, | |
| device_map="cuda" # or "mps", "xpu", "cpu" | |
| ) | |
| pipeline.scheduler = HeunDiscreteScheduler.from_config(pipeline.scheduler.config) | |
| prompt = """ | |
| cinematic film still of a cat sipping a margarita in a pool in Palm Springs, California | |
| highly detailed, high budget hollywood movie, cinemascope, moody, epic, gorgeous, film grain | |
| """ | |
| negative_prompt = "low quality, blurry, ugly, poor details" | |
| pipeline(prompt, negative_prompt=negative_prompt).images[0] | |
| ``` | |
| ## 后续步骤 | |
| Diffusers 提供了更高级、更强大的优化功能,例如 [group-offloading](./optimization/memory#group-offloading) 和 [regional compilation](./optimization/fp16#regional-compilation)。如需了解如何最大化性能,请参阅推理优化部分。 | |
Xet Storage Details
- Size:
- 5.55 kB
- Xet hash:
- 7fbdad8815a2c33a3fee11bbacf4789d21ec2970504971d8f61e41d23d25d557
·
Xet efficiently stores files, intelligently splitting them into unique chunks and accelerating uploads and downloads. More info.