話題のStable Diffusionをローカルにインストールして画像を出力してみました。
pythonとか前にちょろっといじったことがある程度で「ミニコンダとアナコンダの違いって何?」とか言うてるぐらいの初心者です。
分からんもんは「これは呪文!」と割り切って進めています。
とりあえず前提として、Stable Diffusionをローカル環境で実行する場合、方法が2つあります。
1つは、pythonのdiffusersというライブラリを使う方法で、もう1つは、Stable Diffusionリポジトリをクローンして使う方法です。
この記事は後者の方法で行っています。
ハード環境
OS: Win10
CPU: Intel Core i7-8700
メモリ: 16GB
GPU: GeForce GTX 1660 Super 6GB
※Stable Diffusionを動かすためには、機能的にギリギリらしいです。
Minicondaのインストール
【後で困らないための】Miniconda windows版の環境構築 | 趣味や仕事に役立つ初心者DIYプログラミング入門
Minicondaをインストールします。
Windows installersからpython3.8に対応した版(ダウンロードした時のファイル名はMiniconda3-py38_4.12.0-Windows-x86_64.exe)を選びます。
最初にインストールする時にAdd Miniconda3 to the system PATH enviroment variableに忘れずチェックを入れて、環境変数にパスを通しておきます。
Minicondaをインストールすると対応バージョンのpythonも同時インストールされるみたいです。便利。
VRAM不足でダメだったパターン
How to Run Stable Diffusion Locally to Generate Images
Stable Diffusionリポジトリ(オリジナル)のクローンを作成
git clone https://github.com/CompVis/stable-diffusion.git
学習モデルをクローン(26GB以上あるので重い)
git clone https://huggingface.co/CompVis/stable-diffusion-v-1-4-original
この時サイトHugging Faceからユーザー名とパスを聞かれるかもしれないので、予め登録しておきます。
規約系も同意しておきます。
学習モデルをセット
ダウンロードしたstable-diffusion-v-1-4-originalフォルダ内のsd-v1-4.ckptをstable-diffusionフォルダ直下に配置します。これでセット完了です。
conda(Miniconda)の仮想環境を作成&アクティベート
cd stable-diffusion conda env create -f environment.yaml conda activate ldm
これで環境構築は完了です。
いざ出力!
python scripts/txt2img.py --prompt "japan mountain" --plms --ckpt sd-v1-4.ckpt --skip_grid --n_samples 1
うーん、RuntimeError: CUDA out of memoryが出るため断念。
やっぱりVRAMが足りないみたい。
VRAM節約でうまくいったパターン
話題のStable Diffusionがオープンソース化されたのでローカルで動かしてみる
Stable Diffusionリポジトリ(VRAM節約版)のクローンを作成
git clone https://github.com/basujindal/stable-diffusion.git stable-diffusion_lesserVRAM
学習モデルをセット
stable-diffusion_lesserVRAM/models/ldm配下に、さっきクローンしたstable-diffusion-v-1-4-originalをstable-diffusion-v1にリネームして設置。
さらに、stable-diffusion-v1フォルダ内に(さっき移動させたのなら)sd-v1-4.ckptを戻し、model.ckptにリネーム。こうすると学習モデルとして読み込めるようです。
さっきの仮想環境が残ってるので全部削除
conda remove -n ldm --all
もう一度condaの仮想環境を作成&アクティベート
cd stable-diffusion_lesserVRAM conda env create -f environment.yaml conda activate ldm
いざ出力!(さっきとコマンドが違います)
python optimizedSD/optimized_txt2img.py --prompt "cute dog" --H 512 --W 512 --seed 27 --n_iter 2 --n_samples 10 --ddim_steps 50
おおっ今度は進んだ!
……と喜んだのもつかの間。
完成した画像が全部緑色。
Prompts only generating blank images · Issue #17 · basujindal/stable-diffusion · GitHub
コマンドに--precision fullを追加!
python optimizedSD/optimized_txt2img.py --prompt "cute dog" --H 512 --W 512 --seed 27 --n_iter 2 --n_samples 10 --ddim_steps 50 --precision full
できたぁ~~~~!
cute dog、すごい、かわいい……!
んんーー??かわいいか?
若干足の位置関係とか本数が怪しいのがある……。
ちなみに上のコマンドだと512*512画像を20枚出力しますが、だいたい一時間ぐらいかかります。
ともかくとして、これから呪文を調べていきたいと思います。
近い将来、キーワード選定のプロフェッショナル「魔法使い」って専門家が実際に現れる予感がします(しません)