たまたま農作業を休める暇な時間ができた(カメムシ対策で草刈りを避けるべき時期)ため、Stable DiffusionによるAI画像生成に再挑戦してみた。
生成作業を行うLinux mint上での待ち時間が長いため、生成処理はLinux、表示はWindowsのFirefoxブラウザで行った。
WindowsのTeratermからsshでLinux PCに接続して、webui実行オプションに "--listen" を追加して外部PCで表示可能とした。Firewallのポート開放して WindowsのFirefoxブラウザから IPアドレスとポート指定でwebuiを開いた。
これならWindows上で並行して別作業しながら時々ブラウザのタブを切り替えるだけでよいので、じれったく待つのを我慢しなくてよい。
前回の記事では、webuiに単純なキーワードを入れ期待外れな画像が生成されてがっくりきたが、フリーで公開されているモデルを取り込んでみたところ、アニメ絵に近い物が簡単に生成できた。
フリーの素材を組み合わせることで、Web広告やオークション等に出品されているイラスト画像に近い物も簡単に生成できることが分かった。
具体的なモデル取り込み手順については"Stable diffusion Anything モデル"等で検索すれば詳細記事が見つかるので、素人の自分の詳細解説は省き、簡単な生成事例を紹介したい。
尚、今回試したモデルやLoRAは以下サイトから入手した。
最初にダウンロードした "AnythingXL_xl.safetensors" は7GB近くあり、サイズが大きすぎたのか、取り込み途中で強制終了となった。サイズの小さなバージョンも掲載されており、約2GB のv5.0 の AnythingXL_v50.safetensors や AnythingXL_inkBase.safetensors でテストしたら動作した。
モデル以外にLoRAという機能で生成画像をある程度特徴づけできるのを確認したが、種類が沢山ありすぎて、暇でないと試しきれない。これも使い方は検索すれば見つかるので説明省略。
CPUによる生成では時間が掛かりすぎるため、型遅れGPUだがStable diffusion のROCm対応のリストに載っていたAMD RX5600 XTの中古を購入し、海外サイトで無料公開されているDockerを使って実行も試したが、CPUによる生成時間と大差なかった。
メルカリの RX5600 XT 中古:
結局CPUのみでも、RX5600 XTのGPU使用でも 2分少々掛かった。
GPUとCPUの分散処理なら短縮できるかと期待して "--use-cpu codeformer sd scunet esrgan bsrgan" 等のオプション指定してみたが僅かな変化しか見られなかった。
余談だが、GPU付け外し時にうっかり筐体のファンケーブルが外れてしまいPCが起動しなくなってしまい焦った。
ASUSのマザー取説検索で図面を探しBlu-rayドライブ下に隠れていたコネクタに接続しなおして復旧した。
GPU付け外しに手の甲を擦りむき、数日痛みが続き、本記事執筆中もまだ完治していない。
以降はモデルやLoRAを適用した生成事例を列挙する。
・モデル:AnythingXL_v50.safetensors にキーワード:isekai ojisan で生成
<negative キーワード未指定>
<某サイトで見かけた negativeキーワード追加>
<キーワードに elf追加>
・モデル:AnythingXL_v50.safetensors にキーワード:gatchaman で生成
<女性キャラは指定してないのに女性キャラが生成されやすい>
・モデル:AnythingXL_v50.safetensors にキーワード:zelda で生成
<モデルを適用しないとゼルダではなくリンクが生成されることが多い気がする>
・キーワード:perman
<スカートをはいたムキムキ男が生成された>
・キーワード:dragon ball
<珍しく、原作イメージに近い物が生成された>
・LoRa:TS_HandmadeModel、キーワード:gundam
<LoRa適用でフィギュアのような外観を生成>
最後に失敗事例も紹介する。
・キーワード:spiderman、Negativeに "extra legs" を入れたが、腕が複数生えてしまった。
<Negatieキーワードで防ぎきれない場合もあり>
いくつか生成事例を紹介したが、今回導入したモデルを使うと生成イメージは女性キャラ生成に偏るようだ。
・キーワード: batmanで生成
<男性キャラが女性キャラになってしまった>
前回記事の生成画像のレベルだと、単調・退屈でこれ以上試す気にならなかったが、モデルやLoRAの適用で生成画像の方向付けがしやすくなり、それなりに楽しめることが分かった。
P.S. サイバー攻撃を受けて停止していた角川系列のサイト(niconicoも含む)は8/5から再開したらしい。
異世界おじさんのコメント付き漫画も公開されたが、8/7現在まだ7月公開分が反映されてない。
[2024.8.9追記]
本記事では GPUとして RX5600 XTで試したと書いたが、推奨はしない。
・素直に動作せず、わざわざ旧バージョンのROCmを入れなおす等で使える状態にするまで苦労する
・海外サイトで dockerも提供されているが、これもアクセス権変更等いじらないと使えなかったし、webuiが旧バージョンとなっている
・生成時間が CPUと大差なかった。
・nVidia向け Stable diffusionは動作の効率化したバージョンが存在するらしいがAMDは対象外。
既に所有している人がトライする価値はあるが、Stable Diffusion目的でRX5600 XT 購入は勧めない。
ただ、Steamのゲーム(グレンダイザー)は今までのGPUより快適となった。
たまたま キーワード "isekai ojisan, elf" として生成したイメージが原作漫画のシーンに似たものが生成されたので追記。
顔は似てない。
img2imgは使っていない。
<左側:生成画像、右側:漫画の一シーン>
[2024.8.11 追記]
起動オプションをいろいろいじって、AMD GPUのRX-5600 XTを使った生成が 50秒程度に短縮できた。
<今まで2分以上掛っていた画像生成が 36.7秒となった例>
エラー回避で試行錯誤したので、RX-5600 XTで stable diffusion を実行させたメモと参考にしたサイトを以下に記す。
・旧バージョンのtorchを使用。
・webui.sh を使わず、python3で直接実行
python3 コマンドにオプションや環境変数を固定で渡す sh scriptを作成した。
・メモリ容量のエラーは --lowvram で解消した
また、以下環境変数も指定した
HSA_OVERRIDE_GFX_VERSION=10.3.0
PYTORCH_HIP_ALLOC_CONF=garbage_collection_threshold:0.6,max_split_size_mb:128
・dockerの起動オプションも参考にした。
ただし、動作が不安定で応答しなくなる場合もあるので、表示されたエラーや警告を見て試行錯誤中。
特に サイズの大きな Lora を読み込んで生成すると失敗することが多い気がする。
[2024.8.14 追記]
古い torch を入れる、というところで参考記事より少しだけ新し目のバージョンを入れたが、起動を確認できた。
実施した入れ替えコマンドは以下の通り。
----
$ pip uninstall torch
$ pip install torch==1.13.1+rocm5.2 torchvision==0.14.1+rocm5.2 torchaudio==0.13.1 --extra-index-url https://download.pytorch.org/whl/rocm5.2
----
webui.shの代わりにpythonを直接実行するよう作成したSHスクリプトは以下の通り。
---
#!/usr/bin/sh
export HSA_OVERRIDE_GFX_VERSION=10.3.0
export PYTORCH_HIP_ALLOC_CONF=garbage_collection_threshold:0.9,max_split_size_mb:512
#export PYTORCH_HIP_ALLOC_CONF=garbage_collection_threshold:0.6,max_split_size_mb:128
python3 ~/stable-diffusion-webui/launch.py --skip-torch-cuda-test \
--listen --no-half-vae --opt-sdp-attention \
--lowvram \
--skip-version-check --skip-prepare-environment \
--precision full --no-half
#--skip-install
#--medvram
---
コメントアウトしてある方の PYTORCH_HIP_ALLOC_CONF と1つ前の行の設定を入れ替えると、LoRAの読み込みエラーは減るが、生成時間はやや長くなる。