AI・機械学習
上級

TensorRT-LLM(テンサーアールティーエルエルエム)

TensorRT-LLMは、NVIDIAが開発するLLM推論最適化ライブラリ。TensorRTコンパイラを活用してTransformerモデルをNVIDIA GPU向けに最適化し、FP8/INT4量子化・カーネルフュージョン・インフライトバッチングを組み合わせてH100/A100上で業界最高水準の推論スループットを達成する。Triton Inference Serverとの統合によりエンタープライズグレードのサービング基盤を提供する。

0 回閲覧
0 いいね

TensorRT-LLMとは

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 ファイル)にコンパイルする。このビルド工程でレイヤーフュージョン・メモリプランニング・カーネル自動選択が行われ、推論時のオーバーヘッドを最小化する。ビルドには数十分〜数時間かかるが、一度ビルドしたエンジンは繰り返し使用でき、起動時間はモデルロードのみ。

コンパイル最適化の仕組み

レイヤーフュージョン(Layer Fusion)

TensorRTコンパイラは、連続する演算(LayerNorm → Linear → GELU → Linear)を単一のCUDAカーネルに融合する。これによりカーネル起動オーバーヘッドとGPUメモリ帯域の消費が削減される。Transformerの1ブロック内で通常6〜10回のカーネル起動が、フュージョン後は2〜3回に削減される。

カーネル自動選択(Auto-Tuning)

ビルド時に複数のカーネル実装(異なるタイルサイズ、メモリアクセスパターン)を自動ベンチマークし、対象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アーキテクチャ

FP8量子化とHopper世代の活用

H100 GPUのFP8 Tensor Coreは、FP16と比較して理論演算性能が2倍(1,979 TFLOPS → 3,958 TFLOPS)に達する。TensorRT-LLMのFP8量子化は以下の2つのモードを提供する。

Weight-Only FP8

重みのみをFP8で格納し、活性化はFP16のまま計算する。精度劣化が最小限(MMLU差分0.1%未満)で、メモリ使用量を約50%削減。最も安全な量子化オプション。

Weight-and-Activation FP8(W8A8)

重みと活性化の両方をFP8で計算する。Tensor Coreの全性能を活用でき、FP16比で実効スループット1.5〜1.8倍を達成する。キャリブレーションデータセット(通常500〜1000サンプル)を用いてスケーリングファクターを事前計算する必要がある。

Triton Inference Server連携

TensorRT-LLMはTriton Inference ServerのバックエンドとしてデプロイされるのがNVIDIA公式推奨の構成である。

Triton統合の利点

  1. マルチモデル管理: 1つのTritonインスタンスで複数のLLMエンジンを同時ホスト
  2. 動的バッチング: Tritonのスケジューラとインフライトバッチングの二重最適化
  3. モデルアンサンブル: 前処理(トークナイゼーション)→ LLM推論 → 後処理をパイプラインとして定義
  4. Prometheus/Grafanaモニタリング: リクエストレイテンシ・スループット・GPUメモリのリアルタイム監視
  5. gRPC/REST API: クライアント言語非依存のインターフェース

デプロイ構成例

model_repository/
├── preprocessing/
│   ├── config.pbtxt
│   └── 1/model.py
├── tensorrt_llm/
│   ├── config.pbtxt
│   └── 1/
│       ├── config.json
│       └── *.engine
└── postprocessing/
    ├── config.pbtxt
    └── 1/model.py

vLLMとの比較

項目TensorRT-LLMvLLM
最大スループット◎(業界最速)○(TRT-LLMの70〜85%)
セットアップ容易性△(ビルド必要)◎(pip install即起動)
GPU対応NVIDIA専用NVIDIA, AMD, TPU
モデル切り替え速度△(再ビルド必要)◎(即時切り替え)
量子化精度◎(FP8キャリブレーション)○(AWQ/GPTQ)
エンタープライズサポート◎(NVIDIA公式)○(コミュニティ主導)
LoRA動的ロード○(対応)◎(成熟)
コミュニティ規模○(中規模)◎(最大)

よくある質問(FAQ)

Q1: TensorRT-LLMのビルドにはどれくらい時間がかかりますか?

モデルサイズとGPUによる。Llama 3.1 8B(FP16)をA100上でビルドする場合、約10〜15分。70B(FP8、TP=4)の場合は30〜60分。405B(TP=8、PP=2)では数時間を要する。ビルド済みエンジンはモデルバージョンとGPUアーキテクチャに紐付くため、異なるGPU世代では再ビルドが必要。

Q2: TensorRT-LLMはオープンソースですか?

Apache 2.0ライセンスでオープンソースである。ただし依存するTensorRTランタイム自体はNVIDIA独自のクローズドソースバイナリであり、NVIDIA GPU以外では動作しない。AMD GPU上でTensorRT-LLMを使うことはできないため、マルチGPUベンダー対応が必要な場合はvLLMが適切。

Q3: 既存のHugging Faceモデルをそのまま使えますか?

直接は使えないが、変換は容易。trtllm-buildコマンドでHugging Face形式の重みファイルをTensorRTエンジンに変換する。公式リポジトリに主要モデル(Llama/Mistral/Falcon/GPT-J/Phi等)の変換スクリプトが用意されており、コマンド1つで変換可能。カスタムアーキテクチャの場合は、Python APIでモデル定義を記述する必要がある。