StableDiffusionで遊んでみたい!
ちょっとゲームを作成してみたいと前々から思っていたが、絵が描けないことがネックになっていた。ネットサーフィン(死後)をしていると、GTX1660sでもStabledifusionを動かす方法があったので、それを試してラフテルを目指す。
加えてただでさえwindows環境なので環境破壊をあまりしたくないと思っていたところ、Dockerを使って環境構築できるリポジトリを見つけたのでそれをもとに進めていった。 https://github.com/AbdBarho/stable-diffusion-webui-docker
問題その1 謎にkilledされる
Githubのセットアップ方法をもとに進めていくと、急にkilledされてしまった。 最初はコンテナにGPUが割り当てられていないことを疑ったりしていたが、Dockerを動かしているWSLに割り当てているメモリ量が4GBだったことが原因だった。 これを10GBに変更し、swap領域も20GBほど割り当てたところ、この件は解消した。
ここを参考にして設定した。
問題その2 モデルがloadできない
これも最初、モデルが存在していないからこのエラーが発生していると思ったが、私の使っているGTX 1660Superというグラボではメモリ不足のためモデルがloadできなかった。 そのため以下を参考にして1660sでも動作するように設定を変更したところ、無事StableDiffusion Web UIが動作するようになった。
エラー文はこんな感じだった webui-docker-auto-1 | RuntimeError: Expected all tensors to be on the same device, but found at least two devices, cpu and cuda:0! (when checking argument for argument index in method wrapper_CUDA__index_select)
この2つを参考にした。 上の方が設定の変更箇所で、下の方が設定の内容とした
- https://github.com/AbdBarho/stable-diffusion-webui-docker/wiki/Usage#customization
- https://banilog.com/stable-diffusion-3/#toc8
最終的にstable-diffusion-webui-docker/docker-compose.yml
のautoのservidceが以下のようになった
services:
auto: &automatic
environment:
- CLI_ARGS=--precision full --no-half --opt-split-attention --allow-code --medvram --xformers --enable-insecure-extension-access --api
余談
これでAI絵師をいつでも名乗れるようになった。(構築しただけで名乗れるのか…) 使っていくうちに、upscaleを使用するとかなり解像度がよくなることがわかった。 これからはブログのアイコンや挿絵にAI絵を使ってみたい。
StableDiffusionに出会うのがもう少し早ければ、FPGAで高速で動作させる研究をしてたかもしれない。
作った画像
まだ触りの状態だけど今のところの最高傑作がこちら かわいいね 最初は指が6本になってたけど、同じ画像を生成しつつ指の数を治す方法も発見できた(seed値を固定してモデルのstep数を増やすと改善される) 案外奥が深くて大変だけど、生成されるイラストに癒されるのでプラマイ0