Windows 10 Pro + DockerでStableDiffusion
いま、流行のStableDiffusion、メモリ多めのGPUが必要なため、Colabなどで動かす例が多いです。しかし、日々いろいろな方の貢献が進んでいまして、CPUで動かせるバージョンがGitHubに公開されています。お手軽そうなので、飛びつくように試してみました。
ご参考のため、私のPCスペック
- Intel Corei712700K
- 64GB DIMM
- NVIDIA GeForce RTX 3070(8GB) ※たぶんなくても動くはず
- Windows 10 Pro
DIMM64GBありますし、こちらのほうがいいかも、ということで試してみることにしました。
結果
Win10 ProのdockerでStableDiffusion動きました。
— WindVoice%🌥🌥🌥🌥 (@WindVoice_jp) 2022年8月30日
とりあえずHello Worldを実行した。
$ python stable_diffusion.py --prompt "A plate full of fried chicken, photoreal, 8K" pic.twitter.com/31AwAinH2A
環境構築
- Windows 10がPro版であることが必要です。「プログラムの追加と削除」→「アプリと機能」の画面で、「プログラムと機能」を選択、さらに「Windowsの機能の有効化または無効化」を選択して、「仮想マシンプラットフォーム」を有効にしておきます(要再起動)。
- Docker Hubにアクセスして、IDを登録します。登録したら、Windows版Docker Hubをダウンロードしてインストールします。
- Docker Desktopを起動するとチュートリアルを勧められるので、一通り流して終わります。
- wsl2をインストールします(したような気がする)
- powershellを開いて、gitコマンドで以下のレポジトリをcloneします。終わったら、docker buildで環境を構築します。
# git clone https://github.com/atinfinity/stable_diffusion.openvino-docker # cd stable_diffusion.openvino-docker # docker build --build-arg UID=1000 --build-arg GID=1000 -t stable_diffusion:openvino .
- 環境ができあがるまでしばらく待ちます。Dockerすごい!裏で必要なことは全部やってくれるのでコーヒーでも飲んで待ちます。
- Docker DesktopのImagesメニューから、stable_diffusionを選んでrunで環境を起動します。
- recursing_neumannから、ターミナルを起動します(OPEN IN TERMINAL)。
$ bash To run a command as administrator (user "root"), use "sudo <command>". See "man sudo_root" for details. (openvino_env) stable_diffusion@9c929807267a:~/stable_diffusion.openvino$
さぁ!
ここまで来たら、準備OKです。ここまでいろいろ作ってくれた方に感謝しつつ呪文を唱えましょう。
(openvino_env) stable_diffusion@9c929807267a:~/stable_diffusion.openvino$ python stable_diffusion.py --prompt "A plate full of fried chicken, photoreal, 8K" Downloading: 100%|█████████████████████████████████████████████████████████████████████| 905/905 [00:00<00:00, 1.75MB/s] Downloading: 100%|████████████████████████████████████████████████████████████████████| 939k/939k [00:00<00:00, 979kB/s] Downloading: 100%|████████████████████████████████████████████████████████████████████| 512k/512k [00:00<00:00, 640kB/s] Downloading: 100%|██████████████████████████████████████████████████████████████████████| 389/389 [00:00<00:00, 824kB/s] Downloading: 100%|█████████████████████████████████████████████████████████████████| 2.12M/2.12M [00:01<00:00, 1.66MB/s] ftfy or spacy is not installed using BERT BasicTokenizer instead of ftfy. Downloading: 100%|████████████████████████████████████████████████████████████████████| 464k/464k [00:00<00:00, 564kB/s] Downloading: 100%|███████████████████████████████████████████████████████████████████| 492M/492M [00:16<00:00, 30.5MB/s] Downloading: 100%|█████████████████████████████████████████████████████████████████| 3.02M/3.02M [00:01<00:00, 2.04MB/s] Downloading: 100%|█████████████████████████████████████████████████████████████████| 3.44G/3.44G [02:39<00:00, 21.6MB/s] Downloading: 100%|████████████████████████████████████████████████████████████████████| 329k/329k [00:00<00:00, 508kB/s] Downloading: 100%|███████████████████████████████████████████████████████████████████| 198M/198M [00:04<00:00, 45.7MB/s] 32it [01:47, 3.35s/it] (openvino_env) stable_diffusion@9c929807267a:~/stable_diffusion.openvino$
最初の1回は実行に時間がかかります。プロンプトが戻ってきたら、output.pngがそこにあるのが確認できます。
(openvino_env) stable_diffusion@9c929807267a:~/stable_diffusion.openvino$ ls -l total 524 -rw-r--r-- 1 stable_diffusion stable_diffusion 11357 Aug 30 11:33 LICENSE -rw-r--r-- 1 stable_diffusion stable_diffusion 14384 Aug 30 11:33 LICENSE_MODEL -rw-r--r-- 1 stable_diffusion stable_diffusion 1876 Aug 30 11:33 README.md drwxr-xr-x 2 stable_diffusion stable_diffusion 4096 Aug 30 11:33 data -rw-r--r-- 1 stable_diffusion stable_diffusion 486600 Aug 31 11:54 output.png -rw-r--r-- 1 stable_diffusion stable_diffusion 144 Aug 30 11:33 requirements.txt -rw-r--r-- 1 stable_diffusion stable_diffusion 7080 Aug 30 11:33 stable_diffusion.py (openvino_env) stable_diffusion@9c929807267a:~/stable_diffusion.openvino$
できました!
(追記 2022/09/01)
一日経ったら、もう内容が古くなっていました。いまはstable_diffusion.pyの代わりにdemo.pyとすると動きます。詳細は同じディレクトリにあるREADME.mdを読みましょう。
で、そのoutput.pngはどこにあるの?
実は、このPNGファイルを探すのが一番大変でした。結論から言うと、以下の通り探せます。
- エクスプローラを開いて、"\\wsl$" を開きます。
- docker-desktop-dataを開き、ファイルの検索から「output.png」を探します。
- output.pngが見つかったら右クリックして「ファイルの場所を開く」で開きます。やっとみつかりました。
まとめ
ということで、ローカルなPC環境でStableDiffusionを動かす例を少しだけ詳しめにご紹介しました。流行に乗って波乗りしたい方、ぜひどうぞ。