見出し画像

stable diffusion webui automatic1111版かつRTX3050 laptop(VRAM4GB)でもSDXLは動くよという話

久々にnoteに書き込むのでちょっと何書けばいいかわからない感じがありますが、とりあえず今回はSDXLに移行できないエントリー向けのモバイル用GPU搭載PCの利用者に向けた話です。

ちなみにトップの画像はraemuXLというモデルで作ったサンプルです。

PCの性能について

まずはPCの性能について書いておきます。大前提の話ですからね。

  • CPU: intel core i5-10500H

  • GPU: nvidia geforce rtx3050 laptop (VRAM4GB)

  • ストレージ: nvme m.2ssd 512gb + 外付けSSD1TB

  • RAM: LPDDR4 32GB

まあ、とりあえずこれだけあれば大体の必要な性能はわかるかなと。RAMは買ったときは8GBだったんですが自分で16GBx2に差し替えました。よくあるエントリー向けのゲーミングノートPCの構成ですね。

使用しているソフトウェア

これはタイトル通りおなじみのsd webui automatic1111版です。ただし以前はgit cloneしていたものをstability matrix版に移し替えて使っています。否定する人は多いですが、なんだかんだでstability matrix便利ですよ。

設定について

automatic1111版では基本的にhypertileと呼ばれる省メモリ機能がオンになっているのですがSD1系統を使っていたときに色が破綻しまくったのであえてオフにしています。ちなみに起動時の引数はこんな感じ。

--medvram --medvram-sdxl --xformers --skip-python-version-check --no-download-model --opt-channelslast --no-half-vae

本当は--xformersを--opt-sdp-attentionにしたいのですが--xformersのほうがメモリ使用量が小さいという話だったので。
加えて--precision-halfでメモリの使用を削減したいのですが、vaeがフルサイズである関係上--precision-halfは干渉して起動しなくなるので泣く泣く削除しました。
もしfloat16のvaeを使用する場合やSD1系で生成するなら--precision-halfは生成時間の短縮になるのでおすすめです。

--skip-python-version-checkや--no-download-modelはおそらくstability matrix用のものなのでgithubから直接クローンした場合はなくてもいいと思います。

※忘れてました。SDXLのみFP8の設定にしています。

使用するモデルと出力サイズについて

SDXLの標準的なサイズは1024x1024ですよね。これ以下だと品質が低下するとかで公式モデルでは推奨されていないと思います。
ただし今使っているraemuXLというアニメ系のモデルではこれを半分の640x1024にしてもまともに生成してくれたりします。もちろんたまにおかしなクローズアップ画像とかも出力されますが。

ちなみに640x1024って5:8なので黄金比に近い比率になります。縦長なので迫力は落ちますがどれだけすごいかを実感するにはいい感じです。

「それじゃあダメなんだよ、フルサイズでなきゃ!」という方、ご安心を。これは後でimg2imgを使用すれば結構なんとかなります。
これは需要があれば追記するなりで説明しようとおもいます。

ちなみに16:9の場合は1024x576というサイズで先に作って、これを1280x720にimg2imgを使ってアップスケールするということも可能です。

追記:img2imgで拡大するための方法

せっかくなのでついでに書いておこうと思います。

と言っても簡単な話でPNG Infoで画像のデータを参照してimg2imgに飛ばし、Resize and fillで画像サイズを640x1024から1024x1024に変えるだけです。ただしこの際にはTiled VAEを使っておかないと高確率でout of memoryのエラーが出ます。また、latent upscaleにするとこのやり方では高確率でおかしな絵が出来上がります。

もちろん前提条件としてシード値や使用モデルは同じものでないと絵柄が変わったりします。あえて変えてみるのも面白いですが。

あとDenoising Strength(ノイズ除去強度)は初期値の0.75かそれ以上のほうがうまくいく感じです。あまり高すぎるとステップ数が増え、内容そのものが変化するため少しずつ調整してお試しください。

小技としてはシード値の横にあるextraにチェックを入れてvariation seedにシードと同じ値を入れ、resize seed from widthとresize seed from heightに元の画像サイズである640と1024を入力して生成するとシード値だけの時よりも元の画像の内容に近くなるようです。variation strengthはこの使い方だとあまり効果はないので一応0.5で使っています。
この機能は本来微調整のためにあるという話ですが、使ってみると「なるほど…」という感じです。

いきなり1024x1024で作成するより、元絵となるものがあるので修正もしやすいですし、複雑なものでないのならばこういう方法もあるという話でした。

所要時間

640x1024でだいたい30~40秒前後ってところですね。SD1系の場合は同条件で15~20秒程度だったのでやはり2倍の時間はかかるようです。
あと、やっぱりそれなりに発熱はあるので涼しい部屋でお試しください。

それでもメモリ不足のエラーが発生する場合

特に最後のVAEによるデコード部分でメモリ不足になることが多いみたいです。その場合には拡張機能のtiledDiffusion with tiled VAEをインストールしてからtiled VAEを使用してみてください。おそらく値は初期値でも問題ないはずです。少しデコード時間はかかりますがエラーは減ると思いますよ。

以上、久々に文章を書いたのでおかしな感じもありますがリハビリがてら書いてみました。「できた画像が見たい」とか「どうやって1024x1024にするの?」という疑問はコメントの方でお願いします。需要があれば追記するかもしれません。

この記事が気に入ったらサポートをしてみませんか?