💻

例のコードじゃMacbook(M1 pro) + stable diffusion の環境構築ができなかったので、修正点メモ

2022/08/24に公開

流行りのstable diffusionですが、M1macで動かす手順が
https://github.com/CompVis/stable-diffusion/issues/25#issuecomment-1224040740
これで8割くらいはあってるけど、ここに書いてある通りじゃ動かなかったので
手順を忘れないようメモとして書いておきます。
なお 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くらいある)

https://huggingface.co/
でアカウントをつくってログインしてから

https://huggingface.co/CompVis/stable-diffusion-v-1-4-original
にアクセスすると ↓のような利用規約がでるので
Access repostory 押します

なお今回は使いませんが、ついでに
https://huggingface.co/CompVis/stable-diffusion-v-1-3-original
https://huggingface.co/CompVis/stable-diffusion-v-1-2-original
https://huggingface.co/CompVis/stable-diffusion-v-1-1-original

も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時間くらいかかりました(うちの回線がꘐな事は指摘しないでくれ)

https://github.com/magnusviri/stable-diffusion.git
 こちらの 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環境おいときます
https://zenn.dev/hellohazime/articles/8ae3e6ccd698d3

Discussion