Re Reference AI

インフラ

TensorRTとは

NVIDIA GPU上での推論を高速化する、NVIDIA製の推論最適化SDK

NVIDIA推論最適化

ひとことで言うと

NVIDIA GPU上でAIの実行を速くするための、NVIDIA製の最適化ツール。

概要

TensorRT(テンソルアールティー)とは、NVIDIAが提供する、自社GPU上でのディープラーニング推論を高速化するためのSDK(ソフトウェア開発キット)。 PyTorchONNX形式で学習・エクスポートされたモデルを取り込み、レイヤーの融合(Layer Fusion)、精度の変換(FP16INT8等への量子化)、GPUの世代に応じたカーネルの自動選択といった最適化を適用することで、推論のレイテンシとスループットを改善する。 モデルをそのまま使うより数倍の高速化が得られることも多く、クラウド上でのLLMサービング、エッジデバイスでのリアルタイム推論等、レイテンシがサービス品質に直結する用途で活用される。

背景

学習時に使われるフレームワークの汎用的な実行経路は、必ずしも推論に最適化されているとは限らない。 TensorRTは、学習済みモデルをNVIDIA GPU上での推論に特化した形へ変換・最適化することで、本番環境での推論性能を高めるために開発された。

歴史

2017年: NVIDIAがTensorRTを発表し、自社GPU向けの推論最適化SDKとして展開を開始した。 以降、対応する数値精度やモデル形式を拡充しながら、LLMサービング向けのTensorRT-LLM等派生プロジェクトにも発展している。

アーキテクチャ

入力されたモデルの計算グラフを解析し、複数の演算をまとめて1つのGPUカーネルにする層融合、より低い数値精度(FP16INT8等)への変換、使用するGPUの世代に最適なカーネル実装の選択といった最適化を適用したうえで、最適化済みの実行エンジンを生成する。

コード例

ONNXモデルからのエンジン構築(概念例)

import tensorrt as trt

logger = trt.Logger(trt.Logger.WARNING)
builder = trt.Builder(logger)
network = builder.create_network(1 << int(trt.NetworkDefinitionCreationFlag.EXPLICIT_BATCH))
parser = trt.OnnxParser(network, logger)

with open("model.onnx", "rb") as f:
    parser.parse(f.read())

config = builder.create_builder_config()
engine = builder.build_serialized_network(network, config)

利点

  • NVIDIA GPU上での推論レイテンシ・スループットを大きく改善できる
  • 精度変換(量子化)やレイヤー融合等の最適化を自動的に適用できる
  • TensorRT-LLM等、LLMサービングに特化した派生プロジェクトも展開されている

欠点

  • NVIDIA GPU専用であり、他社のハードウェアでは利用できない
  • モデルの最適化・変換には、専門的な知識と検証の手間がかかりやすい
  • 最適化済みエンジンは特定のGPU世代・TensorRTバージョンに依存し、環境間の可搬性が低い

比較

  • CUDATensorRTはCUDAを基盤として構築された、推論に特化した最適化レイヤー
  • ONNXTensorRTは、ONNX形式のモデルを入力として受け取り最適化する用途でよく使われる
  • 量子化TensorRTは、FP16・INT8等への量子化を含む最適化を自動的に適用する

関連用語

CUDAONNX量子化GPU

よくある質問

TensorRTはどんな場面で使う?

NVIDIA GPU上で本番環境の推論を高速化したい場合に使われ、特にレイテンシやスループットがシビアに求められるサービングで効果を発揮する。

TensorRTとTensorRT-LLMの違いは?

TensorRTは画像認識等も含む汎用的な推論最適化SDKであるのに対し、TensorRT-LLMはLLM推論に特化して、KVキャッシュの管理やバッチ処理等の最適化を組み込んだ派生プロジェクト。

参考文献

関連Zenn記事