例のコードじゃMacbook(M1 pro) + stable diffusion の環境構築ができなかったので、修正点メモ
流行りのstable diffusionですが、M1macで動かす手順が
手順を忘れないようメモとして書いておきます。
なお 22/8/24時点の話なんで、近いうちに治ってると思います。
環境
- Macbook Pro(M1 pro)
- Memory 16GB
- OS X Moterey(12.3.1)
必要資材のインストール
git-lfs conda rust が必要になるのでインストールしておきます。
brew install git-lfs conda rust
インストール済みの人は conda とかrustのUPDATEしておくと良いかも。
1.HuggingFaceでモデルDL
モデルDLが時間かかるのでここからやると良いです(4Gくらいある)
でアカウントをつくってログインしてから
Access repostory 押します
なお今回は使いませんが、ついでに
もOKしとくと良いです。
$ git clone https://huggingface.co/CompVis/stable-diffusion-v-1-4-original
を実行するとログインを求められるのでHuggingFaceのアカウントを入力します。
※git hub のアカウントじゃないからな!
※画像では v-1-1をDLしてますが v-1-4でも同じように出ます
先ほどの利用規約的なものにOKしておかないと、ここでエラーが出て弾かれます。
2.git hub からstable diffusionのコードをClone
HuggingFace からモデルをDLをしている間に、他の資材も用意します。
なおモデルDLは自分だと2時間くらいかかりました(うちの回線がꘐな事は指摘しないでくれ)
こちらの apple-silicon-mps-support ブランチを使います
$ git clone -b apple-silicon-mps-support https://github.com/magnusviri/stable-diffusion.git stable-diffusion-m1
$ cd stable-diffusion-m1
ルート直下にある
environment-mac.yaml がそのままだと使えないので下記に置き換えます
name: ldm1
channels:
- pytorch-nightly
- defaults
dependencies:
- python=3.10.4
- pip=22.2.2
- pytorch
- torchvision
- torchaudio
- numpy=1.23.1
- pip:
- albumentations==0.4.6
- opencv-python==4.6.0.66
- pudb==2019.2
- imageio==2.9.0
- imageio-ffmpeg==0.4.2
- pytorch-lightning==1.4.2
- omegaconf==2.1.1
- test-tube>=0.7.5
- streamlit>=0.73.1
- einops==0.3.0
- torch-fidelity==0.3.0
- transformers==4.19.2
- torchmetrics==0.6.0
- kornia==0.6
- -e git+https://github.com/CompVis/taming-transformers.git@master#egg=taming-transformers
- -e git+https://github.com/openai/CLIP.git@main#egg=clip
- -e .
condaでPyTorch環境を構築
先ほど書き換えたenvironment-mac.yamlを使って環境を作ります
conda env create -f environment-mac.yaml
自分は ここも1時間くらいかかりました。
PyTorchをちょろっと修正
自分はこれをさぼったせいで
return torch.layer_norm(input, normalized_shape, weight, bias, eps, torch.backends.cudnn.enabled)
RuntimeError: view size is not compatible with input tensor's size and stride (at least one dimension spans across two contiguous subspaces). Use .reshape(...) instead.
って怒られました。
githubのstable diffusionコードじゃなくてcondaでインストールしたPyTorchのコードを修正になります。
$ vi ~/miniforge3/envs/ldm1/lib/python3.10/site-packages/torch/nn/functional.py
2511c2511
< return torch.layer_norm(input, normalized_shape, weight, bias, eps, torch.backends.cudnn.enabled)
---
> return torch.layer_norm(input.contiguous(), normalized_shape, weight, bias, eps, torch.backends.cudnn.enabled)
自分の環境では2511行目にある torch.layer_norm 引数一つめを input.contiguous()
に直す事で動きました。
場所がわからん人は
$ conda info -e
すると どのディレクトリに環境作ったかみれるので
ldm1 以下の lib/python3.10/site-packages/torch/nn/functional.py
を修正してください
モデルにシンボリックリンクを貼る
conda create と git clone がおわったら
models/ldm/stable-diffusion-v1/model.ckpt にシンボリックリンクを貼ります
$cd ~/stable-diffusion
$!ln -s ../stable-diffusion-v-1-4-original/sd-v1-4.ckpt models/ldm/stable-diffusion-v1/model.ckpt
実行
$ conda activate ldm1
$ python scripts/txt2img.py --prompt "a photograph of an astronaut riding a bike" --plms --n_samples 1
作成したファイルは outputs 以下に保存されます
なお投入した文章はa photograph of an astronaut riding a bike
です
所感
サンプル2枚つくるのに10分かかるんで無理にM1で動かすより Colabで遊ぶ方が断然楽です。
ただ機械学習にも使えるかもなーって気持ちでM1pro買ったのに、なんもつかってなかったんでなんとか使ってみたかったんですよね。
動かしてみたらメモリがひーひー言ってて、そうかー機械学習を手元にで動かしたいならメモリ16Gは人権なしかーそんな気持ちになりました。
追記
というわけで Colab環境おいときます
Discussion