Diffusers 文档

Metal Performance Shaders (MPS)

Hugging Face's logo
加入 Hugging Face 社区

并获得增强的文档体验

开始使用

Metal Performance Shaders (MPS)

带有 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 mps 后端不支持大于 2**32 的 NDArray 大小。如果您遇到此问题,请提交 Issue,以便我们进行调查。

如果您使用 **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 上更新