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

問題の概要:TensorRTアクセラレーションの有効化における課題

Stable Diffusion WebUI (Automatic1111) は、NVIDIA GPUを使用して高速な画像生成を可能にしますが、デフォルトの状態ではGPUの性能を最大限に引き出せていません。特に、RTX 30/40シリーズなどの比較的新しいGPUをお持ちのユーザーは、「TensorRT」というNVIDIAの推論最適化エンジンを活用することで、画像生成の速度を2倍から10倍まで向上させる可能性があります。

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

  • エラー例1: ERROR: TensorRT was not found. Please install TensorRT or disable it in the settings.
  • エラー例2: Failed to build TensorRT engine. Check your ONNX model and TensorRT installation.
  • 課題: 変換プロセスが複雑で、どのモデルをどの手順で処理すればよいかわからない。
  • 課題: 変換は成功したが、生成時にメモリ不足エラーが発生する。

本記事では、これらの問題を解決し、Stable Diffusion WebUIでTensorRTアクセラレーションを安全かつ効果的に有効化する方法を、ステップバイステップで解説します。

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

TensorRT関連のエラーが発生する主な原因は、以下の3つに大別されます。

1. 環境構築の不備

TensorRTは単体のPythonライブラリではなく、NVIDIAが提供するプラットフォーム固有のSDKです。WebUIの拡張機能は、システムに正しくインストールされたTensorRTライブラリと、対応するCUDA、cuDNNの存在を前提としています。これらが適切にインストール・パス設定されていない場合、最初のエラー例が発生します。

2. モデル変換の失敗

TensorRTは、Stable Diffusionのモデル(`.ckpt` または `.safetensors`)を直接読み込むことができません。まずモデルをONNX形式にエクスポートし、その後TensorRT固有のエンジンファイル(`.plan`または`.trt`)に変換(ビルド)する必要があります。この多段階の変換プロセスで、モデルの構造やオペレータがTensorRTでサポートされていない、バージョン不一致、ビルド設定(プロファイル)の不適切などが原因で失敗します。

3. メモリと互換性の問題

TensorRTエンジンのビルド時、および推論時には追加のGPUメモリを消費します。また、使用するStable Diffusionのバージョン(1.5, XL, 2.1など)や、LoRA、ControlNetなどの追加機能との互換性も慎重に考慮する必要があります。準備が不十分だと、ビルド失敗や実行時エラーの原因となります。

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

ここからは、Windows環境(CUDA 12.1を想定)を例に、具体的な解決手順を説明します。

ステップ1: 前提条件の確認と環境構築

まず、システムにNVIDIAドライバ、CUDA Toolkit、cuDNNがインストールされていることを確認します。その後、TensorRT本体をインストールします。

  1. NVIDIAドライバ: 最新のGame ReadyまたはStudioドライバをインストール。
  2. CUDA Toolkit: NVIDIAの公式サイトから、ご自身の環境に合ったバージョン(例: 12.1)をインストール。
  3. TensorRTのダウンロードとインストール:
    • NVIDIA Developerサイトから「TensorRT」をダウンロード(ZIPパッケージ)。
    • ダウンロードしたZIPファイルを解凍し、任意の場所(例: `C:TensorRT`)に配置。
    • 解凍したフォルダ内の `lib` サブフォルダのパスを、システムの環境変数 `PATH` に追加。
    • Python用ライブラリをインストール。解凍フォルダ内の `python` フォルダにある、あなたのPythonバージョンに合った `.whl` ファイルをpipでインストール。
      # 例 (Python 3.10, CUDA 12.1の場合)
      cd C:TensorRTpython
      pip install tensorrt-8.6.1-cp310-none-win_amd64.whl

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

WebUI内から、TensorRT対応の拡張機能をインストールします。現在、最も活発に開発されているのは「sd-webui-tensorrt」です。

  1. Stable Diffusion WebUIを起動し、「Extensions」タブに移動。
  2. 「Install from URL」を選択。
  3. 拡張機能のGitHubリポジトリURL(例: `https://github.com/adieyal/sd-webui-tensorrt`)を入力し、「Install」をクリック。
  4. インストール後、WebUIを再起動。再起動後、「Settings」タブ内に「TensorRT」の設定項目が追加されていることを確認します。

ステップ3: モデルの変換(ONNXエクスポート & TensorRTエンジンビルド)

これが最も重要なステップです。WebUIの「TensorRT」タブを使用して進めます。

  1. ベースモデルの準備: 加速したいモデル(例: `dreamshaper_8.safetensors`)を `models/Stable-diffusion` フォルダに配置。
  2. ONNXエクスポート: 「TensorRT」タブで、「Model」から対象モデルを選択。「Export ONNX Model」の「Export」ボタンをクリック。`webui/models/ONNX` フォルダに `.onnx` ファイルが生成されます。
    # コンソールに表示されるログの例
    Exporting model to ONNX...
    ONNX export successful: ./models/ONNX/dreamshaper_8.onnx
  3. TensorRTエンジンのビルド: 「Build TensorRT Engine」セクションに移動。
    • 「ONNX Model」で先ほどエクスポートしたファイルを選択。
    • 使用する画像サイズ(例: 512×512, 768×768)を「Profile」で追加(「Add」ボタン)。複数サイズを登録可能。
    • 必要に応じて、「FP16」などの精度設定を選択(速度向上にはFP16推奨)。
    • 「Build Engine」ボタンをクリック。ビルドには数分から数十分かかることがあります。成功すると、`webui/models/TensorRT` フォルダに `.plan` ファイルが生成されます。
      # ビルド成功時のログ例
      Building TensorRT engine...
      Engine built successfully: ./models/TensorRT/dreamshaper_8_fp16.plan

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

エンジンビルドが成功したら、実際に使用します。

  1. 「txt2img」または「img2img」タブに移動。
  2. 左上の「Stable Diffusion checkpoint」から、元のモデル名(例: `dreamshaper_8.safetensors`)を選択。(重要: `.plan`ファイルは直接選択しない)
  3. 画面下部の「Script」ドロップダウンメニューから、「TensorRT」を選択。
  4. 「TensorRT」スクリプトの設定画面が開くので、「TensorRT Engine」で先ほどビルドした `.plan` ファイルを選択。
  5. あとは通常通りプロンプトを入力し、「Generate」をクリック。コンソールに `[TensorRT]` というログが出力され、通常より大幅に高速で画像が生成されます。

コード例・コマンド例

トラブルシューティング用コマンド(Python対話環境)

インストールの確認や問題の切り分けに、以下のPythonコードを実行してください。

# TensorRTが正しくインポートできるか確認
import tensorrt as trt
print(f"TensorRT version: {trt.__version__}")

# 利用可能なGPUを確認
import torch
print(f"PyTorch CUDA available: {torch.cuda.is_available()}")
print(f"PyTorch CUDA version: {torch.version.cuda}")
print(f"GPU Device: {torch.cuda.get_device_name(0)}")

# ONNX Runtimeのバージョン確認 (変換に使用)
import onnxruntime as ort
print(f"ONNX Runtime version: {ort.__version__}")
print(f"ONNX Runtime providers: {ort.get_available_providers()}")

ビルド失敗時の対処法(設定例)

エンジンビルドがメモリ不足で失敗する場合、WebUIの起動コマンドにメモリ関連の引数を追加してみてください。

# webui-user.bat の set COMMANDLINE_ARGS を編集
set COMMANDLINE_ARGS=--opt-split-attention --no-half-vae --disable-nan-check

また、ビルド時に「Profile」で登録する画像サイズを小さくする(例: 512×512のみ)、またはバッチサイズを1に設定するなど、メモリ使用量を削減する設定を試してください。

まとめ・補足情報

Stable Diffusion WebUIでTensorRTアクセラレーションを有効化するプロセスは、環境構築→モデル変換→実行という3段階に分けられます。それぞれの段階で発生する可能性のあるエラーとその対処法を理解することが、成功への近道です。

重要な補足点:

  • モデルごとの変換が必要: 使用するチェックポイントモデル、LoRA、VAEが変わるたびに、新しいTensorRTエンジンをビルドする必要があります。
  • 動的バッチ・サイズ対応: 最新の拡張機能は、1回のビルドで複数の画像サイズやバッチサイズに対応する「動的形状」をサポートしています。プロファイル設定で複数サイズを登録しておくと便利です。
  • 更新の確認: TensorRT拡張機能は開発が活発です。定期的に「Extensions」タブから「Check for updates」を行い、最新版に更新することで、新機能の追加やバグ修正の恩恵を受けられます。
  • 代替手段: どうしてもTensorRTの設定が難しい場合は、WebUIの起動オプションに `–xformers` を追加するだけでも、ある程度の速度向上が見込めます。

一度設定が完了すれば、その後の画像生成体験は格段に快適なものになります。特にバッチ生成や高解像度アップスケールを行う際の時間短縮効果は絶大です。本記事が、皆さんのクリエイティブなワークフローの高速化に役立つことを願っています。

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