AI・機械学習
上級

TensorRT(テンサーアールティー)

NVIDIA が開発した高性能推論最適化エンジンで、学習済みモデルを NVIDIA GPU 上で最大性能で実行するためのグラフ最適化・量子化・カーネル自動選択を行うソフトウェア。

0 回閲覧
0 いいね

TensorRT とは

TensorRT は NVIDIA が開発・提供する推論最適化 SDK であり、学習済みの深層学習モデルを NVIDIA GPU 上で最大限の推論性能で実行するためのコンパイラ兼ランタイムである。ONNX・TensorFlow・PyTorch などのフレームワークで学習したモデルを入力とし、ターゲット GPU に最適化されたエンジンファイルを生成する。

データセンターの A100/H100 から自作 PC の GeForce RTX シリーズまで、NVIDIA GPU であれば TensorRT の恩恵を受けられる。画像認識・音声認識・自然言語処理など幅広い推論ワークロードの本番デプロイで業界標準の位置付けにある。

TensorRT のコンパイルパイプライン

パーサー(Parser)

ONNX 形式のモデルを TensorRT の内部ネットワーク表現(INetworkDefinition)に変換する。TensorFlow や PyTorch からは ONNX エクスポート経由、または各フレームワーク向けのプラグイン(torch2trt, TF-TRT)経由で入力する。

ビルダー(Builder)

ネットワーク定義とビルド設定(精度ポリシー・ワークスペースサイズ・最適化プロファイル)を受け取り、最適化エンジンを生成する。以下の処理が行われる。

  1. レイヤー融合: Conv + BatchNorm + ReLU → 単一カーネルに融合
  2. 精度キャリブレーション: FP32 → FP16/INT8/FP8 への自動変換
  3. カーネル自動選択(Tactic Selection): 各レイヤーに対して cuBLAS・cuDNN・カスタムカーネルから最速の実装を選択
  4. メモリ最適化: テンソルのライフタイム解析に基づくメモリ再利用
  5. Dynamic Shape 対応: 最小・最適・最大の入力形状プロファイルに基づく最適化

エンジン(Engine)

ビルド結果のシリアライズ済みエンジンファイル(.engine / .plan)。ターゲット GPU アーキテクチャに固有であり、異なる GPU では再ビルドが必要。

ビルドステージ処理内容性能効果
レイヤー融合複数レイヤーを単一カーネルに統合メモリ帯域削減 30-50%
精度キャリブレーションFP16/INT8/FP8 変換スループット 2-4 倍向上
Tactic Selection最速カーネル実装を選択レイヤーあたり 5-30% 向上
メモリ最適化テンソルメモリ再利用メモリ使用量 20-40% 削減
CUDA Graphカーネル起動オーバーヘッド除去レイテンシ 10-20% 改善

TensorRT-LLM

TensorRT-LLM は、大規模言語モデル専用の推論最適化ライブラリであり、TensorRT のコアエンジン上に LLM 固有の最適化を追加している。

主要機能

  • In-flight Batching(Continuous Batching): リクエスト単位でバッチを動的に構成し、GPU 利用率を最大化
  • Paged KV Cache: vLLM と同様の仮想メモリ方式で KV Cache を管理し、メモリ断片化を解消
  • Tensor Parallelism / Pipeline Parallelism: マルチ GPU 分散推論のネイティブサポート
  • Weight-Only Quantization: INT8/INT4 の重みのみ量子化で VRAM 使用量を削減
  • Speculative Decoding: Draft モデルによる投機的復号で生成速度を 2-3 倍に向上
  • FP8 量子化: Hopper 世代 GPU の FP8 Tensor Core を活用した高精度量子化

対応モデル

GPT-2/3/4、LLaMA 1/2/3、Mistral、Mixtral、Falcon、MPT、BLOOM、ChatGLM、Qwen、Phi、Gemma など 50 以上のモデルアーキテクチャに対応。

デプロイメントパターン

TensorRT-LLM エンジンは NVIDIA Triton Inference Server 上にデプロイするのが標準的な構成。Triton がリクエストキューイング・バッチスケジューリング・ヘルスチェック・メトリクス公開を担当し、TensorRT-LLM がモデル実行を担当する。

INT8/FP8 量子化

INT8 量子化

TensorRT の INT8 量子化は、キャリブレーションデータセットを用いて各テンソルの量子化スケールを決定する Post-Training Quantization(PTQ)方式が基本。エントロピーキャリブレーション・MinMax キャリブレーション・パーセンタイルキャリブレーションから選択可能。

FP8 量子化(Hopper 世代以降)

H100 GPU の FP8 Tensor Core を活用する量子化方式。E4M3(指数 4 ビット・仮数 3 ビット)形式を使用し、INT8 と比較して量子化誤差が小さく、キャリブレーションなしでの適用も可能(per-tensor scaling)。

量子化精度の比較

精度ビット幅スループット倍率品質劣化GPU 要件
FP32321x(ベースライン)なし全 GPU
FP16162xほぼなしVolta 以降
BF16162xほぼなしAmpere 以降
INT882-4x軽微Turing 以降
FP882-4x極小Hopper 以降
INT4 (W4A16)4 (重みのみ)1.5-2xモデル依存Ampere 以降

NVIDIA Triton Inference Server との統合

TensorRT エンジンを本番環境で運用する場合、Triton Inference Server がデファクトスタンダードの serving 基盤となる。

モデルリポジトリ

ディレクトリ構造ベースのモデル管理。バージョニング・動的ロード/アンロード・A/B テストが可能。

アンサンブルパイプライン

前処理(トークナイザ)→ 推論(TensorRT-LLM エンジン)→ 後処理(デトークナイザ)をパイプラインとして定義し、エンドツーエンドのレイテンシを最小化する。

メトリクスとモニタリング

Prometheus 互換のメトリクスエンドポイントを提供し、リクエストレート・レイテンシ分布・GPU 利用率・キュー深度をリアルタイムに監視できる。

自作 PC での TensorRT 活用

GeForce RTX での利用

RTX 3060〜4090 で TensorRT を利用する場合、以下の点に注意する。

  • VRAM 制限: RTX 4090 でも 24GB のため、13B パラメータ以上のモデルは INT4 量子化が必須
  • INT8 キャリブレーション: キャリブレーションデータが必要だが、Hugging Face のサンプルデータセットで十分
  • ビルド時間: 7B モデルのエンジンビルドに 5-15 分程度かかる
  • エンジンの GPU 固有性: RTX 4070 でビルドしたエンジンは RTX 4090 では使えない(再ビルド必要)

Stable Diffusion の高速化

画像生成 AI の Stable Diffusion も TensorRT で大幅に高速化できる。UNet・VAE・CLIP Text Encoder をそれぞれ TensorRT エンジンに変換することで、生成速度が 2-3 倍に向上する。ComfyUI や Automatic1111 WebUI 向けの TensorRT プラグインが公開されている。

よくある質問(FAQ)

Q1: TensorRT のエンジンビルドはどのくらい時間がかかりますか?

モデルサイズと精度設定に依存します。ResNet-50 クラスで 1-3 分、LLM 7B パラメータで 5-15 分、70B パラメータ(マルチ GPU)で 30 分〜1 時間程度です。Tactic Selection が最も時間を要するフェーズで、--timingCacheFile オプションでキャッシュを活用すると再ビルド時間を大幅に短縮できます。

Q2: TensorRT と torch.compile はどちらを使うべきですか?

開発・実験段階では torch.compile が手軽で柔軟です。本番推論で最大性能が求められる場合は TensorRT(特に LLM では TensorRT-LLM)が適しています。torch.compile の TensorRT バックエンド(torch_tensorrt)を使えば、PyTorch ワークフロー内で TensorRT 最適化を適用することも可能です。

Q3: TensorRT は AMD GPU でも動きますか?

いいえ、TensorRT は NVIDIA GPU 専用です。AMD GPU での推論最適化には ROCm 上の MIGraphX、または Apache TVM・ONNX Runtime の ROCm バックエンドを使用してください。