🐥

Stable Diffusion をローカル環境で動かしたかった->動かせた

2022/08/26に公開
2

アプリケーションの実行環境は整えられたが、VRAM が足りないエラーが発生し物理的な準備が必要になったよ。本記事では実行環境準備までやったことを記載。

ちなみに Machine Learning や Deep Learning は触れてないから PyTorch とかその辺よく知らない。


2022/09/03 追記
Optimized Stable Diffusion により VRAM 不足とならず、正常動作を確認できた。
本件のメモを末尾に追記した。


動機

画像生成 AI である MidJourney を利用してイラストの元ネタを作ろうと思ったけど「discord 使ってないし、利用制限あるのかー」と避けてた。

stable diffusion がオープンソースとなったと聞き、これなら「ローカルでやりたい放題では?」と思い、さっそく先人の知恵を借りながら実行できるまで準備した。そんな記事。
※License によれば生成物の責任は利用者にあるよん、気をつけようね。
※やりたい放題 -> 試行錯誤や欲しいものの生成

マシン

OS は Windows 10 Pro。ハードウェアは下記。

ハードウェア 内容
CPU Intel Core i7 8700
RAM 32GB
グラフィックボード NVIDIA GeForce GTX 1060 6GB

VRAM 足りないよ

実行環境準備

Anaconda インストール

下記からインストーラをダウンロードして実行。案内通りで良い(ユーザ本人にのみインストールされる)。
https://www.anaconda.com/

インストール後、環境変数にて PATH に下記を追加。

C:\Users\$env:username\anaconda3\condabin

stable diffusion をフォーク

誤操作でおかしくしたくないので、自分用のリポジトリを作成しておく。

下記をフォーク。フォークしたリポジトリはクローンしておく。
https://github.com/CompVis/stable-diffusion
フォークの操作は GitHub の操作なので割愛。

学習モデルの取得

学習モデルやデータセットのホスティングサービス(?) Hugging Face Hub にアカウント作成する。こちらも Hugging Face Hub の操作なので割愛。

stable diffusion に使う学習モデルを下記からクローンする。
https://huggingface.co/CompVis/stable-diffusion-v-1-4-original
※How To Clone てボタンが有るのでクリックするとクローンの仕方がわかるよ。

バージョン差については下記を参照。俺にはよくわからんかったが。
https://huggingface.co/CompVis/stable-diffusion

実行環境作成

クローンしておいたフォークしたリポジトリを VSCode で開く

下記をターミナルで実行して仮想環境作成

conda create env -f environment.yaml

下記をターミナルで実行して仮想環境 ldm を有効化

conda activate ldm

下記をターミナルで実行して画像を生成

conda run -n ldm python scripts/txt2img.py --prompt "catgirl" --plms --ckpt path/to/sd-v1-4.ckpt --n_samples 1

path/to/sd-v1-4.ckpt はクローンした学習モデル
conda activate ldm がうまく作用されてないのか conda run -n ldm が必要? anaconda を知らないまま使っているのでよくわからん。

VRAM 足らない為にエラー

RuntimeError: CUDA out of memory. Tried to allocate 1024.00 MiB (GPU 0; 6.00 GiB total capacity; 4.54 GiB already allocated; 0 bytes free; 4.66 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

ここまで。ドスパラで RTX 3060 のグラボでも買おうと思う。


2022/09/03 追記

Optimized Stable Diffusion

下記は vintersnow さんより教えていただいた、メモリ節約版の Stable Diffusion のフォーク Optimized Stable Diffusion。

https://github.com/basujindal/stable-diffusion

README.md の Usage で挙げられているグラボは RTX 2060 だが、VRAM 6GB と RTX 1060 と同じなので VRAM 問題は突破できそうと判断。

Optimized Stable Diffusion をクローンしてディレクトリ optimizedSD を、すでにオリジナルをフォークしたリポジトリに突っ込み、同ディレクトリ配下の optimized_txt2img.py を実行すれば画像生成ができる。

ただ、一部オプションが無い為、プログラムとコマンドをちょいといじった。

optimized_txt2img.py では通常版で使ったコマンドに着目すれば、--ckpt, --plms が無い。--ckpt だけはモデル切り替えできたほうが便利そうだったので復活させた。

https://github.com/ETTSU-StarTail/stable-diffusion

コマンドは下記。

conda run -n ldm python .\optimizedSD\optimized_txt2img.py --prompt "catgirl" --ckpt path\to\sd-v1-4.ckpt --n_samples 1 

生成できた画像は下記(求めてないけど、かわいいからいいか)。

生成できた catgirl

vintersnow さんに感謝。

Discussion