Posted August 31, 2022 by @bfirsh
You can run Stable Diffusion in the cloud on Replicate, but it's also possible to run it locally. As well as generating predictions, you can hack on it, modify it, and build new things. Getting it working on an M1 Mac's GPU is a little fiddly, so we've created this guide to show you how to do it.
One thing we've done on top of previous work: use pip instead of Conda to install dependencies. It's much easier to set up and shouldn't need to compile anything because it uses binary wheels.
You need Python 3.10 to run Stable Diffusion. Run
python -V to see what Python version you have installed:
$ python3 -V !11338 Python 3.10.6
If it's 3.10 or above, like here, you're good to go! Skip on over to the next step.
Otherwise, you'll need to install Python 3.10. The easiest way to do that is with Homebrew. First, install Homebrew if you haven't already.
Then, install the latest version of Python:
brew update brew install python
Now if you run
python3 -V you should have 3.10 or above. You might need to reopen your console to make it work.
Run this to clone the fork of Stable Diffusion:
git clone -b apple-silicon-mps-support https://github.com/bfirsh/stable-diffusion.git cd stable-diffusion mkdir -p models/ldm/stable-diffusion-v1/
Then, set up a virtualenv to install the dependencies:
python3 -m pip install virtualenv python3 -m virtualenv venv
Activate the virtualenv:
(You'll need to run this command again any time you want to run Stable Diffusion.)
Then, install the dependencies:
pip install -r requirements.txt
If you're seeing errors like
Failed building wheel for onnx you might need to install these packages:
brew install Cmake protobuf rust
Go to the Hugging Face repository, have a read and understand the license, then click "Access repository".
sd-v1-4.ckpt (~4 GB) on that page and save it as
models/ldm/stable-diffusion-v1/model.ckpt in the directory you created above.
Now, you can run Stable Diffusion:
python scripts/txt2img.py \ --prompt "a red juicy apple floating in outer space, like a planet" \ --n_samples 1 --n_iter 1 --plms
Your output's in
outputs/txt2img-samples/. That's it.