GitHub版のStable diffusionを動かす
前提環境
wslにcudaが入ってる
GTX1070で動作確認をした
CUDA関係は設定済みとする
手順
zshsudo apt-get install libgl1-mesa-glx libegl1-mesa libxrandr2 libxrandr2 libxss1 libxcursor1 libxcomposite1 libasound2 libxi6 libxtst6
# ダウンロード
wget https://repo.anaconda.com/archive/Anaconda3-2022.05-Linux-x86_64.sh
# ハッシュ確認
shasum -a 256 Anaconda3-2022.05-Linux-x86_64.sh
a7c0afe862f6ea19a596801fc138bde0463abcbce1b753e8d5c474b506a2db2d Anaconda3-2022.05-Linux-x86_64.sh
# python3.8だけど
bash Anaconda3-2022.05-Linux-x86_64.sh
# 指示に従う
# 使っているのshellを指定する必要がある
# ここ間違えた。zshをつかっているのにbashを初期化してしまった
source ~/.bashrc # これはちゃんとやっていれば不要
# ひょうじがぶっこわれた!
# 一旦bashに離脱したらもどった
conda list
# 色々表示されてるので入ってる
zshgit clone
conda env create -f environment.yaml
conda activate ldm
# 失敗
conda init zsh
exec zsh -l
# 仕切り直し
conda activate ldm
stable-diffusion-v1-4-original weightsを手に入れる
方法が2つある。

は1でやったが2の方が楽だろう
1. ブラウザダウンロード
Windowsでブラウザダウンロードして
エクスプローラに \\wsl$
を入力してD&D
2. git lfsを使う
zsh$ git clone https://huggingface.co/CompVis/stable-diffusion-v-1-4-original
$ cd stable-diffusion-v-1-4-original
$ cd git lfs pull
リンクする
zshmkdir -p models/ldm/stable-diffusion-v1/
ln -s <path/to/sd-v1-4.ckpt> models/ldm/stable-diffusion-v1/model.ckpt
画像を生成する
zshpython scripts/txt2img.py --prompt "a photograph of an astronaut riding a horse" --plms
FileNotFoundError: [Errno 2] No such file or directory: 'models/ldm/stable-diffusion-v1/model.ckpt'
models/ldm/stable-diffusion-v1/model.ckptあるが??
ファイルの実態を入れてmodel.ckptにしたら動いた
symlinkがだめだった?
out of memoryになる
対応はいくつかある
1. duffuser版のようにfloat16になるようにする(VRAM 8GBのGTX1070の場合)
やり方がわからなかったのだが、Twitterでやり方を教えていただいた
それだけではout of memoryになった
>標準のバッチサイズ3ではVRAMに乗らないため、実行時オプションで --n_samples 1 もしくは 2 を指定する
つまり最終形はこう
zshpython scripts/txt2img.py --prompt "a photograph of an astronaut riding a horse" --plms --n_sampls 2
2022/10/03 追記 RTX3090にしたら32bitでn_samples 7までいけた
8でout of memory
zshRuntimeError: CUDA out of memory. Tried to allocate 8.00 GiB (GPU 0; 24.00 GiB total capacity; 8.37 GiB already allocated; 3.28 GiB free; 16.58 GiB reserved in total by PyTorch) If reserved memory is >> allocated memory try setting max_split_size_mb to avoid fragmentation. See documentation for Memory Management and PYTORCH_CUDA_ALLOC_CONF
2. (非推奨)生成される画像サイズを下げる
256x256にしたら生成はできた。ギリギリ。
デフォルトの512px以下にすると品質劣化するので使わない
3. 速度を犠牲に少メモリにしたモデルを使う
補足
torchのdockerコンテナを引っ張ってくるとNVIDIAまわりの設定が飛ばせるらしい
diffusers版をDockerで動かしている
--unsafe
コマンドを使うとNSFWチェックをしないことでVRAMを数G追加できるらしい(txt2imgのみ)