Stable Diffusion Web UIの便利な拡張機能紹介記事です。
今回はNVIDIAが23年10月にリリースした、高速で画像生成ができる「TensorRT」の使い方についてご紹介します。
TensorRTとは?
TensorRTは、NVIDIAが提供するディープラーニングモデルを最適化できるツールです。
既存のモデルからTensorRT用のモデルを作成し、それを使用するとRTXのGPUで生成速度が約2倍になるというもの。
具体的な仕組みはわかりませんが、とりあえずTensorRTを使うと画像生成が高速化できます。
TensorRTがサポートしてるSD・必要スペック・解像度
24年1月現在サポートしているSDのバージョンは以下の通りです。
SD1.5、SD2.1、LoRA、SDXL, SDXL Turbo, LCM
必要スペックは、SDXL、SDXL TurboがVRAM12GB以上を推奨しており、それ以外は最低ラインを8GBとしています。
GPU | NVIDIA RTX GPUs with 8GB of VRAM |
RAM | 16GB RAM |
Connection | Internet connectivity during installation |
Driver | NVIDIA Studio Driver 537.58, Game Ready Driver 537.58, NVIDIA RTX Enterprise Driver 537.58, and above |
なお画像サイズにも制限があり、解像度は64の倍数にする必要があるとのことです。
hires.fixを使用する場合は、元のサイズ、アップスケール後のサイズともに64の倍数じゃないと使用できません。
・参考
TensorRT Extension for Stable Diffusion Web UI | NVIDIA
Releases · NVIDIA/Stable-Diffusion-WebUI-TensorRT
TensorRTをインストールする方法
インストール前にコマンドライン引数の確認
まずインストール前にコマンドライン引数の確認をしてください。
TensorRTは、メモリ不足などを防ぐために使用できる「--medvram」「--lowvram」のコマンドライン引数を設定しているとうまく動作しません。
--opt-sdp-attentionは使えます
もし使用している方は、「webui-user.bat」をテキストエディタで開き、上記のコマンドライン引数を削除してからStable Diffusion Web UIを起動してください。
TensorRTのインストール
TensorRTは通常の拡張機能と同じ方法でインストールできます。
Extensions→Install from URL→URL for extension's git repositoryに以下のURLを入力して、Installをクリックしてください。
https://github.com/NVIDIA/Stable-Diffusion-WebUI-TensorRT.git
インストール後にリスタート、または再起動すればインストールは完了です。
TensorRTの使い方
タブにTensorRTが追加されているので、そちらを開きます。
高速化したいモデルに切り替えておいてください。
Presetはそのままで「Export Default Engine」をクリックします。
そうするとTensorRT用のモデル作成が始まります。環境によって2分~10分程度かかるようです。
終わると画面下のOutputに「Exported Successfully」を表示されるので、これで最適化は完了です。
なお、TensorRT用のモデルは「stable-diffusion-webui\models」にあるUnet-onnx、Unet-trtのフォルダ内に作成されます。
通常のモデルと同じくらいのサイズになるため、不要になったらこちらから削除してください。
次にTensorRT用のモデルを切り替えられるようUIの設定を変更します。
Settingタブ→User interface→Quicksettings listに行き、sd_unetを追加してください。
sd_unetと入力すればプルダウンから選択できます。
追加したら設定を保存して、UIをリロードします。
UI上部にSD unetが追加されていれば、設定完了です。
TensorRTで画像生成&速度比較
SD UnetでAutomatic、または生成したTRT用のモデルを選択します。
Automaticは複数モデルがあるときに自動で選択してくれるので、基本はAutomaticで問題ありません。使用しないときはNoneを選択します。
あとはcheckpointを同じモデルにして、いつも通り画像生成するだけです。
同じプロンプト、シード値、パラメータで比較したところ、公式が発表している通り約2倍の速さで生成できました。
背景の木や家、指の結果が違いますが、クオリティにそこまで劣化はないと思われます。
モデル最適化後、最初の生成は少し時間がかかります。2回目以降はしっかり速度上昇の恩恵が得られます。
TensorRT使用:Time taken: 1.7 sec.
10枚分:Time taken: 17.7 sec.
TensorRT未使用:Time taken: 3.8 sec.
10枚分:Time taken: 29.5 sec.
※使用プロンプト
highest quality, masterpiece, 1girl, smile
Negative prompt: (worst quality:2), (low quality:2), (normal quality:2), lowres, normal quality, ((monochrome)), ((grayscale))
Steps: 20, Sampler: Euler a, CFG scale: 7, Seed: 620132928, Size: 512x512, Model hash: ef49fbb25f, Model: anyloraCheckpoint_bakedvaeBlessedFp16, VAE hash: 735e4c3a44, VAE: vae-ft-mse-840000-ema-pruned.safetensors, Clip skip: 2, Version: v1.7.0
TensorRTでHires.fixを使う方法
上記のPreset→defaultで作ったモデルだと、512から768にアップスケールできます。
※512をHires.fixで1.5倍
TensorRT使用:Time taken: 4.9 sec.
TensorRT未使用:Time taken: 11.5 sec.
それ以上のサイズ、または自分で縦横比を決めたい場合は、手動で設定が必要です。
TensorRTのタブで、Presetのプルダウンから「512x512 - 768x768 | Batch Size 1-4」を選択してください。
例えば512を2倍にアップスケールしたい場合は、Advanced Settingsを開いて、Max heightとMax widthを1024にします。
これでExport EngineをクリックしてTensorRT用モデルを作成すると、512×512をhires.fixで2倍にアップスケールし、1024×1024が生成できます。
TensorRT使用:Time taken: 9.4 sec.
TensorRT未使用:Time taken: 15.8 sec.
縦横比を変えたい場合は、min・Optimal・maxを変更します。
min height:768
Optimal height:768
max height:1536
min width:512
Optimal wifth:512
max width:1024
服の色が変わってしまいましたが、hires.fixを使用して速度も向上できました。
TensorRT使用:Time taken: 18.8 sec.
TensorRT未使用:Time taken: 30.5 sec.
TensorRTでLoRAを使う方法
LoRAを使う場合は、LoRAもTensorRT用に最適化する必要があります。
TensorRT→TensorRT LoRAに行き、使用したいLoRAを「LoRA Model」選択します。
Convert to TensorRTをクリックすれば、LoRAがTensorRT用に変換されます。
あとは普通に上記で変換したLoRAを使用して生成するだけです。
以前LoRAは1つのみ、weightも1しか適用できなかったのですが、ちょうど24年1月5日のアップデートがあり、複数使用・weightも反映されるようになりました。
複数使用する場合はそれぞれのLoRAをTensorRT用に最適化する必要があります。
※Surprised eyesとHyper detailerをweight0.5で使用した例
TensorRT使用:Time taken: 20.4 sec.
TensorRT未使用:Time taken: 32.8 sec.
2つのLoRAとweightが反映され、速度も向上できています。
TensorRT導入時に表示されるエラー
拡張機能インストール後、Stable Diffusion Web UIを起動すると以下のようなエラーが出る場合があります。
エラーが出ても使用には問題ないそうですが、消したい場合は以下のパスにある「cudnn」というフォルダを削除すれば直るそうです。
stable-diffusion-webui\venv\Lib\site-packages\nvidia
またgithubで同じエラーについて質問している方がおり、仮想環境をアクティブ化してnvidia-cudnn-cu11をアンインストールしたら直ったという報告もあります。
私はこちらの方法でエラーがなくなりました。
stable-diffusion-webuiのフォルダでターミナルを開き、以下のコードを1行ずつ実行するだけです。
./venv/scripts/activate
python -m pip uninstall -y nvidia-cudnn-cu11
Error installing in Stable Diffusion Web UI · Issue #12 · NVIDIA/Stable-Diffusion-WebUI-TensorRT
Stable Diffusion Web UIでTensorRTを使う方法まとめ
今回はStable Diffusion Web UIでTensorRTを使う方法について、ご紹介しました。
64の倍数という縛りがあり、サイズごとにモデルを最適化する必要がありますが、一度最適化してしまえば高速化が可能です。
特定のサイズで大量に生成したい方は、TensorRTを使うと生成効率化につながります。
また他にもいろいろ高速化の技術がありますが、個人的にTensorRTはそこまでモデルの特徴やクオリティを損なわず生成できる印象です。
プロンプトの内容も比較的しっかり再現してくれるので、バランス良く高速化したいという方はぜひTensorRTを使ってみてください。
参考になれば幸いです。