TensorRT

Last-modified: 2023-12-30 (土) 22:43:20

拡張機能:Stable-Diffusion-WebUI-TensorRT

https://github.com/NVIDIA/Stable-Diffusion-WebUI-TensorRT

Stable Diffusion web UI向けのNVIDIA純正の拡張機能。
NVIDIA公式は「パフォーマンスを倍化」と豪語している。
画像生成において3~8割の速度向上が確認できており、効果が高い。ただし、実際の所は環境や条件次第ではある。
Quicksettings listに「sd_unet」を追加することで、TensorRTの有効/無効を容易に切替できる。

一方で、現状ではまだ多数の課題を抱えているのも事実。
特に、仕様あるいは不具合による「縛り・制限」が多い。

  • 画像生成前の準備として、モデル(LoRAを利用したい場合はLoRAも)の変換工程が必要。数分かかる。
    一度変換すれば次回以降は必要ない。
  • LoRAについてはExperimental(実験的)とのこと。
    • プロンプト内のLoRAのWeight指定が反映されず、1.0として反映されてしまう。
    • 複数のLoRAを同時に適用することができない。同時に適用したい場合はSD Unetに「None」を選び、通常速度で生成することになる。
  • ControlNetを利用できない(=Noneにして通常速度で生成する必要がある)。Adetailerは動作確認済。
  • --medvramまたは--lowvramオプション利用時は、モデルの変換や画像生成時に問題が確認されている

最小要件

  • メインメモリ: 16GB以上
  • GPU: NVIDIA RTX(=2000番台以降)シリーズ、VRAM 8GB以上
  • ドライバ: 537.58 (2023/10/10)以降

導入方法

下記の通り。要するにいつもの拡張機能と全く同じである。
https://github.com/NVIDIA/Stable-Diffusion-WebUI-TensorRT#installation

1111起動時のpythone.exeエラー

2023/12/30現在、導入後に1111を再起動/起動する際に下記のエラーが表示される。
python_error.png
右上の×を何度か押してエラーメッセージを閉じれば1111自体は起動できるし、TensortRTタブも正常に表示される。
しかし1111を起動する度にこのエラーが繰り返し表示されるのは非常に邪魔だ。
一旦1111を終了し、venv\Lib\site-packages\nvidia\cudnn フォルダを中身ごと削除すれば、このエラーは表示されなくなる。

(旧情報)1111起動時のtensorrt_bindingsエラー

(2023/12/30) 拡張機能側の改良により、この問題は恐らく発生しなくなった……と思うのだが、念のため残しておく。

導入後にStable Diffusion web UIを起動する際、このエラーに遭遇してTensorRTタブが表示されない場合。

対策手順

対策手順

  1. Stable Diffusion web UIを終了する(ブラウザページとコマンドプロンプト両方)。
  2. TensorRT拡張機能のフォルダが「extensions\Stable-Diffusion-WebUI-TensorRT」にあるので、削除する。
  3. venvフォルダを削除する。としあき…としあきや…
  4. Stable Diffusion web UIを起動する。自動的にvenvフォルダが再構成されるため、数分かかる。
    Stable Diffusion web UIが起動したら、終了する(ブラウザページとコマンドプロンプト両方)。
  5. ここからが本番だ。
    WindowsのエクスプローラでStable Diffusion web UIのフォルダを開き、パスのとこに「cmd」と入力。
    (パスの文字列を上書きする形、つまり枠の中にcmdしか書いてない状態でEnterキーを押しましょう)
    ToMe1.png
  6. コマンドプロンプトが起動されるので、下記の通り入力。
    venv\Scripts\activate
  7. 同上。
    python.exe -m pip install --upgrade pip
  8. 同上。
    python -m pip install nvidia-cudnn-cu11==8.9.4.25 --no-cache-dir
  9. 同上。
    python -m pip install --pre --extra-index-url https://pypi.nvidia.com tensorrt==9.0.1.post11.dev4 --no-cache-dir
  10. 同上。
    python -m pip uninstall -y nvidia-cudnn-cu11
  11. コマンドプロンプトを閉じて、Stable Diffusion web UIを起動する。
  12. 普通の拡張機能と同様の手順でTensorRT拡張機能を導入する。
    今度はTensorRTのタブが表示されるはず。
    TensorRT_tab.png
    以上だ!

導入後の運用とTips

下記2つのページをよく読むと良い。役立つ情報が非常に多い。
https://github.com/NVIDIA/Stable-Diffusion-WebUI-TensorRT#how-to-use
https://nvidia.custhelp.com/app/answers/detail/a_id/5487

よくある質問

Static(静的)エンジンとDynamic(動的)エンジンの違い

https://nvidia.custhelp.com/app/answers/detail/a_id/5487 の下の方に詳しく書いてある。
Dynamicは広い条件に対応できるが、画像生成時の速度で若干劣る。また条件の幅を広げるほど、より多くのVRAMが使用されるともある。

Defaultエンジンの内容

https://github.com/NVIDIA/Stable-Diffusion-WebUI-TensorRT#more-information

Hires.fix

https://github.com/NVIDIA/Stable-Diffusion-WebUI-TensorRT#common-issueslimitations
現状では、1つのエンジンで拡大前・拡大後の両方の解像度に対応させる必要がある。
拡大前と拡大後をそれぞれ異なるエンジンに処理させると、画像生成中にエンジンの切替処理が頻発してしまい、実用に耐えない。
将来的に複数のエンジンをキャッシュできるようになるといいのだが……「続報をお待ちください」はそういう意味なのかもしれない。

LoRA

LoRAデータを専用の形式に変換する必要がある。TensortRTタブの中にTensorRT LoRAのタブがあるので、そこから。
この変換を行わなくても速度面の恩恵は受けられるが、肝心のLoRAの効果が十分に発揮されない。テキストエンコーダー部分だけが適用される。
また変換しても、プロンプト内で指定するLoRAのWeightは無視され、1.0として適用される。
複数のLoRAを同時に適用することができない。
なおLoRAのファイル名に半角スペースが使用されていると、変換時にエラーを吐いて失敗するので注意。

画像生成時に使用されるエンジン

ユーザーが指定できるのはSD Unetまで。具体的なエンジンは指定できない。
恐らくはプロファイルのOptimal~の内容によって判断されているのではなかろうか。
使用されたエンジンはコマンドプロンプトの表示を見れば一応分かる。

前回まで表示されてたTensorRTタブが消えた

RuntimeError: dictionary changed size during iteration
SD Unetを「None」に変更してからStable Diffusion web UIを再起動すると、復活するかもしれない。

としあき達の反応

もっと見る

333 無念 Name としあき 23/10/18(水)08:19:33 ID:p/kmWlcg No.1148463611 そうだねx2
Batch count1 Batch size5で普段12~13秒なんだけど
7秒くらいになったゾ
インスコ中エラー吐いてて起動時にもエラー吐いてるけど動いたわ

10 無念 Name としあき 23/10/18(水)12:31:25 ID:KM.omERs No.1148508963 そうだねx3
前スレで話のあがってたNVIDIA製のTensorRT拡張機能ためしてみた
バッチ1 5枚生成(Adetailer補正あり) 00:50→00:33 34%高速化
バッチ4 10枚生成 02:41 →01:52 31%高速化
って感じで目に見えて速度が上がった
Hires出来ないとかLoRA使おうとしたらモデルへのマージが必要とかあるけど ガチャをするのはいい感じ
若干出力画像に変化でたけど許容範囲ないかな

あと前スレで教えてくれたとしあき
エラーになってるdllをディレクトリごと消しちゃえばエラーは出なくなったよ

74 無念 Name としあき 23/10/19(木)00:29:36 ID:4zkVvCHE No.1148737989 そうだねx5
前スレにあったTensorRTアクセラレーションがうまく導入できない場合の解決策
https://github.com/NVIDIA/Stable-Diffusion-WebUI-TensorRT/issues/41
だけど、webアドレスの自動アシスト機能?のためそのままやるとインストールできずエラーになるので注意ね
誤:「python -m pip install --pre --extra-index-url https://pypi.nvidia.com/tensorrt==9.0.1.post11.dev4 --no-cache-dir」
正:「python -m pip install --pre --extra-index-url https://pypi.nvidia.com tensorrt==9.0.1.post11.dev4 --no-cache-dir」
("pypi.nvidia.com"のあとに"/"は入れてはいけない )

文だけだとさびしいのでおっぱい貼る

142 無念 Name としあき 23/10/19(木)02:32:08 ID:lKbXg5IE No.1148761408 そうだねx2
TensorRT動かせるようになったので試してみたが3x10で31秒かかるところが23秒になった

270 無念 Name としあき 23/10/19(木)10:20:00 ID:pzrelK/U No.1148802673 そうだねx1
https://twitter.com/Yacamochi_db/status/1714594147515207729
完全に入れ得ってわけでもないのか
うーむ

272 無念 Name としあき 23/10/19(木)10:26:33 ID:nd/ZCx7k No.1148803794
>完全に入れ得ってわけでもないのか
決まり決まった条件で生成させると早いけど 融通がきかなくなる感じね
低解像度でガチャするのに向くと思う

45 無念 Name としあき 23/10/19(木)19:28:18 ID:YtYm4PCg No.1148939660 そうだねx4
たておつ
TensorRTで1.5倍速

22 無念 Name としあき 23/10/19(木)23:20:54 ID:CyybYAzc No.1149036401 そうだねx2

1697725254468.png

TensorRTはこんな感じで普段使うパラメータの範囲入れて作ることにした
倍とはいかなくても1.8倍程度には早くなるのありがたい

281 無念 Name としあき 23/10/22(日)15:44:04 ID:Aks1TOVs No.1149896183 そうだねx1

1697957044382.png

>>LoRAそのまま使えんのだっけ?
>モデルをTensorRT用に変換するときにLora1個だけ焼き込める感じ
丁度いまLoRAもテキストエンコーダーだけはTensorRTでも適用されてるんじゃないかと思ってためしてみた
凄く雑に学習させたテキストエンコーダーのみのブルマ学習を通常の生成とTensorRTで生成してみた画像の比較
やっぱりUnetがダメなだけでテキストエンコーダーはTensorRTでもそのまま適用されてそう