TensorRT-LLMは、NVIDIAが開発するLLM推論最適化ライブラリ。TensorRTコンパイラを活用してTransformerモデルをNVIDIA GPU向けに最適化し、FP8/INT4量子化・カーネルフュージョン・インフライトバッチングを組み合わせてH100/A100上で業界最高水準の推論スループットを達成する。Triton Inference Serverとの統合によりエンタープライズグレードのサービング基盤を提供する。
TensorRT-LLMは、NVIDIAが2023年にオープンソース化したLLM推論最適化ライブラリである。NVIDIA独自のディープラーニング推論コンパイラ「TensorRT」をLLM向けに拡張し、Transformerアーキテクチャに特化した最適化を施す。Hopper世代(H100/H200)のFP8 Tensor Core、Ada Lovelace世代(RTX 4090/L40S)のINT8/FP8対応を最大限に活用し、同一ハードウェアでvLLMやTGIを20〜40%上回るスループットを実現する。
TensorRT-LLMの最大の特徴は「ビルド」プロセスにある。PyTorchの重みファイル(safetensors/HF形式)を入力とし、TensorRTエンジン(.engine/.plan ファイル)にコンパイルする。このビルド工程でレイヤーフュージョン・メモリプランニング・カーネル自動選択が行われ、推論時のオーバーヘッドを最小化する。ビルドには数十分〜数時間かかるが、一度ビルドしたエンジンは繰り返し使用でき、起動時間はモデルロードのみ。
TensorRTコンパイラは、連続する演算(LayerNorm → Linear → GELU → Linear)を単一のCUDAカーネルに融合する。これによりカーネル起動オーバーヘッドとGPUメモリ帯域の消費が削減される。Transformerの1ブロック内で通常6〜10回のカーネル起動が、フュージョン後は2〜3回に削減される。
ビルド時に複数のカーネル実装(異なるタイルサイズ、メモリアクセスパターン)を自動ベンチマークし、対象GPUアーキテクチャで最速のカーネルを選択する。これにより、同一モデルでもH100とA100で異なる最適カーネルが自動的に選択される。
推論時のテンソル間メモリ再利用を静的に計画する。ある層の出力テンソルが以降の計算で不要になった時点で、そのメモリ領域を別のテンソルに再利用する。動的メモリ確保のオーバーヘッドを排除し、ピークメモリ使用量を10〜20%削減する。
| 最適化手法 | 効果 | 適用対象 |
|---|---|---|
| レイヤーフュージョン | カーネル起動回数50〜70%削減 | 全GPUアーキテクチャ |
| FP8量子化 | メモリ50%削減、演算2倍速 | Hopper (H100/H200) |
| INT4 (W4A16) | メモリ75%削減 | Ada/Hopper |
| カーネル自動選択 | スループット5〜15%向上 | 全GPUアーキテクチャ |
| メモリプランニング |
| ピークメモリ10〜20%削減 |
| 全GPUアーキテクチャ |
H100 GPUのFP8 Tensor Coreは、FP16と比較して理論演算性能が2倍(1,979 TFLOPS → 3,958 TFLOPS)に達する。TensorRT-LLMのFP8量子化は以下の2つのモードを提供する。
重みのみをFP8で格納し、活性化はFP16のまま計算する。精度劣化が最小限(MMLU差分0.1%未満)で、メモリ使用量を約50%削減。最も安全な量子化オプション。
重みと活性化の両方をFP8で計算する。Tensor Coreの全性能を活用でき、FP16比で実効スループット1.5〜1.8倍を達成する。キャリブレーションデータセット(通常500〜1000サンプル)を用いてスケーリングファクターを事前計算する必要がある。
TensorRT-LLMはTriton Inference ServerのバックエンドとしてデプロイされるのがNVIDIA公式推奨の構成である。
model_repository/
├── preprocessing/
│ ├── config.pbtxt
│ └── 1/model.py
├── tensorrt_llm/
│ ├── config.pbtxt
│ └── 1/
│ ├── config.json
│ └── *.engine
└── postprocessing/
├── config.pbtxt
└── 1/model.py
| 項目 | TensorRT-LLM | vLLM |
|---|---|---|
| 最大スループット | ◎(業界最速) | ○(TRT-LLMの70〜85%) |
| セットアップ容易性 | △(ビルド必要) | ◎(pip install即起動) |
| GPU対応 | NVIDIA専用 | NVIDIA, AMD, TPU |
| モデル切り替え速度 | △(再ビルド必要) | ◎(即時切り替え) |
| 量子化精度 | ◎(FP8キャリブレーション) | ○(AWQ/GPTQ) |
| エンタープライズサポート | ◎(NVIDIA公式) | ○(コミュニティ主導) |
| LoRA動的ロード | ○(対応) | ◎(成熟) |
| コミュニティ規模 | ○(中規模) | ◎(最大) |
モデルサイズとGPUによる。Llama 3.1 8B(FP16)をA100上でビルドする場合、約10〜15分。70B(FP8、TP=4)の場合は30〜60分。405B(TP=8、PP=2)では数時間を要する。ビルド済みエンジンはモデルバージョンとGPUアーキテクチャに紐付くため、異なるGPU世代では再ビルドが必要。
Apache 2.0ライセンスでオープンソースである。ただし依存するTensorRTランタイム自体はNVIDIA独自のクローズドソースバイナリであり、NVIDIA GPU以外では動作しない。AMD GPU上でTensorRT-LLMを使うことはできないため、マルチGPUベンダー対応が必要な場合はvLLMが適切。
直接は使えないが、変換は容易。trtllm-buildコマンドでHugging Face形式の重みファイルをTensorRTエンジンに変換する。公式リポジトリに主要モデル(Llama/Mistral/Falcon/GPT-J/Phi等)の変換スクリプトが用意されており、コマンド1つで変換可能。カスタムアーキテクチャの場合は、Python APIでモデル定義を記述する必要がある。