概要
Macでmpsを使ってstable-diffusion-webuiを動かせたのでメモ
環境
- iMac 2019
- Intel Core i5
- Radeon Pro 560X 4GB
- conda 4.14.0
- stable-diffusion-webui @ d4dc4c1c633e27e7cb1a7208e8c39376dbee2d97
手順
weightの配置
wikiにはStable Diffusionのweightの配置場所はin the base directory
と書いてあったが、デフォルトだとrepositories/stable-diffusion/models/ldm/stable-diffusion-v1/model.ckpt
を参照するようだ。
別の場所に置いている場合やwaifu版など別のを使いたい場合は実行時の--ckpt
オプションで指定すればよいだろう。
仮想環境を用意
conda create -n sdw python=3.8.5
conda activate sdw
conda install pytorch torchvision -c pytorch-nightly
CUDA向けのコード等を書き換える
-
launch.py
-run_python("import torch; assert torch.cuda.is_available(), 'Torch is not able to use GPU'")
-
repositories/CodeFormer/facelib/detection/yolov5face/face_detector.py
-IS_HIGH_VERSION = tuple(map(int, torch.__version__.split('+')[0].split('.'))) >= (1, 9, 0) +IS_HIGH_VERSION = True
-
repositories/stable-diffusion/ldm/models/diffusion/plms.py
- if attr.device != torch.device("cuda"): - attr = attr.to(torch.device("cuda")) + if attr.device != torch.device("mps"): + attr = attr.to(torch.float32).to(torch.device("mps")).contiguous()
実行
PYTORCH_ENABLE_MPS_FALLBACK=1 python launch.py --precision full --no-half
Sampling methodによってはうまくいかないようだ。全て試してはいないが、PLMSは安定している。
実行中の様子
参考