OpenMMLabというPyTorchベースの画像認識モデルをいくつも提供しているオープンソースのプロジェクトがあります。
タスクごとにライブラリが分かれており、物体検出のMMDetection、セグメンテーションのMMSegmentationというようにMMなんとかという名前で提供されています。
生成AIの影響なのか現在(2026年4月)は開発があまり活発ではないようですが、それでも提供されているモデルは今でも実用的なものだと思います。
JetsonなどのエッジAI端末に組み込むAIの検証に、OpenMMLabのライブラリを使用してみるのもよいかと思います。
ただ開発が止まってしまったせいか、新しめのJetsonにAIをデプロイするとき、そう簡単にはいかないこともあります。
そこで今回はJetson Orin Nanoにデプロイするときにつまずいたポイントについて紹介しようと思います。
OpenMMLabのライブラリで学習させたモデルをJetsonにデプロイする際はMMDeployを用います。
行うこととしては、PyTorchのモデルをTensorRTのモデルに変換することです。
プロジェクトにはJetsonでのMMDeployのビルド方法が説明されています。
しかし私の検証時ではこの手順に沿ってモデルをPyTorchからTensorRTへ変換し、TensorRTモデルで試しに推論しようとしたとき、
#assertion/app/mmdeploy/csrc/mmdeploy/backend_ops/tensorrt/batched_nms/trt_batched_nms.cpp,103
Aborted(core dumped)
となってしまいました。
この原因を追っていくと、MMDeployがJetson Orin Nano用にビルドされていなかったことが分かりました。
より詳しく言うと、ビルド時に作成されるsoファイルをcuobjdumpコマンドにて確認すると、
Fatbin elf code:
================
arch = sm_52
code version = [1,7]
host = linux
compile_size = 64bit
Fatbin elf code:
================
arch = sm_53
code version = [1,7]
host = linux
compile_size = 64bit
・
・
・
Fatbin elf code:
================
arch = sm_86
code version = [1,7]
host = linux
compile_size = 64bit
となっていました。
このarchに注目してみると、sm_52からsm_86までしかなく、Jetson Orin Nano用のsm_87がありませんでした。
このsm_XXですが、CUDA GPU Compute Capabilityという値に対応します。
開発が止まったせいか、ちょうどJetson Orin Nano世代以降から対応していませんでした。
このエラーはMMDeployのビルド時のcmakeの引数に
-DCMAKE_CUDA_ARCHITECTURES=87
を追加することで解消されます。
こちらのTensorRTのカスタムオペレーターをビルドするところになります。
最初のアサーションからここまでたどりつくのに時間がかかりましたので、こちらの情報が参考になればと思います。
今回はOpenMMLabのMMDeployをJetson Orin Nanoでビルドする際のつまずきポイントについて紹介しました。
今回のようなエッジAI端末に従来のAIを組み込むことは今後も少しは残っていくのではと思います。
また今はフィジカルAIの基盤としてJetsonの開発が進んでおり、今後は小規模言語モデルをエッジ端末に組み込むような業務が増えてくるかもしれません。
そこに向けてそういった組み込みの技術も磨いておかねばと思いました。

