Buckets:

mishig's picture
|
download
raw
4.06 kB
# Metal Performance Shaders (MPS)
> [!TIP]
> Los pipelines con la insignia badge indican que un modelo puede aprovechar el backend MPS en dispositivos con silicio de Apple para una inferencia más rápida. Siéntase libre de abrir un [Pull Request](https://github.com/huggingface/diffusers/compare) para agregar esta insignia a los pipelines que la estén faltando.
🤗 Diffusers es compatible con Apple silicon (chips M1/M2) usando el dispositivo [`mps`](https://pytorch.org/docs/stable/notes/mps.html) de PyTorch, que utiliza el framework Metal para aprovechar la GPU en dispositivos MacOS. Necesitarás tener:
- Equipo macOS con hardware Apple silicon (M1/M2)
- macOS 12.6 o posterior (se recomienda 13.0 o posterior)
- versión arm64 de Python
- [PyTorch 2.0](https://pytorch.org/get-started/locally/) (recomendado) o 1.13 (versión mínima compatible con `mps`)
El backend `mps` utiliza la interfaz `.to()` de PyTorch para mover el pipeline de Stable Diffusion a tu dispositivo M1 o 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]
> El backend [mps](https://pytorch.org/docs/stable/notes/mps.html) de PyTorch no admite tamaños de NDArray mayores que `2**32`. Abra un [Issue](https://github.com/huggingface/diffusers/issues/new/choose) si se encuentra con este problema para que podamos investigarlo.
Si estás usando **PyTorch 1.13**, necesitas "preparar" el pipeline con un paso adicional de una sola vez. Esto es una solución temporal para un problema en el que el primer paso de inferencia produce resultados ligeramente diferentes a los pasos posteriores. Solo necesitas realizar este paso una vez, y después de un solo paso de inferencia puedes descartar el resultado.
```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]
```
## Solución de problemas
Esta sección enumera algunos problemas comunes al usar el backend `mps` y cómo resolverlos.
### Rebanado de atención
El rendimiento de M1/M2 es muy sensible a la presión de memoria. Cuando esto ocurre, el sistema realiza intercambios automáticamente si es necesario, lo que degrada significativamente el rendimiento.
Para evitar que esto ocurra, recomendamos *attention slicing* para reducir la presión de memoria durante la inferencia y evitar el intercambio. Esto es especialmente relevante si tu computadora tiene menos de 64 GB de RAM de sistema, o si generas imágenes en resoluciones no estándar mayores a 512×512 píxeles. Llama a la función [enable_attention_slicing()](/docs/diffusers/v0.43.0/es/api/pipelines/overview#diffusers.DiffusionPipeline.enable_attention_slicing) en tu pipeline:
```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 realiza la operación de atención costosa en varios pasos en lugar de todo de una vez. Generalmente mejora el rendimiento en un ~20% en computadoras sin memoria universal, pero hemos observado *un mejor rendimiento* en la mayoría de las computadoras con Apple silicon, a menos que tengan 64 GB de RAM o más.
### Inferencia por lotes
Generar varios prompts en un lote puede provocar un error o un funcionamiento poco fiable. Si este es el caso, intente iterar en lugar de usar lotes.

Xet Storage Details

Size:
4.06 kB
·
Xet hash:
9dd189c671280191103d65173e410ac42e0a9b4202e3016eccde2884a38a0766

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