シンギュラリティ実験ノート

購入した1000ドルPCで何がどこまでできるのか実験した記録です。

SDXLでイメージ通りの絵を描きたい

StableDiffusion XL(以下SDXL)をUM790 Proに導入した。自分のイメージ通りの絵を描きたいと思ったからだ。なんとかSDXLの導入まではしたものの、イメージ通りの絵を描くところまでには至っていない。とりあえずこの一週間で行った作業と、SDXLで描いた絵をここにまとめておきたい。

私が今回描きたい絵はLexicaにあったこんな絵だ。

私の今お気に入りの「SDXL-Lightning- Text To Image 2-Steps」でLexicaと同じプロンプトで描いてもらうとこんな感じになる。ネガティブプロンプトはこのサイトでは入力できないので入力していないが、かなりレベルの高い絵を描いてくれる。

SDXL-Lightning- Text To Image 2-Stepsで描いてもらいました

Ubuntu でSDXL

準備

UbuntuではROCm+webui+GPUで動いているので、こちらでまず試してみた。

以下のモデルファイルをダウンロードする。

  • sd_xl_base_1.0.safetensors
  • sd_xl_refiner_1.0.safetensors
  • sdxl_vae.safetensors

baseとrefinerはStableDiffusionのmodels/Stable-diffusionフォルダへ、vaeはmodels/VAEフォルダへ置く。

webui起動コマンド

準備ができたらStableDiffusionを起動する。起動方法は以前の記事に書いているのだが、この通りに起動して実行するとVRAM 8GBではメモリ不足で異常終了する。SDXLは12GB以上(推奨16GB)のVRAMを必要とする。このため少ないVRAMでもSDXLが動くように --medvram-sdxl という起動オプションを追加する。

$ cd stable-diffusion-webui
$ source venv/bin/activate
(venv) $ HSA_OVERRIDE_GFX_VERSION=11.0.0  ./webui.sh --medvram-sdxl

実行結果

Lexicaにあったプロンプトをそのままコピーして実行した結果が以下である。

 

初回の起動ではモデルの変換処理が動くらしくかなり時間がかかる。変換処理が終わると1枚の画像(512×512)の処理は約20秒であった。処理時間は問題ないのだが、どうも期待していたレベルでは描いてくれない。

 

WindowsでSDXL

準備

WindowsではDirectML+webui+GPUで動いているのでこちらで同様に試してみた。

結論から言うとDirectML+webuiではSDXLは動作しなかった。以下のエラーが出る。

AttributeError: 'OnnxRawPipeline' object has no attribute 'is_refiner'

原因は分からないが、私が導入したDirectML対応のSDではSDXLに対応していないのかもしれない。このため、webuiはあきらめて新たにComfyUIを導入することにした。ComfyUIは起動オプションで--directmlを指定するとDirectMLで動く。

(後で気付いたのだが、webuiにも --directml という起動オプションがあるので、標準のwebuiをインストールして --directml の起動オプションで起動すればSDXLも動くのかもしれない)

ComfyUIの導入

記憶が定かでないのでおおまかな手順のみを記す。

  1. anacondaでComfyUI用の環境を追加する。(Pythonのバージョンは3.10とする)
  2. anacondaのComfyUI環境でPowerShellを起動する。
  3. インストールディレクトリとしてComfyUIを作成する。
  4. Git を clone する。(下記のサイトからクローンしたと思うがコマンドは失念しました。すんません。)
  5. SDXLのbase、refinerをmodels/checkpointsフォルダに置く。
  6. SDXLのvaeをmodels/vaeフォルダに置く。
  7. pip install torch-directml を実行。
  8. pip install -r requirement.txt で必要なモジュールをインストールする。
  9. python main.py --directml で起動できるようになる。

ComfyUIのGitHubは以下にある。ここにインストール方法なども載っているので詳しくはこちらを見てもらいたい。

github.com

ComfyUI起動コマンド

8GBのVRAMでも動くように以下のコマンドで起動する。

$ python main.py --directml --lowvram

起動すると以下のように表示されるので、http以下の部分をCtrlキーを押しながらクリックする。

To see the GUI go to: http://127.0.0.1:8188

すると、DirectMLでComfyUIが起動し、ブラウザに以下のような画面が表示される。

実行結果

ComfyUIでは部品(ノードと言うらしい)が線で配線され、各ノードの中でパラメタを設定する必要がある。この部品が配線された状態をワークフローと言う。GUIでプログラミングができるようで素晴らしいとは思うが、難解である。私はこのワークフローやパラメタ設定辺りは全く分かっていないので説明できない。

とりあえずLexicaのプロンプトを入れて実行した結果が以下である。

やはり期待しているような絵は描いてもらえなかった。。。

 

念の為Web上のSDXL紹介サイトにある別のプロンプトをそのまま使って試してみると、それなりの絵は描いてくれるのだが。。

まとめ

頑張ってSDXLを導入したつもりだが、UM790 Proで自分のイメージ通りの絵を描くことはできなかった。おそらくSDXLの導入自体は問題ないと思うが、Lexicaのプロンプトではレベルが低くなってしまうのだ。これは何が原因なのかは分からない。

LLMや将棋AIではモデルをダウンロードしてデフォルトのパラメタ設定でそれなりに動いてくれるのだが、SDXLはそうではないようだ。

SDXLとComfyUIに関しては紹介サイトやYouTubeでいろいろ調べてみたが、詳しい情報は見つからなかった。情報は存在するものの、玉石混交というか、カオス状態である。今はこれ以上深入りしないつもりだ。

「SDXL-Lightning-Text To Image 2-Steps」はLexicaのプロンプトでも、Google翻訳で作成した自分のプロンプトでもイメージ通りの絵を作成してくれる。これで十分だろう。