Buckets:

mishig's picture
|
download
raw
5.84 kB
# Metal Performance Shaders (MPS)
> [!TIP]
> Пайплайны с бейджем MPS указывают на то, что модель может использовать бэкенд MPS на устройствах с чипами Apple silicon для более быстрого вывода. Вы можете создать [Pull Request](https://github.com/huggingface/diffusers/compare), чтобы добавить этот бейд к пайплайнам, где он отсутствует.
🤗 Diffusers совместим с Apple silicon (чипы M1/M2) с использованием устройства PyTorch [`mps`](https://pytorch.org/docs/stable/notes/mps.html), которое использует фреймворк Metal для задействования GPU на устройствах MacOS. Вам потребуется:
- Компьютер macOS с аппаратной платформой Apple silicon (M1/M2)
- macOS 12.6 или более поздняя версия (рекомендуется 13.0 или более поздняя)
- arm64-версия Python
- [PyTorch 2.0](https://pytorch.org/get-started/locally/) (рекомендуется) или 1.13 (минимальная поддерживаемая версия для `mps`)
Бэкенд `mps` использует интерфейс `.to()` PyTorch для перемещения конвейера Stable Diffusion на ваше устройство M1 или M2:
```python
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
```
> [!WARNING]
> Бэкенд [mps](https://pytorch.org/docs/stable/notes/mps.html) в PyTorch не поддерживает размеры NDArray, превышающие `2**32`. Если вы столкнулись с этой проблемой, пожалуйста, создайте [Issue](https://github.com/huggingface/diffusers/issues/new/choose), чтобы мы могли провести расследование.
Если вы используете **PyTorch 1.13**, вам необходимо «прогреть» конвейер дополнительным одноразовым проходом. Это временное решение для проблемы, при которой первый проход инференса дает результаты, слегка отличающиеся от последующих. Этот проход нужно выполнить только один раз, а после одного шага инференса результат можно отбросить.
```diff
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` и способы их решения.
### Слайсинг внимания
Производительность M1/M2 очень чувствительна к нагрузке на память. При её превышении система автоматически использует подкачку, что значительно снижает производительность.
Чтобы предотвратить это, мы рекомендуем использовать *attention slicing* для снижения нагрузки на память во время инференса и предотвращения свопинга. Это особенно актуально, если на вашем компьютере менее 64 ГБ системной ОЗУ или если вы генерируете изображения в нестандартных разрешениях, превышающих 512×512 пикселей. Вызовите функцию [enable_attention_slicing()](/docs/diffusers/main/ru/api/pipelines/overview#diffusers.DiffusionPipeline.enable_attention_slicing) для вашего пайплайна:
```py
from diffusers import DiffusionPipeline
import torch
pipeline = DiffusionPipeline.from_pretrained("stable-diffusion-v1-5/stable-diffusion-v1-5", dtype=torch.float16, variant="fp16", use_safetensors=True).to("mps")
pipeline.enable_attention_slicing()
```
Attention slicing выполняет дорогостоящую операцию внимания в несколько шагов, а не за один раз. Обычно это улучшает производительность примерно на 20% на компьютерах без универсальной памяти, однако мы наблюдали *более высокую производительность* на большинстве компьютеров с Apple silicon, если у вас менее 64 ГБ ОЗУ.
### Пакетный вывод
Генерация нескольких промптов в одном батче может приводить к сбоям или нестабильной работе. Если это происходит, попробуйте использовать итерации вместо батчинга.

Xet Storage Details

Size:
5.84 kB
·
Xet hash:
eb2732f89cf7c43bac8554157074ee961285077ba1f208c427ef367e7dc2d832

Xet efficiently stores files, intelligently splitting them into unique chunks and accelerating uploads and downloads. More info.