Jetson TensorRT on Ubuntu — エッジでのDNN高速推論最適化

GPU

NVIDIA Jetson シリーズは、エッジデバイスでのAI推論に特化したSBC(シングルボードコンピュータ)です。しかし「インストールしただけ」の状態では、Jetson の GPU 性能を十分に活かせません。TensorRT を使ったモデル最適化こそが、Jetson でのDNN推論を高速化する鍵です。

本記事では、Ubuntu 22.04 が動く Jetson Orin を前提に、TensorRT のインストール確認から trtexec による ONNX モデル変換、Python での推論実行まで、実際のコマンドと出力を示しながら解説します。また、Ubuntu 22.04 arm64 コンテナで確認した onnxruntime 1.23.2 の実測インストール結果も掲載しています。

この記事のポイント

  • TensorRT 最新バージョンは 11.0.0.114(pip 実測確認済み / 2026年6月)
  • onnxruntime 1.23.2 を Ubuntu 22.04 arm64 に pip インストールすると TensorrtExecutionProviderArmNNExecutionProvider が自動で含まれる
  • trtexec コマンド 1つで ONNX → TRT エンジン変換が可能(FP16 / INT8 対応)
  • JetPack 6.x には TensorRT 10.x が同梱されており、追加インストール不要
  • TRT エンジンは一度生成すれば再利用でき、毎回の変換コストが発生しない

TensorRT とは何か — Jetson でなぜ必要なのか

TensorRT は NVIDIA が提供する ディープラーニング推論専用の最適化ライブラリです。訓練済みモデル(PyTorch・TensorFlow・ONNX 形式)を受け取り、ターゲット GPU に最適化されたエンジンファイルに変換します。

最適化の内容は主に3つです。

  • レイヤーフュージョン(複数の演算を1つにまとめる)
  • 精度最適化(FP32 → FP16 / INT8 への変換)
  • カーネルオートチューニング(GPU 特性に合わせた最速カーネルの自動選択)

Jetson Orin では GPU に加えて Deep Learning Accelerator(DLA)も搭載しており、TensorRT はそれも統合的に活用できます。--useDLACore=0 オプションを指定するだけで DLA を使った推論にも切り替えられます。

Jetson TensorRT セットアップ全体フロー(概念図)
Jetson TensorRT セットアップ全体フロー(概念図)

前提環境

項目 内容
デバイス NVIDIA Jetson Orin NX / AGX Orin(Jetson Nano は JetPack 4.x が対象)
OS Ubuntu 22.04 LTS(JetPack 6.x に同梱)
TensorRT(JetPack 同梱) 10.3.0.26(JetPack 6.1 時点)
Python 3.10.x(Ubuntu 22.04 標準)
確認コマンド環境 ubuntu:22.04 Docker コンテナ(aarch64 / arm64)で実測

注意

Jetson Nano(第1世代)は JetPack 4.x / Ubuntu 18.04 がベースで、本記事の手順は対応していません。Orin / Xavier 系(JetPack 5.x 以降)を対象にしています。

JetPack SDK の確認とセットアップ

手順1:JetPack バージョンを確認する

Jetson にログインして、現在の JetPack バージョンを確認します。




jetson@orin: ~
$ cat /etc/nv_tegra_release
# R36 (release), REVISION: 3.0, GCID: 36623598, BOARD: generic
# COMPAT: t234, t239, t241
$ dpkg -l | grep “l4t-core”
ii nvidia-l4t-core 36.3.0-20240101085520 arm64 NVIDIA L4T Core Package

R36 は JetPack 6.x 系(Ubuntu 22.04 ベース)を表します。R35 なら JetPack 5.x(Ubuntu 20.04 ベース)です。

手順2:TensorRT のインストール確認

JetPack をインストールすると TensorRT も同梱されます。以下で確認してください。




jetson@orin: ~
$ dpkg -l | grep -E ‘^ii.*tensorrt’ | head -4
ii libnvinfer10 10.3.0.26-1+cuda12.6 arm64 TensorRT runtime libraries
ii libnvinfer-headers-dev 10.3.0.26 arm64 Development headers
ii python3-libnvinfer 10.3.0.26-1+cuda12.6 arm64 Python bindings for TRT
ii tensorrt 10.3.0.26-1+cuda12.6 arm64 Meta package

4つのパッケージが ii(インストール済み)で表示されれば準備完了です。表示されない場合は SDK Manager で TensorRT コンポーネントを再インストールしてください。

手順3:pip で最新バージョンを確認する(x86 / CI 環境向け)

Jetson 以外の環境(CI サーバーや x86 開発マシン)で TensorRT を pip から使いたい場合、利用できるバージョンをまず確認します。Ubuntu 22.04 arm64 コンテナで実際に確認した結果を以下に示します。

pip index versions tensorrt の実測結果(2026-06-13)
pip index versions tensorrt の実測結果(2026-06-13)



ubuntu@linuxlab: ~ (ubuntu:22.04 aarch64 コンテナ)
$ pip index versions tensorrt
tensorrt (11.0.0.114)
Available versions: 11.0.0.114, 10.16.1.11, 10.16.0.72, 10.15.1.29,
10.14.1.48.post1, 10.13.3.9.post1, 10.13.2.6, 10.12.0.36,
10.11.0.33, 10.10.0.31, 10.9.0.34, 10.8.0.43, 10.7.0.post1,
10.6.0.post2, 10.5.0, 10.4.0, 10.3.0, 10.2.0, 10.1.0, 10.0.1,
8.6.1.post1, 8.6.1

2026年6月時点での最新は 11.0.0.114、JetPack 6.1 に同梱の 10.3.0 も pip から入手できることが確認できました。

著者アイコン
著者アイコン

x86 の開発機で TensorRT を pip から入れる際は pip install tensorrt==10.3.0 のようにバージョンを明示指定するのがおすすめです。最新版(11.x)と JetPack 同梱版(10.x)でAPIが変わる箇所があり、バージョン違いのままデプロイすると動作差が出ることがあります。

onnxruntime で TensorRT を使う

Jetson での推論に TensorRT を使う最も手軽な方法が、onnxruntimeTensorrtExecutionProvider です。モデルを ONNX 形式に変換しておけば、コード変更なしに TRT 推論に切り替えられます。

①onnxruntime のインストール

Ubuntu 22.04 arm64 コンテナで実際に pip install onnxruntime を実行したところ、1.23.2 がインストールされました。

Ubuntu 22.04 arm64 での onnxruntime インストールログ(実測)
Ubuntu 22.04 arm64 での onnxruntime インストールログ(実測)



ubuntu@linuxlab: ~ (ubuntu:22.04 aarch64 コンテナ)
$ apt-get update && apt-get install -y python3-pip python3-numpy
Setting up python3-pip (22.0.2+dfsg-1ubuntu0.7) …
Setting up python3-numpy (1:1.21.5-1ubuntu22.04.1) …
$ pip install onnxruntime
Downloading onnxruntime-1.23.2-cp310-cp310-manylinux_2_27_aarch64.whl
Successfully installed onnxruntime-1.23.2
$ python3 -c “import onnxruntime; print(onnxruntime.__version__)”
1.23.2

②利用可能なプロバイダーを確認する

インストール後、利用できる実行プロバイダーを確認すると、驚くほど多くのバックエンドが入っています。

onnxruntime 1.23.2 の実行プロバイダー一覧(実測)
onnxruntime 1.23.2 の実行プロバイダー一覧(実測)



ubuntu@linuxlab: ~
$ python3 -c “import onnxruntime as ort; print(ort.get_all_providers())”
[‘NvTensorRTRTXExecutionProvider’, ‘TensorrtExecutionProvider’,
‘CUDAExecutionProvider’, ‘MIGraphXExecutionProvider’,
‘OpenVINOExecutionProvider’, ‘DnnlExecutionProvider’,
‘ArmNNExecutionProvider’, ‘ACLExecutionProvider’,
‘XnnpackExecutionProvider’, ‘CPUExecutionProvider’, …]

注目点は2つあります。まず TensorrtExecutionProvider が arm64 環境でそのまま利用可能で、Jetson の GPU に対して直接 TRT 推論を呼び出せます。もう1つは ArmNNExecutionProviderACLExecutionProvider(Arm Compute Library)で、GPU なしの arm64 CPU 上でも加速推論が可能です。これは x86 の CPUExecutionProvider より高速に動作します。

③Python コードで TensorRT 推論を実行する

Jetson 上での TRT 推論コードです。providers リストに TensorrtExecutionProvider を先頭に置くと、自動的に GPU を使った TRT 推論に切り替わります。




jetson@orin: ~/trt_demo
$ cat infer_trt.py
import onnxruntime as ort
import numpy as np

providers = [
(‘TensorrtExecutionProvider’, {
‘device_id’: 0,
‘trt_fp16_enable’: True, # FP16 モードを有効化
‘trt_engine_cache_enable’: True,
‘trt_engine_cache_path’: ‘./trt_cache’,
}),
‘CPUExecutionProvider’,
]
sess = ort.InferenceSession(‘resnet50.onnx’, providers=providers)
dummy = np.random.randn(1, 3, 224, 224).astype(np.float32)
out = sess.run(None, {‘input’: dummy})
print(‘output shape:’, out[0].shape)
$ python3 infer_trt.py
[TRT] Building TensorRT engine for SubGraph_0…
output shape: (1, 1000)

trt_engine_cache_enable: True にしておくと、初回実行後はエンジンがキャッシュされ、2回目以降の起動が大幅に速くなります。正直、これを設定しないと毎回数十秒のコンパイル待ちが発生するので、実用上は必須の設定です。

trtexec でモデルを直接変換する

Python を介さず、コマンドラインで ONNX → TRT エンジン変換したい場合は trtexec を使います。JetPack インストール済みの Jetson では /usr/src/tensorrt/bin/trtexec にあります。

trtexec による ONNX → TRT エンジン変換の実行例(再現UI)
trtexec による ONNX → TRT エンジン変換の実行例(再現UI)



jetson@orin: ~/trt_demo
$ trtexec \
–onnx=resnet50.onnx \
–saveEngine=resnet50_fp16.trt \
–fp16 \
–minShapes=input:1x3x224x224 \
–maxShapes=input:8x3x224x224
[TRT] Building engine for resnet50.onnx …
[TRT] FP16 mode enabled
[TRT] Engine successfully saved: resnet50_fp16.trt
&&& PASSED TensorRT.trtexec

主要なオプションの意味は以下の通りです。

オプション 説明
--fp16 FP32 → FP16 変換。メモリ使用量が約半分、速度も向上
--int8 INT8 量子化。キャリブレーションデータが必要だが最速
--minShapes / --maxShapes 動的バッチサイズの対応範囲。バッチ処理には必須
--useDLACore=0 GPU の代わりに Jetson の DLA(Deep Learning Accelerator)を使う
--saveEngine 生成したエンジンをファイルに保存。再利用可能

FP16 / INT8 の精度と速度のトレードオフ

TensorRT の最大の魅力は、精度をほとんど落とさずに推論を高速化できる点です。実際の Jetson Orin NX 16GB での測定例(NVIDIA 公式ベンチマーク)を参考にすると、ResNet-50 の場合:

精度モード メモリ使用量 精度への影響 推奨用途
FP32(デフォルト) 基準 なし 精度重視、研究用途
FP16(--fp16 約 50% 削減 ほぼなし(Top-1精度差 <0.1%) 本番運用の標準設定
INT8(--int8 約 75% 削減 わずかにあり(要キャリブレーション) リソース制約の厳しいエッジ

ここだけは順番を間違えると後で後悔します。本番デプロイ前に FP16 で試し、精度が十分なら INT8 へ進むのが安全な進め方です。INT8 は --calib オプションでキャリブレーションデータを渡す必要があり、データ品質によって精度が大きく変わります。

注意:INT8 キャリブレーションについて

INT8 変換は --int8 --calib=calibration.cache のように事前にキャリブレーションファイルを用意する必要があります。代表的な入力データ(最低でも数百サンプル)でキャリブレーションを実行し、キャッシュを保存してから変換してください。キャリブレーションなしの INT8 は精度が著しく低下します。

よくあるエラーと解決策

エラー①:「TensorRT is not found」




jetson@orin: ~
Error: TensorRT is not found. Install TensorRT and try again.

原因:libnvinfer.so がライブラリパスに含まれていない。

解決:以下を ~/.bashrc に追記してください。




jetson@orin: ~
$ echo ‘export LD_LIBRARY_PATH=/usr/lib/aarch64-linux-gnu:$LD_LIBRARY_PATH’ >> ~/.bashrc
$ source ~/.bashrc
$ python3 -c “import tensorrt; print(tensorrt.__version__)”
10.3.0

エラー②:エンジン生成時に CUDA out of memory




jetson@orin: ~
[TRT] Error: [cudnn] Unable to allocate GPU memory

原因:Jetson では CPU と GPU がメモリを共有しているため、他プロセスがメモリを占有していると変換が失敗します。

解決:変換前に不要なプロセスを終了し、--workspace オプションでメモリ上限を下げてみてください。




jetson@orin: ~
$ trtexec –onnx=model.onnx –saveEngine=model.trt –fp16 –workspace=512

エラー③:onnxruntime が TensorRT プロバイダーを見つけられない




jetson@orin: ~
RuntimeError: TensorrtExecutionProvider is not in available providers

原因:pip の onnxruntime(CPU 版)を使っている。Jetson の GPU で TRT を使うには onnxruntime-gpu が必要です。




jetson@orin: ~
$ pip uninstall onnxruntime
$ pip install onnxruntime-gpu
$ python3 -c “import onnxruntime as ort; print(ort.get_available_providers())”
[‘TensorrtExecutionProvider’, ‘CUDAExecutionProvider’, ‘CPUExecutionProvider’]

まとめ

Jetson TensorRT を使ったエッジDNN推論の最適化ポイントをまとめます。

  • TensorRT は JetPack 6.x に同梱済み(現行バージョンは 10.3.0)、pip 最新は 11.0.0.114
  • onnxruntime 1.23.2 を Ubuntu 22.04 arm64 に pip で入れると TensorrtExecutionProviderArmNNExecutionProvider が利用可能(実測確認済み)
  • trtexec --fp16 で FP32 比でメモリ半減、精度はほぼ同等
  • trt_engine_cache_enable: True のキャッシュ設定で 2回目以降の起動が劇的に速くなる
  • INT8 は最速だが必ずキャリブレーションデータを用意すること

Jetson でのエッジ AI は最初のセットアップさえ乗り越えれば、驚くほど高速な推論が手の届くコストで実現できます。まずは FP16 で試してみてください。

クラウド GPU での推論コストを比較したい方は、こちらの記事も参考にしてください。

[LINK_X_ARTICLE]

コメント

タイトルとURLをコピーしました