見出し画像

TensorRTの拡張機能で爆速ガチャ生成

割引あり

 TLで賑わっていた話題なので、私もやってみることにしました。

 TensorRT での爆速生成自体は随分前に局所的に盛り上がった話題だったのですが、どうも最近 WebUI の拡張機能として、まさかの NVIDIA の公式サポートで実装されたようです。

TensorRT 拡張機能は以下をサポートします。

・ Text-2-image and Image-2-image
・ Stable Diffusion 1.5 and 2.1
・ LoRA

必要最小要件

GPU - 8GB の VRAM を搭載した NVIDIA RTX GPU
RAM - 16GB RAM
Connection - インストール中のインターネット接続
ドライバー - NVIDIA Studio ドライバー 537.58
      Game Ready ドライバー 537.58
      NVIDIA RTX Enterprise ドライバー 537.58 以降

 使用までにちょっと特殊な手順が必要なのと、個人の環境によってはインストールに失敗したり、エラーがでたりするようなので、尻込みしてしまう人もいるかと思います。

 私も素人ですので質問にお答えするようなことはできませんが、私なりにやってみた手順を残すことでその一助になれればと思います。






TensorRT の 拡張機能をインストール



 今回は WebUI のインストール環境として、Stability Matrix を介してA1111版 の SD WebUI をインストールしている事を先にお断りしておきます。

 こちらの記事の通りの環境です。






Extensions から URL を入れてインストール



 WebUI を起動し、ExtentionsInstall from URL を選択しましょう。

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

 こちらのURLをコピペして、Install ボタンを押します。

 他の拡張機能をインストールするよりも少しばかり時間がかかりました
 焦らずじっくり待ってください。

 Install ボタン の下に完了した旨が出ましたら、次に進みます。



 ExtentionsInstalled で 「Stable-Diffusion-WebUI-TensorRT」 を確認し、Apply and quit を押して WebUI を再起動します。


 Stability Matrix で WebUI をインストールしている場合、動作が止まってしまっていますので、もう一度 Launch ボタンを押して起動しなおします。

なんか…、不穏なcodeが…。






python.exe - エントリポイントが見つかりません。



ぴろろん♪
ぴろろん♪
ぴろろん♪
ぴろろん♪

  あらら。 よく聞くエラーみたいです。

 この後、Stability Matrix から古い WebUI をアンインストールし、PCを再起動した後に再インストールしたところ、一度はエラーは出なくなりました。

 ただ残念なこと、その後ももう一度エラーが出てしまったので、再インストールだけでは完璧ではなさそうです。
 その後も出たり出なかったりで面倒なので、しっかりと対応をしておこうと思います。






CUDNNをダウンロードする

 


 こちらのページでダウンロードできます。

 ダウンロードするには、NVIDIAのアカウントが必要です。アカウントを持っていない場合は、アカウントを作成し、ログインします



Download cuDNN Library をクリック



順番にクリックしていく。

 今回は Download cuDNN v8.9.5 (September 12th, 2023), for CUDA 11.x を選びました。
 以前うちで解説した CUDA Toolkit との互換性を考えてのことです。

 これに関しては個人の環境にもよるかと思いますので、ご注意ください。

 コマンドプロンプトまたはターミナルを開き、以下のコマンドを実行すると現在インストールしているCUDAのバージョンを確認します。

nvcc --version

 色をつけた行の内容によると、うちはCUDAのバージョン11.8がインストールされていることがわかります。

 これに基づいてcuDNNのバージョンを選択すると、Download cuDNN v8.9.5 (September 12th, 2023), for CUDA 11.x のバージョンをダウンロードするのが適切なんだそうです。



 ダウンロードしたZIPファイルを解凍し、中身を確認します。



 次に、先ほどの 4つの エラーに書かれていたファイルを確認します。
 4つとも同じフォルダに入っています。



 私うちの環境だとCドライブA1111_20230923 フォルダに Stability Matrix でインストールしているので、

C:\A1111_20230923\Packages\ 以下のアドレスです。

stable-diffusion-webui\venv\Lib\site-packages\nvidia\cudnn\bin


 ダウンロードした CUDNNbinフォルダ の内容物で上書き移動し、更新します。

オレンジ部分が先ほどのエラーで出ていた4つのファイル

 もしかしたらこの4つだけ更新でも良いのかもしれませんが、中途半端に変えてしまうと別の不具合が出る恐れがあるので、私は丸ごと上書きしました。


 とりあえずこれでうちの環境ではエラーが出なくなりました。






TensorRT Extension タブを開く



 TensorRT を開くと、このようなUIが開きました。
 とりあえずアナウンスである右の文章を翻訳しておきます。

TensorRT拡張

 この拡張機能を使用して、NVIDIA RTX GPU用の最適化されたエンジンを生成し、TensorRTで最高のパフォーマンスを実現してください。以下の手順に従ってすべてを設定してください。

設定方法

1. 「Generate Default Engines(デフォルトエンジンを生成)」ボタンをクリックしてください。このステップは、GPUに応じて2〜10分かかる場合があります。他の組み合わせのエンジンも生成できます。

2. 設定→ユーザーインターフェース→クイック設定リストに移動し、「sd_unet」を追加してください。これらの設定を適用し、UIを再読み込みしてください。

3. メインのUIに戻り、ページの上部にあるsd_unetドロップダウンメニューからTRTモデルを選択してください。

4. TRTで加速された画像の生成を開始できます。他のエンジンを作成する必要がある場合は、TensorRTタブに移動してください。
楽しんでください!


追加情報

 
TensorRTは特定の解像度とバッチサイズ用の最適化されたエンジンを使用します。望むだけ多くの最適化されたエンジンを生成できます。

・「Export Default Engines」選択肢は、Stable Diffusion 1.5用に512x512から768x768の解像度と、SDXL用に768x768から1024x1024の解像度で、バッチサイズ1から4までのサポートを追加します。

・静的エンジンは、特定の出力解像度とバッチサイズをサポートします。

・動的エンジンは、パフォーマンスをわずかに犠牲にして、さまざまな解像度とバッチサイズをサポートします。より広い範囲を使用すると、より多くのVRAMが使用されます。


 各プリセットは「Advanced Settings(詳細設定)」オプションで調整できます。
 詳細については、TensorRT拡張のGitHubページをご覧ください。

画像青枠で囲た文章を翻訳



 日本語になりましたが、私にはさっぱりです。
 とりあえず、1つずつ進めていきましょう。




選択中のモデルから TensorRTエンジンを生成する



なんか、いろいろ選べるんですけど…?

 Preset 部分をクリックすると、いろいろ出てきました。


 よくわからないのでChatGPTちゃんに聞いてみたところ、

 私の普段のスタイルでは 「512x512 - 768x768 | Batch Size 1-4 (Dynamic) で良いんじゃねーの? 知らんけど」 と言われました。



 後でわかることですが、これから作るのは現在読み込んでいるモデルを参照してつくるエンジンみたいです。
 今入っているのは SD1.5 用の自作マージモデル です。

512x512 - 768x768 | Batch Size 1-4 (Dynamic) にしちゃうもんね!


 実はこれ、Default を選択した時と同じ設定らしいです。

 これにより、画像サイズ 512x512 ~ 768x768 およびバッチ サイズ 1 ~ 4 用の Stable Diffusion 1.5 用の TensorRT エンジンが生成されます。これは、ほとんどのユースケースをカバーするはずです。

https://nvidia.custhelp.com/app/answers/detail/a_id/5487


 Advanced Settings を開くと内容を自分で細かく設定できそうですが、初心者は Default で良いと思います。



 なんか右上に Info が出ましたが、エラーではないようです。

 「ONNXファイル見つかんねーから、こっちで勝手に作るわ」とか言ってますので、黙って見守りましょう。



 しばらくすると画面下部に「完成したぜ」と出てました。

 リサイクルマークを押すと、選択していたモデルと同じ名前がでています。
 これで私のマージモデル専用のエンジンができました。






TensorRTイメージ生成のアクティブ化



 Settings > User Interface を選択しましょう。

Quick Settings の欄をクリックして、 「sd_unet」を追加します。



 設定を保存してUIをリロードすると、画面上部に SD Unit 選択欄が追加されました。

 ここで対応したエンジンを選択して生成することで爆速化ができるようにうなるようですね。





生成してみる



ValueError: Input shape must be divisible by 64 in both dimensions.


 いつものごとく、400x600pix で生成しようとしたところ、エラーが出ました

 このエラーメッセージは、入力画像の両方の寸法(高さと幅)が 64 で割り切れなければならないことを示しています。

 たとえば、画像の寸法が 512x512640x640 のように 64 で割り切れる場合は問題ありませんが、400x600 のように 64 で割り切れない寸法の場合、このエラーが発生するそうです。


 サイズを調整することで、無事生成することに成功しました。

 大体1画像を3~4秒で生成してくれています。

 ガチャ引きとしてはかなりありがたい速度が出ますね。
 素晴らしい拡張機能に出会えたと思います。


 あとは LoRA も TensorRT 用にモデルを作り直さないといけないってことなんでしょう。
 土台ガチャの際によく使うLoRAは作っておいて損はなさそうです。

 ただ、現在は TensorRTモデル を1つしか使用できない模様。
 う~ん、prompt のみで絵柄を調節している方なら問題ないのかもしれません。

 私は自作の絵柄LoRAや、年齢感変更LoRAとか多用するので、ちょっと残念ですね。



 以下、画像サイズ用の覚え書きと、カスタムエンジンの生成結果を残しておきます。
 毎回計算するのめんどくさいですしね。

 あと、デフォルトだとサイズ縛り的にスマホ壁紙のような極端に縦長の画像が出せないんですよね。
 9:16  9:19.5 といったサイズに対応できるカスタム設定も残しておきます。




ここから先は

1,454字 / 6画像 / 2ファイル
この記事のみ ¥ 0〜

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