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

問題の概要:TensorRT有効化時のエラーと設定の複雑さ

Stable Diffusion WebUI (Automatic1111/FORGE等) は、NVIDIA GPUを使用して高速な画像生成を可能にしますが、デフォルト設定ではGPUの性能を最大限に引き出せていない場合があります。特にNVIDIAの推論エンジンであるTensorRTを活用することで、生成速度を数倍から場合によっては10倍以上向上させることが期待できます。

しかし、TensorRTを有効化する過程では、以下のような典型的なエラーや課題に直面することが多く、初心者から中級者にとって高いハードルとなっています。

  • エラー例1 (ビルド失敗): ERROR: Failed to build TensorRT engine. Unsupported operation: Constant
  • エラー例2 (モデル互換性): RuntimeError: The ONNX file is incompatible with TensorRT. Input/Output names mismatch.
  • エラー例3 (メモリ不足): [TensorRT] ERROR: CUDA out of memory.
  • 課題: ONNX形式へのエクスポート、エンジンビルド、WebUI連携という複数ステップが必要で、設定が煩雑。

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

TensorRTアクセラレーションが正常に機能しない主な原因は、以下の3つに大別されます。

1. モデルとTensorRTの互換性問題

Stable Diffusionのモデル(.ckpt, .safetensors)はPyTorch形式です。TensorRTはONNXを経由して最適化エンジン(.plan, .trt)をビルドします。この変換過程で、元のモデルに含まれるTensorRTがサポートしていない特殊な演算(Ops)が使用されていると、ビルドエラーが発生します。また、モデルの構造(UNet, VAE, CLIP)ごとに個別のエンジンが必要です。

2. 環境構築とバージョン不一致

TensorRT、CUDA、cuDNN、PyTorchのバージョンが互いに互換性を持っている必要があります。例えば、TensorRT 8.6.xはCUDA 11.x系、TensorRT 10.xはCUDA 12.x系と組み合わせる必要があり、これがずれるとライブラリのロードに失敗します。WebUIの拡張機能やスクリプトも、特定のバージョンに依存している場合があります。

3. メモリと最適化プロファイル

TensorRTエンジンのビルド時には、推論時よりも多くのGPUメモリを消費します。また、ビルド時に指定する「最適化プロファイル」(想定する画像サイズ、バッチサイズ)が、実際の生成時に指定するパラメータと合致しない場合、エンジンの再ビルドが発生したり、効率が低下したりします。

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

ここでは、比較的安定して動作する「TensorRT拡張機能」を使用する方法を、詳細な手順で説明します。環境はWindows 11, NVIDIA RTX 40シリーズ, CUDA 12.1を想定します。

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

まず、NVIDIAドライバ、CUDA Toolkit、cuDNNが適切にインストールされていることを確認します。コマンドプロンプトで以下を実行:

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

torch.cuda.is_available()Trueを返すことを確認してください。

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

WebUIの「Extensions」タブ → 「Install from URL」を選択し、以下のリポジトリURLを入力します。

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

インストール後、WebUIを再起動します。「Settings」→「User interface」で「Reload UI」ボタンを押すと、左側のメニューに「TensorRT」タブが追加されているはずです。

ステップ3: モデルをONNX形式にエクスポート

1. 「TensorRT」タブを開きます。
2. 「Model Converter」セクションで、使用したいStable Diffusionモデル(例:sd_xl_base_1.0.safetensors)を選択。
3. 必要に応じて「Force Export」にチェック(既存のONNXファイルを上書き)。
4. 「Export ONNX Model」ボタンをクリック。
コンソールにONNX export successのようなメッセージが表示されるまで待ちます。エクスポートされたONNXファイルはwebui/models/onnxディレクトリに保存されます。

ステップ4: TensorRTエンジンのビルド

1. 「TensorRT」タブの「TensorRT Engine Builder」セクションに移動。
2. 先ほどエクスポートしたONNXモデルを選択。
3. 「Build Engine」セクションで、よく使用する画像サイズ(例:512×512, 768×768)とバッチサイズ(Static: 1, Dynamic: 1-4)を設定。最初はシンプルにStatic Batch=1, サイズ=512×512がおすすめ。
4. 「Build TensorRT Engine」ボタンをクリック。
このプロセスには数分から数十分かかることがあります。ビルドが成功すると、webui/models/tensorrtディレクトリに.planまたは.trtファイルが生成されます。

ステップ5: WebUIでTensorRTを使用して生成

1. 通常の「txt2img」タブに戻ります。
2. 画面左上のStable Diffusionチェックポイント(モデル)選択メニューから、先ほどビルドしたモデル名を選択します。通常、モデル名の後に「-TensorRT」のようなサフィックスが付いた項目が表示されます。
3. プロンプトを入力し、生成を開始します。
生成時にコンソールに[TensorRT]のログが表示され、また「Generation time」が大幅に短縮されていれば成功です。

コード例・コマンド例

トラブルシューティング用コマンド例

エンジンビルドの詳細ログを確認: WebUI起動時のコマンドプロンプトで、ビルドエラーの詳細が出力されます。メモリ不足の場合は、画像サイズやバッチサイズを下げて再ビルドします。

手動でのONNXエクスポート(拡張機能が失敗した場合):

# WebUIのディレクトリ内で、TensorRT拡張機能のスクリプトを直接実行
cd extensionsstable-diffusion-webui-tensorrt
python scriptsonnx_export.py --model-dir ....modelsStable-diffusion --model-name your_model.safetensors --opset 18 --force-cuda-gpu

既存の.planエンジン情報を表示:

# trtexecツールを使用(TensorRTインストールパス内にある)
"C:Program FilesNVIDIA GPU Computing ToolkitTensorRTbintrtexec.exe" --loadEngine="pathtoyourengine.plan"

設定ファイル例 (config.json)

TensorRT拡張機能の設定はwebui/models/tensorrt/config.jsonに保存されます。エンジンのパスや最適化プロファイルを手動で編集できます。

{
  "engines": {
    "sd_xl_base_1.0": {
      "filepath": "./models/tensorrt/sd_xl_base_1.0_xl.plan",
      "profile": {
        "height": [512, 768, 1024],
        "width": [512, 768, 1024],
        "batch": [1, 4]
      }
    }
  }
}

まとめ・補足情報

TensorRTを有効化することで、Stable Diffusionの画像生成速度は劇的に向上しますが、その過程ではモデル変換、エンジンビルド、環境依存といった課題があります。最初はベーシックな設定(Static Batch=1, 固定解像度)から始め、成功したら段階的に最適化プロファイルを広げていくことをお勧めします。

重要な補足点:

  • モデルごとのエンジン必要: LoRAやTextual Inversionを適用した場合は、適用後のモデル全体で新たにONNXエクスポートとエンジンビルドが必要になることがほとんどです。
  • VRAM容量: エンジンビルド時には推論時より多くのVRAMを消費します。8GB VRAMでは512×512サイズが限界となる場合があり、12GB以上を推奨します。
  • 精度のトレードオフ: TensorRTは高速化のためにFP16(半精度浮動小数点)やINT8(8ビット整数)量子化を使用します。これにより、極めて微妙な色合いやディテールがわずかに変化する可能性があります。画質を最優先する場合はFP32(単精度)でビルドするオプションを検討してください(ただし速度向上幅は小さくなります)。
  • 更新時の注意: WebUI本体や拡張機能を更新した後、TensorRTエンジンを再ビルドする必要が生じることがあります。

一度セットアップに成功すれば、その後の画像生成体験は格段に快適なものになります。エラーが発生した場合は、コンソールの出力メッセージをよく読み、モデルサイズやビルド設定を見直すことで、ほとんどの問題を解決できるでしょう。

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