NVIDIA、Stable Diffusionを倍速にするTensorRT。新ドライバで対応
という記事を見たので、
できるかどうか試して見た。
ちなみに、私のグラボは RTX 4060 Laptop 8G である。
とりあえず、公式サイトとgit辺りを読みながら
拡張機能へ放り込む
TensorRT Extension for Stable Diffusion Web UI
NVIDIA Stable Diffusion WebUI TensorRT github
UIを再起動したら、こんなエラーが出まくるようになったが(4つくらい)、
python.exe エントリポイントが見つかりません。
たぶん変換はできているようなので、大丈夫だろう
もしかすると、うっかり、ドライバの更新を忘れていたせいだろうか
この作業をやる前に、とりあえず、ドライババージョンは 537.58 にしておいた方がよいだろう。
これが悪かったのかサイトに書いてあるような進捗がGUIには表示されなかったが(一応くるくるアイコンは動いているが)、
CUIの方ではゴリゴリ動いている感じである。
CUI側で has been save to disk みたいなのが出たので、
変換が無事終わったのだろう、ショボいGPUだったので、
だいたい10分くらいかかった
それと、GUI側にもExported Successが表示されたので、
たぶん大丈夫なのであろう
自分はよく使う yayoiMix を変換してみた。
こんなInfoが出てくるが、onnxファイルは勝手に作ってくれるので、
気にしなくてもよいようだ
とりあえずデフォで変換したので、あまり大きな画像は扱えないのだが
何もしないで描かせた場合
30Samplingで1分くらい、
顔補正(ADetailer)込みで1:59かかったものが
TensorRTで描かせたら
30Samplingが16秒、
顔補正含めても37秒で終わった。
爆速になったのは間違いない。
とりあえず、変換時に膨大なGPUとVRAM消費がされるため、
例によってカクカクとなって低速になってしまうため、
一度PCを再起動するハメにはなったが、
描画する上では特に問題はなさそうである。
あと、元のmodel(左)と変換model(右)で描画される画像も若干異なるようだ。
一応Loraなしで描くと若干顔が遠のくので、Loraは読んでいる感じだが、
なんか学習データが遠のいているように見える。
Loraも変換出来るようなので、
その辺も試して見るかな。
あとは、もう少しサイズなどをカスタマイズして変換しておかないと
作画エラーしてしまうので、いろいろと調整は必要そうだ。
現在の課題は、そのサイズのせいだろう、
Hires. fixに移行すると落ちてしまうので、
やはりサイズの調整は必要そうだ
追記
やはり、学習Loraも変換しておいた方が良さそうだ
変換モデル+学習Lora
みたいな感じで作成されて、
さっきのシードが
こんな感じになった。
あとは、サイズの方の問題だけ。
これは公式にも書かれているとおり、カスタマイズでできるので、
説明は省略するが、
やはり8Gだと変換時にメモリオーバーになってしまうようだ・・・
なんどかいじってもムリっぽいので、
もしかしたら、みたにデフォで作ったtrtを消してみる
場所は models 下の
Unet-onnxとUnet-trt下のファイルをズバッと消して空っぽにする。
その後はお好きなサイズを設定して、Export Engine
1024までメモリエラーなく作成されたっぽい
とりあえず、さっきまで描けなかった768以上が描けるようになった。
でも、相変わらずHires.fixとの相性は悪くて、途中でコケるが、
1024の画像もサクサク作成できるので(40秒くらい)、
自分はこれ以上の画質は今のところ求めていないので良いかなとも思っている。
ちなみに、いくつかサイズを調整して描かせた感じでは、
この相性の悪さが、64x64に収めないといけないから
という制約から来るらしいようで、
Upscale 前と後のサイズがお互いに64の倍数に設定しておくと成功する感じだ。
例として、512x768 > 1.25 > 640x960 と言った感じだ。
ただこれだと1024を割ってしまうのだが、
そもそも爆速になったので、元の絵を描きたい最大にして、
Upscale を1にして描かせるというのもある。
まぁ下図をみると分かるように、
ちょっとピントが良くなったかなぁ程度なので、
好みで使うか使わないかを考えるとよいだろう、と言ったところだろうか。
縦1024で、右は Hires.fix有効の Upscale1 で描かせたもの
あと、VRAMがほぼ振り切れっぱなしの状態だが、
1024クラスの絵を10枚とか描かせても安定して2分/枚程度で作画し続けてくれる。
無いときだと、こんな状態が1度でも起きれば一気にパワーダウンだったことを考えると
かなり良くなったと言える。
追記2
自分が使うサイズよりやや大きめに設定してみた。
とりあえず8Gでも一応作ってくれたが、
上の通り大きめ画像はメモリがいつも天をつく感じだ。