Stable Diffusion をローカル環境で動かしたかった->動かせた
アプリケーションの実行環境は整えられたが、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 インストール
下記からインストーラをダウンロードして実行。案内通りで良い(ユーザ本人にのみインストールされる)。
インストール後、環境変数にて PATH に下記を追加。
C:\Users\$env:username\anaconda3\condabin
stable diffusion をフォーク
誤操作でおかしくしたくないので、自分用のリポジトリを作成しておく。
下記をフォーク。フォークしたリポジトリはクローンしておく。
フォークの操作は GitHub の操作なので割愛。学習モデルの取得
学習モデルやデータセットのホスティングサービス(?) Hugging Face Hub にアカウント作成する。こちらも Hugging Face Hub の操作なので割愛。
stable diffusion に使う学習モデルを下記からクローンする。
※How To Clone てボタンが有るのでクリックするとクローンの仕方がわかるよ。バージョン差については下記を参照。俺にはよくわからんかったが。
実行環境作成
クローンしておいたフォークしたリポジトリを 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。
README.md の Usage で挙げられているグラボは RTX 2060 だが、VRAM 6GB と RTX 1060 と同じなので VRAM 問題は突破できそうと判断。
Optimized Stable Diffusion をクローンしてディレクトリ optimizedSD
を、すでにオリジナルをフォークしたリポジトリに突っ込み、同ディレクトリ配下の optimized_txt2img.py
を実行すれば画像生成ができる。
ただ、一部オプションが無い為、プログラムとコマンドをちょいといじった。
optimized_txt2img.py
では通常版で使ったコマンドに着目すれば、--ckpt
, --plms
が無い。--ckpt
だけはモデル切り替えできたほうが便利そうだったので復活させた。
コマンドは下記。
conda run -n ldm python .\optimizedSD\optimized_txt2img.py --prompt "catgirl" --ckpt path\to\sd-v1-4.ckpt --n_samples 1
生成できた画像は下記(求めてないけど、かわいいからいいか)。
vintersnow さんに感謝。
Discussion
こちらのメモリ節約版を使うと良いと思います。
VRAM 不足は解決できそうですね、情報ありがとうございます。