Jetson NanoでYOLOをTensorRT化して爆速推論する方法|Docker必須&np.boolエラー対策まで

Jetson NanoでYOLOをTensorRT化して爆速推論する方法|Docker必須&np.boolエラー対策まで

jetsonが高額すぎて、5年以上前に購入したjetsonでYOLO26動かそうとしたら、全然できなかったのでdokcerでなんとかYOLO12は動かせた話です。Dockerを使った手順になりますが、ここで紹介しているコマンドだけで動くようになると思います。

Jetson NanoでUltralytics YOLOをTensorRT(.engine)へ変換し高速推論する手順を初心者向けに解説しています。Dockerが必要な理由、numpyのnp.boolエラーの直し方、YOLO26がTensorRT変換に失敗する原因(Mod演算子)と回避策までまとめました。

Jetson NanoでYOLOをTensorRT化して爆速推論する方法|Docker必須&np.boolエラー対策まで

Jetson NanoでYOLOを動かすと、PyTorchのままだと推論が重い・環境が壊れやすい、という壁に当たりがちです。
この記事では、Ultralytics YOLO → TensorRT(.engine) へ変換して高速推論するまでを、実ログに基づいて初心者でも再現できる形でまとめます。

さらに、Jetson Nanoでよく踏む地雷である

  • AttributeError: module 'numpy' has no attribute 'bool'
  • YOLO26のTensorRT変換失敗(No importer registered for op: Mod

も「なぜ起きるか」「どう回避するか」をセットで解説します。

この記事で分かること

  • Dockerとは何か(初心者向け)
  • なぜJetson NanoではDocker運用が強いのか
  • Ultralyticsで TensorRTエンジン(.engine)を作る手順
  • np.bool エラーの原因と対処(NumPy 1.24問題)
  • YOLO26が TensorRT 8.2で失敗する理由 と回避策

先に結論:Jetson Nanoは「Docker+TensorRT」が現実解

Jetson Nano(Tegra X1 / 4GB)環境は、PCと違ってOS・CUDA・TensorRTの組み合わせが固定されがちで、Python側の依存関係を少し触っただけで崩れます。
UltralyticsのJetson向けガイドでも、Jetson NanoはJetPack 4系(Ubuntu 18.04ベース)での運用が前提であり、そこに合わせた手順が整理されています。

そして、YOLOを高速化したいなら TensorRT が最強クラスです。UltralyticsのExportドキュメントでも、TensorRTで最大5倍のGPU高速化が狙えることが明記されています。

Dockerとは何か(初心者向け)

Dockerを一言でいうと、**「動く環境まるごとパッケージ化して持ち運ぶ箱」**です。

  • PCに直接Pythonやライブラリを入れると、依存関係が衝突して壊れがち
  • Dockerなら、必要なPython・PyTorch・Ultralytics・ONNX・TensorRT周りを「コンテナ内」に閉じ込められる
  • Jetson特有のCUDA/TensorRT環境とも相性が良い(ホスト側のGPUをコンテナから利用)

つまりDockerは、Jetson Nanoのように「環境が固定される機器」で特に強いです。

なぜJetson Nanoでは「Dockerでないとダメ」になりがちなのか

理由は大きく3つです。

1) JetPack依存で、TensorRT/ CUDA のバージョンが縛られる

Jetson NanoはJetPack(OS+CUDA+TensorRTセット)に強く依存します。
新しいTensorRTを入れたいと思っても、JetPack側が追いつかず、簡単には上げられません。

2) Python側の依存関係が衝突しやすい

今回のログでも、NumPyのバージョンが原因でTensorRT Pythonバインディングが落ちました。

  • NumPy 1.24以降は np.bool などの古い別名が削除され、古いコードが壊れます。実際、NumPy 1.24のリリースノートでも「期限切れの非推奨(Expired deprecations)」として np.bool 等の削除が案内されています。
  • その結果、AttributeError: module 'numpy' has no attribute 'bool' が発生

Dockerなら「この組み合わせで動いた」というセットを固定しやすく、壊れたらコンテナを捨てて作り直すができます。

3) 再現性(同じ手順で同じ結果)を担保しやすい

ブログ・チーム共有・量産運用では、再現性が命です。Dockerはここが圧倒的に強いです。

手順:Jetson NanoでUltralytics YOLOをDockerで動かす(最短)

Ultralytics公式のJetsonガイドには、Dockerで動かす「クイックスタート」が載っています。
(※細部は環境により変わるので、基本は公式のコマンドに寄せるのが安全です)

例:イメージ取得 → GPUを使って起動(概念としてはこういう流れです)

# 例:イメージ取得(公式ガイドに沿って)
sudo docker pull ultralytics/ultralytics:latest-jetson

# 例:JetsonのGPUを使える形で起動(公式ガイドの記載を参照)
sudo docker run -it --runtime nvidia --network host ultralytics/ultralytics:latest-jetson

TensorRTエンジン化(.engine)まで:yolo export の基本

UltralyticsのExport(書き出し)機能は、CLIだと yolo export ... format=engine の形です。

今回の成功パターン(ログそのままに近い形)はこれです:

# 例:YOLO12nをTensorRTエンジン化(FP16)
yolo export model=yolo12n.pt format=engine imgsz=320 half=True

エンジン生成が終わったら、engineを直接推論できます:

yolo predict task=detect model=yolo12n.engine source='https://ultralytics.com/images/bus.jpg' imgsz=320 half=True

重要:np.bool エラーの原因と直し方(今回のハマりポイント)

私のログで最初に出た致命的エラーはこれです:

  • AttributeError: module ‘numpy’ has no attribute ‘bool’

なぜ起きる?

NumPy 1.24で np.bool が削除されたためです(非推奨だった別名が期限切れになって削除)。
TensorRT(もしくは周辺コード)がまだ np.bool を参照していると、そこで落ちます。

どう直す?(最も安全な現実解)

NumPyを 1.23.5 に固定します。今回のログでも numpy==1.23.5 に戻したら np.bool が復活し、TensorRT推論が動きました。

コンテナ内で以下:

python3 -m pip uninstall -y numpy
python3 -m pip install "numpy==1.23.5"

# 念のため確認
python3 -c "import numpy as np; print(np.__version__, hasattr(np,'bool')); print(np.bool)"

成功例:YOLO11 / YOLO12 はTensorRT化できて推論も速い

私のログでは、

  • yolo11n.engine で推論成功
  • yolo12n.engine も export 成功 → 推論成功(320入力で 255.9ms 推論)

という流れでした。
Jetson Nanoでは、まず YOLO11n / YOLO12n をTensorRT化して運用が現実的です。

失敗例:YOLO26 をTensorRT化しようとすると Mod 演算子で落ちる

ログの最後で起きたのがこれです:

  • No importer registered for op: Mod
  • Plugin not found...
  • TensorRT export failure

これは「あなたの環境が悪い」というより、TensorRT側のONNXパーサが、その演算子(Mod)を処理できないタイプの問題です。実際、NVIDIA側でも「Mod が import できない/プラグインが必要」といった報告が見つかります。

回避策1(まず試す価値が高い):YOLO26の end2end=False を指定

UltralyticsのExport引数には end2end があり、YOLO26/YOLOv10の NMS-free(end-to-end)挙動を上書きできると説明されています。False にすると従来のNMSベース互換の出力に寄せられます。

なので、次を試す価値があります:

yolo export model=yolo26n.pt format=engine imgsz=320 half=True end2end=False

※これで内部グラフが変わり、Mod が消える(もしくは別形に落ちる)可能性があります。必ず成功する保証はないですが、「同じモデルでグラフを変えられる」唯一の公式ルートです。

回避策2:TensorRTにこだわらず、ONNX止まりで運用する

Jetson NanoのTensorRT(特に8.2系)では、モデルによっては対応演算子の都合で詰みます。
その場合は、

  • format=onnx で止める
  • ONNX Runtime(GPU)や別の推論経路で動かす

という逃げ道もあります(ただしJetsonはここも依存関係が難しいので、運用難易度は上がります)。

回避策3:JetPack / TensorRT を上げられる機種へ(Orin等)

どうしてもYOLO26をTensorRT化したいなら、**新しいTensorRTが使えるJetson(Orin世代)**へ寄せるのが最短なこともあります。

つまずきやすいポイントまとめ(チェックリスト)

  • Dockerで環境固定できているか(ホストに直接pip地獄を作らない)
  • np.bool エラーが出たら NumPy 1.23.5 に固定(NumPy 1.24で削除)
  • yolo export ... format=engine の基本を守る(Ultralytics公式のExport手順)
  • YOLO26が Mod で落ちたら end2end=False を試す(YOLO26向け引数)
  • それでもダメなら「モデルをYOLO12にする」か「ONNX運用」か「機種更新」

この記事のまとめ

Jetson NanoでYOLOを本気で運用するなら、

  • Dockerで環境を固定
  • TensorRT(.engine)化で高速推論
  • NumPy 1.24問題(np.bool)を踏まえて 1.23.5 に固定
  • YOLO26はTensorRT 8.2で演算子(Mod)詰まりの可能性 → end2end=False等で回避を試す

が、いちばん再現性が高いルートです

それではまた。

About The Author

Hideki
東京大学発AIスタートアップ企業でロボット開発室室長、画像解析室室長、動画解析室室長を務め、AIエンジニアとしても画像認識関連の特許を在籍中に3つ取得。その後、KDDIグループ内でプロダクトリーダーとして自然言語処理パッケージの自社開発を経て、現在はAGRISTのテックリードとして農業の人手不足の解決に向けた収穫ロボットの開発にチャレンジしている。ロボットは技術の総合格闘技との考え方から、AIだけでなく、ハードやエレキ、通信からクラウド、IOTまで幅広く手掛けることができる。最近では人とロボットの共存を目指すべく、性能だけを追い求める開発から「感動やワクワク体験」をデザインできるロボットの研究を進めており、人とロボットがうまく共存できる世界を作り出したいと日々行動している。

LEAVE A REPLY

*
*
* (公開されません)