【Stable Diffusion】TensorRTアクセラレーションで生成速度を最大10倍向上させる設定・トラブルシューティングガイド

問題の概要:TensorRT有効化時のエラーと速度向上の課題

Stable Diffusion WebUI (Automatic1111/Fooocus等) で画像生成を高速化するため、NVIDIAの推論エンジン「TensorRT」を有効化しようとした際、ユーザーは様々なエラーに遭遇します。代表的な問題として、「torch.cuda.OutOfMemoryError」や「TensorRT モジュールが見つからない」、「エンジンファイルのビルドに失敗」などが挙げられます。また、設定が複雑で、公式ドキュメントだけでは初心者には手順が分かりづらいという課題もあります。本記事では、これらのエラーを解決し、Stable Diffusionの推論速度をGPUネイティブで最大5〜10倍(モデル・設定に依存)向上させるTensorRTの有効化方法を、具体的なコマンドとトラブルシューティングを交えて解説します。

原因の解説:なぜエラーが発生するのか?

TensorRT有効化時のエラーは、主に以下の3つの原因に分類されます。

1. 環境構築の不備

TensorRTは特定のバージョンのCUDA、cuDNN、PyTorchと互換性を持つ必要があります。Stable Diffusion WebUIが使用するPyTorchバージョンと、インストールしようとするTensorRT Pythonバージョンが適合していない場合、モジュールインポートエラーが発生します。

2. エンジンビルド時のリソース不足と設定ミス

TensorRTは、使用するStable Diffusionモデル(Checkpoint)、VAE、画像サイズ、バッチサイズごとに最適化された「エンジンファイル」を事前にビルド(コンパイル)する必要があります。このビルドプロセスは大量のVRAMを消費し、OutOfMemoryErrorの主要原因となります。また、誤ったプロファイル設定(最小/最適/最大解像度)でビルドすると、実際の生成時にエラーが発生します。

3. 拡張機能間の競合

「Stable Diffusion WebUI Forge」など、WebUIのフォークバージョンを使用している場合、または「TensorRT」拡張機能と他のカスタムスクリプトが競合している場合に、予期せぬ動作を引き起こすことがあります。

解決方法:ステップバイステップでの有効化手順

ステップ1: 前提条件の確認

まず、お使いの環境がTensorRTに対応しているか確認します。NVIDIA GPU(RTXシリーズ推奨)と十分なVRAM(少なくとも8GB、余裕を持って12GB以上)が必要です。コマンドプロンプトまたはターミナルで以下を実行し、CUDAバージョンを確認してください。

nvcc --version
# または
nvidia-smi

WebUIのPyTorch CUDAバージョンも確認します。WebUIの起動時のログ、または以下のコマンドで確認可能です。

python -c "import torch; print(torch.__version__); print(torch.version.cuda)"

ステップ2: TensorRT拡張機能のインストール

Stable Diffusion WebUI (Automatic1111) の「Extensions」タブからインストールする方法が最も簡単です。「Available」→「Load from」をクリックし、検索ボックスに「tensorrt」と入力します。「sd-webui-tensorrt」拡張機能をインストールし、WebUIを再起動します。あるいは、以下のコマンドで手動インストールも可能です。

cd stable-diffusion-webui/extensions
git clone https://github.com/NVIDIA/Stable-Diffusion-WebUI-TensorRT
cd Stable-Diffusion-WebUI-TensorRT
pip install -r requirements.txt

ステップ3: TensorRTエンジンのビルド(最重要ステップ)

1. WebUIを再起動後、「Settings」→「TensorRT」を選択します。
2. 以下の主要パラメータを設定します。

  • Model hash: 使用するチェックポイント(モデル)を選択。
  • VAE: モデルに応じたVAEを選択(オプション)。
  • Build static shapes: 固定解像度ならチェック(高速)。動的サイズが必要なら未チェック。
  • Min/Opt/Max resolution: 例えば512×512のみ使うなら、全て「512×512」に設定。動的範囲が必要なら「512×512」「768×768」「1024×1024」などと設定。
  • Max batch size: VRAM容量に応じて設定(4〜8が一般的)。

3. 「Build Engine」ボタンをクリックします。このプロセスには数分から数十分かかり、大量のVRAMを使用します。VRAM不足エラーが発生した場合は、Max batch sizeを下げる、または使用する解像度を下げることで解決できる場合があります。

ビルド成功時は、stable-diffusion-webui/models/TRT_engines/ 以下に .plan または .engine ファイルが生成されます。

ステップ4: TensorRTでの画像生成

1. 「txt2img」または「img2img」タブに移動します。
2. 画面左上の「チェックポイント(モデル)選択」の隣にある「🔄(リフレッシュ)」アイコンをクリックします。
3. モデルリストから、先ほどビルドしたモデル名の末尾に「[TensorRT]」と付いたものを選択します。
4. 通常通りプロンプトを入力し、「Generate」をクリックします。初回実行時はエンジンのロードに数秒かかりますが、2枚目以降は大幅に高速化されているはずです。

コード例・コマンド例

エラーメッセージ例と対処法

エラー1: モジュールインポートエラー

ModuleNotFoundError: No module named 'tensorrt'

解決策: TensorRT Pythonパッケージが正しくインストールされていません。CUDAバージョンに合ったwheelファイルをNVIDIA公式サイトからダウンロードし、手動でインストールします。

# 例: CUDA 12.1, Windows用
pip install tensorrt-8.6.1-cp310-none-win_amd64.whl
# または、PyPIのバージョン(互換性に注意)
pip install tensorrt --extra-index-url https://pypi.nvidia.com

エラー2: VRAM不足によるビルド失敗

[TensorRT] ERROR: CUDA out of memory. To allocate...
torch.cuda.OutOfMemoryError: CUDA out of memory.

解決策: ビルド設定をより軽量化します。WebUIを一旦終了し、コマンドラインから低VRAMモードで起動してからビルドを試みる方法もあります。

# webui-user.bat (Windows) または webui.sh (Linux/macOS) のコマンドライン引数に追加
set COMMANDLINE_ARGS=--medvram --lowvram --always-batch-cond-uncond
# その後、WebUIを起動し、ビルド設定のMax batch sizeを1または2に下げて再試行

エラー3: エンジンロード時の形状エラー

[TensorRT] ERROR: Parameter check failed at: ...
[TensorRT] ERROR: ... binding to input 0 named x mismatch.

解決策: 生成時に指定した画像サイズが、エンジンビルド時に設定したMin/Opt/Max範囲外です。ビルドし直すか、生成サイズをビルド時の範囲内に収めてください。

まとめ・補足情報

TensorRTを有効化することで、Stable Diffusionの画像生成速度は劇的に向上します。しかし、その恩恵を受けるためには、環境の互換性確認適切なエンジンビルド設定、そして十分なVRAMの確保が不可欠な三大ポイントです。特に、異なる解像度やバッチサイズで生成したい場合は、それらを全てカバーするように「Min/Opt/Max」を設定してエンジンをビルドする必要があります。

また、TensorRTエンジンはモデル固有の最適化ファイルです。チェックポイントモデルを変更したり、VAEを変更したりした場合は、その都度新しいエンジンをビルドする必要がある点に注意してください。一度正しく設定できれば、繰り返し使用するワークフローにおいて、時間の節約と生産性向上に大きく寄与する強力なツールとなるでしょう。トラブルが発生した場合は、WebUIのコンソールログとstable-diffusion-webui/models/TRT_engines/ディレクトリ内のログファイルを仔細に確認することが、問題解決の第一歩となります。

この記事は役に立ちましたか?