stable-diffusion-webui の TensorRT 拡張(まさかのNVIDIA公式)を使うと早い!!!ので使い方など
【警告】
私は専門家ではありません!!!
なにかトラブルが起きても責任は取れません!!!
もし試す場合は自己責任でお願いします!!!
また、今回の記事は若干むずかしめな内容を含んでいます!!!
途中で動悸や眩暈が生じた場合は速やかにページを閉じてください!!!
今回はみんな大好き Stable Diffusion web UI を高速化する TensorRT という機能を使えるようになる拡張機能の説明です
なお、なんか結構まだ親切じゃない気がするので
好奇心旺盛な人と速度命な人以外は試さない方がいいかもです
試してもいいけどね!
公式のサポートページはこちらにあります
で、何?どんなもん?
めちゃくちゃ適当な説明をすると、
普通のモデルをあなたの環境と決められた生成条件に合わせた専用のモデルに変換することで効率が上がってめっちゃ処理が早くなる
みたいな感じです多分。しらんけど
どれぐらい処理早くなるの?
NVIDIA の公式のサポートサイトに比較のグラフがあります
素の状態に対して xformers を使った場合と TensorRT を使った場合の速度比較です
512x512 と 768x768 の画像の生成で xformers は 1.4 ~ 2倍ぐらいの高速化しているのに対し、TensorRT は2.5 ~ 3倍の高速化しているという結果ですね
「xformers ってなんやねん!」っていう人もいると思いますが細かいことは気にしないでください。とりあえず早いんだよ!
公式が言ってることは信じがたいので実際に試してみました
これが実際に縦横1024pxの画像を生成している映像だ!
生成ボタンを押して表示されるまでは大体3秒強
同条件で TensorRT をオフにして生成してみたら1枚5秒強だったので確かに速い!
フルHD(1920x1080)だと6秒弱でした(オフだと9秒強ぐらい)
NVIDIA ウソ言ってなかった!
わたしのパソコンでも使えますか?
以下の環境が必要です
16GB 以上のメインメモリ
NVIDIA RTX シリーズのグラフィックボード(VRAM 8GB以上)
NVIDIA のグラフィックドライバのバージョン 537.58 以上
(2023/10/10以降のもの)
RTX 搭載だったら多分大丈夫と言っていいだろう!
ドライバはアップデートする必要が多分あります!
(NVIDIAのサイトか GeForce Experience あたりで更新しよう!)
あとSDXLにも対応してるけど実質まだ使えません!
(正確には webui をベータ版にしないと使えない)
デメリットはありますか?
あります!
以下が制約です
モデルごとに変換の作業が必要(ちょっと時間かかる)
ControlNet とか使えなくなるはず(※試してない)
LoRA を使うのがややこしくなる?(※試してない)
出力画像の解像度は 64 の倍数のみしか許されなくなる
なんか他の拡張機能も動かなくなるのあるかも?(※未確認)
けど有効無効の切り替えは一瞬でできるので別にそこまで問題ではないです
(※個人の感想です)
実際に使ってみよう!
始め方は普通に拡張機能を入れるだけです
でも選ばれし者じゃなかった場合はインストール後にエラーが発生するらしい!
拡張機能のインストールのところの URL に以下を入力してください
https://github.com/NVIDIA/Stable-Diffusion-WebUI-TensorRT
で、Apply and Restart UI… じゃなくて webui を再起動したほうがよいです
再起動後に TensorRT タブが出現した人は選ばれし者です
今すぐに使い始めることができます。おめでとうございます
TensorRT タブがでてこなかった人
残念ながらあなたの環境ではそのままでは使えません
解決方法はよくわからないので頑張ってください…
(torch2 になってなかったから更新したら動いたパターンと、よくわからないまま venv 消したら動いたパターンは確認しました)
TensorRT 形式にモデルを変換する
で、さっき☝のどこかで書いた通り変換をする必要があります
変換したいモデルを選択(生成できる状態)して、
Export Default Engine と書いてあるオレンジのボタンを押してください
すると下の方にこんな表示が出ます
ここで(Error)みたいなのが出ていたら、以下を試してみてください
起動設定に medvram とか lowvram がついてたら一旦消す
作業前に webui 設定画面の Actions から Unload SD checkpoint to RAM を押してみる
順調に進んでいる場合は、以下のようにメッセージが続きます
誰も必要としてない説明をすると、
1. モデルを ONNX みたいな形式に変換(変換済みだったらスキップ)
2. 変換された ONNX から TensorRT Engine みたいな形式に変換
みたいな順序で処理が進みます
この処理中 webui を起動しているターミナル画面にはエラーと警告がアホみたいに表示されますが、処理が止まってなければ害はありません(多分)
最後まで完了すると、以下のメッセージが表示されます
変換完了後、使うためには再読み込みが必要です
一番下の Available TensorRT Engine Profiles の左にある🔄ボタンを押してください
再読み込み後もっかい TensorRT のタブを開いて一番下を見るとこんな感じのが増えてるはずです
SDv1系のモデルで Default で作成するとこれと同じ状態になっていると思います
この表が示していることは以下の通りです
対応画像サイズが 512x512 ~ 768x768
対応バッチサイズが 1 ~ 4
対応しているトークン長が 75 ~ 150
(プロンプト入力欄の右上に表示されてるやつ)
この条件に沿った設定にして、生成してみましょう
はや~い!
これであなたも TensorRT 使いだ!
逆に遅くなった!という人!
もしかしたらVRAM不足かもしれません
TensorRT を使用すると通常のモデル + α のVRAMを使用するのでメモリ不足に陥りやすくなります(メモリ不足になるとめちゃくちゃ遅くなる)
起動オプションに medvram / lowvram などをつけてみてください
なんも変わらんわ!って言う人は webui 設定画面の
Stable Diffusion → SD Unet が Automatic になっていることを確認してください
ここで試しに条件から外れた設定(1024x1024とか)で生成してみましょう
たぶん無事エラーになります。これが代償…
768x768 程度じゃ満足できないんだが?
そりゃそうなのでより大きな解像度に対応したものを作成しましょう
もう一度 TensorRT のタブを開き適当にプリセットを選びます
おもむろに Advanced Settings を押すと詳細設定が出るので、ここをいじるとお好みの設定で変換することができます
(Optimal ~ は最適って意味らしい)
また、Use static shapes. にチェックを付けると、ピンポイントな設定専用のものを作成します
チェックを外すと、作れる範囲が柔軟なものを作成することが出来ます
適当に設定したら Export Engine をクリック!あとは流れで
どう考えても柔軟なほうがええやんけ!って思いますが柔軟にさせると若干遅いかつVRAMをより多く使うようになってしまうらしい
ぼくのかんがえたさいきょうのせってい
と、ここまで説明をしてきましたがぶっちゃけめんどくさいので全対応の構えのヤツを一個作ったほうが楽です
こんな感じで作ろう!
それぞれの最高値の設定を上げると作成時のVRAM使用量がめっちゃ変わるから適当に調整してね!
Multi Diffusionを使ってる場合は下限も下げたほうがいいよ!
なんかいっぱい変換しちゃったけど大丈夫?
いっぱいあっても自動で一番最適なものが選ばれるっぽいのであまり気にしなくてもよいみたいです
整理する機能は現状ないっぽいけどそう遠くない未来に更新が来そうなオーラがあるのでそれを待とう!
作られたものは models/Unet-trt の中にありますが、ファイルだけ消すとおかしくなります
おかしくなってしまった場合は model.json を消すか中身を見てどうにかしてください!
まとめ
確かに早いけどクセが強いね!でもおもろいね!
今後さらに進化するといいね!
他にもなんか色々細かい話はあるけどややこしいので全部割愛します
この先は君の目で確かめてみてくれ!
感謝するぜ ここまで読んでくれた
大事なLoRA使うときの話とかがないんですけど
君の目で確かめてみてくれ!
○○っていう拡張機能はつかえますか?
君の目で確かめてみてくれ!
△△はできますか?
君の目で確かめてみてくれ!
~~っていうエラーがでてできないんですけど
エラーログを君の目で確かめてみてくれ!
おまけ
全然関係ないけど Civitai でモアイコンテスト開催してます。参加してね!
※ ここまでのモアイは全てDALL-E 3製です