TensorRT
TensorRTはNVIDIAのSDKで、学習済みニューラルネットワークを単一GPUでの高速な推論に最適化されたエンジンにコンパイルします。モデルの最適化方法をコードとともに解説します。
TensorRTは、NVIDIA GPU上で高性能なディープラーニング推論を実行するためのNVIDIA製SDKです。学習済みのネットワークを、通常はONNXファイルとして受け取り、ビルド段階でエンジン(プランファイルとも呼ばれます)にコンパイルします。これはGPU固有のプログラムで、レイヤーを融合し、低精度で実行し、対象GPUで計測した最速のカーネルを使用します。ランタイム段階では、アプリケーションがエンジンを読み込んで実行します。通常、元のフレームワークより推論レイテンシが低く、スループットが高くなります。TensorRTにはC++およびPythonライブラリと trtexec コマンドラインツールが含まれます。現在のメジャーバージョンはTensorRT 11で、2026年10月時点のリリースは11.4です。
TensorRTによるモデル最適化の仕組み#
ビルダーはネットワークグラフに次のような最適化を適用します。
- レイヤーとテンソルの融合: 畳み込み、そのバイアス、活性化関数を1つのカーネルにまとめます。また、出力が使われないレイヤーは削除されるため、中間結果がGPUメモリとの間を往復せず、オンチップに保持されます。
- 低精度: FP16とBF16はFP32と比べてメモリ転送量を半減し、INT8とFP8はさらに半減します。近年のGPUでは、重みのみのINT4やFP4でさらに削減できます。これはモデル量子化の一種です。TensorRT 11では、FP16およびINT8のビルダーフラグとTensorRT 10の暗黙的なINT8キャリブレーションが廃止され、代わりに強い型付けのネットワークが必要です。この方式では、キャストノードと量子化・逆量子化のペアが各レイヤーの精度を宣言します。NVIDIAのModel Optimizerは、これらのノードをONNXファイルに挿入できます。
- カーネルの自動チューニング: ビルダーは各レイヤーについて、tacticと呼ばれる候補の実装を実際のGPU上で計測し、最速のものを採用します。
- メモリプランニング: ライフタイムが重ならないレイヤー間でアクティベーションバッファーを再利用し、エンジンのメモリフットプリントを小さくします。
- 動的シェイプ: 最小、最適、最大のシェイプを持つ最適化プロファイルを設定すると、1つのエンジンでバッチサイズや画像解像度の変化に対応できます。最適シェイプ向けにチューニングされます。
エンジンのビルドには数分かかることがあり、生成物はハードウェア固有です。デフォルトでは、エンジンはビルドしたものと同じ種類のGPUおよび同じTensorRTバージョンでのみ実行できます。ハードウェア互換およびバージョン互換エンジンは、移植性のために速度を一部犠牲にします。そのため、デプロイ環境ではONNXファイルを保持し、実行先でエンジンをビルドします。
モデルをTensorRTにエクスポートする#
Ultralytics YOLO26モデルは、model.export(format="engine") を使ってTensorRTにエクスポートします。まずONNXファイルを書き出し、次にローカルGPU上でエンジンをビルドします。FP16では quantize=16、INT8では quantize=8 を使い、data データセットの画像でキャリブレーションします。TensorRT 11では、強い型付けのAPIが必要とするため、エクスポート時にModel Optimizerを介してこれらの精度を適用します。
from ultralytics import YOLO
# ローカルのNVIDIA GPUでFP16のTensorRTエンジンをビルドします(yolo26n.engineを書き出します)
model = YOLO("yolo26n.pt")
model.export(format="engine", quantize=16)
# エンジンを読み込み、同じAPIで推論を実行します
trt_model = YOLO("yolo26n.engine")
results = trt_model("https://ultralytics.com/images/bus.jpg")
results[0].save(filename="bus_tensorrt.jpg")保存された画像には、PyTorchモデルと同じ YOLO インターフェースを介して、FP16エンジンがバスの写真から検出した結果が表示されます。
TensorRTと関連ツールの比較#
- ONNX: TensorRTが最もよく入力として使う、移植可能なモデル形式です。1つのONNXファイルを、データセンターGPU用と組み込みモジュール用の別々のエンジンにコンパイルできます。
- ONNX RuntimeとTensorRT実行プロバイダー: TensorRTがサポートするサブグラフはTensorRTエンジンとして実行し、それ以外はCUDAまたはCPUカーネルにフォールバックします。ONNX Runtime APIはそのまま使用できます。
- PyTorch: ほとんどのモデルが学習されるフレームワークです。Torch-TensorRTを使うと、別途ONNXを経由せず、PyTorchモデルをTensorRTで直接コンパイルできます。
- その他の推論エンジン: Intelハードウェア向けのOpenVINO、Appleデバイス向けのCore ML、Androidおよび組み込みデバイス向けのLiteRTは、他のチップで同じ役割を担います。
- TensorRT-LLM: NVIDIAのオープンソースライブラリで、現在はPyTorchベースのアーキテクチャを採用し、大規模言語モデルの推論を実行します。最適化されたアテンションカーネル、量子化、投機的デコーディング、マルチGPU並列処理を備えています。
実際のアプリケーション#
- 動画分析: NVIDIAのDeepStream SDKは、複数のストリームで1つのGPUを共有する小売、交通、セキュリティ分析向けのマルチカメラパイプライン内で、TensorRTエンジンを実行します。
- 産業検査: 高速な生産ラインのカメラでは、各部品が視野内にある時間内にリアルタイム推論を実行する必要があります。低精度エンジンを使えば、小型GPUでこれを実現できます。
- 自動運転車: 自動運転車の認識ネットワークは、DRIVE AGX OrinやThorなどのNVIDIA DRIVEプラットフォーム上でTensorRTエンジンとして実行されます。
- ロボティクスとエッジデバイス: NVIDIA Jetsonモジュールには、JetPackとともにTensorRTが付属します。TensorRT 11.4はJetPackをサポートしないため、Jetsonのデプロイでは、使用するJetPackバージョンに付属するTensorRT 10のリリースでエンジンをビルドします。










