Buckets:
| # 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/v0.43.0/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:
- 3a4730300cf20235e750b024245756e5c6767d49a4797aec9351f14b5f1faa2e
·
Xet efficiently stores files, intelligently splitting them into unique chunks and accelerating uploads and downloads. More info.