Diffusers 文档
Metal Performance Shaders (MPS)
并获得增强的文档体验
开始使用
Metal Performance Shaders (MPS)
带有 徽章的 Pipeline 表示该模型可以利用 Apple 芯片设备上的 MPS 后端进行更快的推理。欢迎提交 Pull Request 为缺少此徽章的 Pipeline 添加它。
🤗 Diffusers 兼容 Apple 芯片(M1/M2 芯片),使用 PyTorch mps
设备,该设备使用 Metal 框架来利用 MacOS 设备上的 GPU。您需要具备:
- 配备 Apple 芯片 (M1/M2) 硬件的 macOS 电脑
- macOS 12.6 或更高版本(推荐 13.0 或更高版本)
- Python 的 arm64 版本
- PyTorch 2.0(推荐)或 1.13(
mps
支持的最低版本)
mps
后端使用 PyTorch 的 .to()
接口将 Stable Diffusion Pipeline 移动到您的 M1 或 M2 设备上。
from diffusers import DiffusionPipeline
pipe = DiffusionPipeline.from_pretrained("stable-diffusion-v1-5/stable-diffusion-v1-5")
pipe = pipe.to("mps")
# Recommended if your computer has < 64 GB of RAM
pipe.enable_attention_slicing()
prompt = "a photo of an astronaut riding a horse on mars"
image = pipe(prompt).images[0]
image
如果您使用 **PyTorch 1.13**,您需要通过一次额外的一次性传递来“预热”Pipeline。这是针对首次推理传递与后续传递结果略有不同的问题的临时解决方案。您只需进行一次此传递,并且只需一个推理步骤后即可丢弃结果。
from diffusers import DiffusionPipeline
pipe = DiffusionPipeline.from_pretrained("stable-diffusion-v1-5/stable-diffusion-v1-5").to("mps")
pipe.enable_attention_slicing()
prompt = "a photo of an astronaut riding a horse on mars"
# First-time "warmup" pass if PyTorch version is 1.13
+ _ = pipe(prompt, num_inference_steps=1)
# Results match those from the CPU device after the warmup pass.
image = pipe(prompt).images[0]
故障排除
本节列出了使用 mps
后端时的一些常见问题及其解决方案。
注意力切片 (Attention slicing)
M1/M2 的性能对内存压力非常敏感。当出现这种情况时,系统会自动进行交换,从而显著降低性能。
为了防止这种情况发生,我们建议使用*注意力切片*来减少推理过程中的内存压力并防止交换。如果您的电脑系统内存少于 64GB,或者您生成大于 512×512 像素的非标准分辨率图像,这一点尤其重要。在您的 Pipeline 上调用 enable_attention_slicing() 函数
from diffusers import DiffusionPipeline
import torch
pipeline = DiffusionPipeline.from_pretrained("stable-diffusion-v1-5/stable-diffusion-v1-5", torch_dtype=torch.float16, variant="fp16", use_safetensors=True).to("mps")
pipeline.enable_attention_slicing()
注意力切片将昂贵的注意力操作分多步执行,而不是一次性执行。它通常可以将没有通用内存的电脑的性能提高约 20%,但我们观察到,除非您的 Apple 芯片电脑有 64GB 或更多 RAM,否则它在大多数 Apple 芯片电脑中表现*更好*。
批量推理
批量生成多个提示可能会导致崩溃或无法可靠工作。如果是这种情况,请尝试迭代而不是批量处理。
< > 在 GitHub 上更新