クイックスタートガイドNVIDIAジェットソンUltralytics YOLOv8
この包括的なガイドでは、Ultralytics YOLOv8 をNVIDIA Jetsonデバイス上に展開するための詳細なウォークスルーを提供します。さらに、これらの小型で強力なデバイス上のYOLOv8 の機能を実証するためのパフォーマンスベンチマークを紹介しています。
注
このガイドはNVIDIA Jetson Orin NX 16GBをベースにしたSeeed Studio reComputer J4012で、最新のJP5.1.3のJetPackリリースでテストされています。Jetson Nanoのような古いJetsonデバイス(JP4.6.4までしかサポートしていません)にこのガイドを使用しても、動作が保証されない場合があります。しかし、JP5.1.3が動作しているすべてのJetson Orin、Xavier NX、AGX Xavierデバイスでは動作する見込みです。
NVIDIA Jetsonとは?
NVIDIA Jetsonは、エッジデバイスに加速されたAI(人工知能)コンピューティングをもたらすように設計された一連の組み込みコンピューティングボードです。これらのコンパクトで強力なデバイスは、NVIDIAのGPUアーキテクチャを中心に構築されており、クラウドコンピューティングリソースに依存することなく、デバイス上で複雑なAIアルゴリズムやディープラーニングモデルを直接実行することができます。Jetsonボードは、ロボット工学、自律走行車、産業オートメーション、およびAI推論を低レイテンシかつ高効率でローカルに実行する必要があるその他のアプリケーションでよく使用される。さらに、これらのボードはARM64アーキテクチャをベースとしており、従来のGPUコンピューティングデバイスと比較して低消費電力で動作します。
NVIDIA Jetsonシリーズの比較
Jetson Orinは、NVIDIA Ampereアーキテクチャに基づくNVIDIA Jetsonファミリーの最新版で、前世代と比較してAI性能が飛躍的に向上している。下の表は、エコシステムにおけるJetsonデバイスのいくつかを比較したものである。
Jetson AGX Orin 64GB | Jetson Orin NX 16GB | ジェットソン・オリン・ナノ8GB | ジェットソンAGXザビエル | ジェットソン・ザビエルNX | ジェットソン・ナノ | |
---|---|---|---|---|---|---|
AIパフォーマンス | 275 TOPS | 100 TOPS | 40 TOPs | 32 TOPS | 21 トップス | 472 GFLOPS |
GPU | 2048 コア NVIDIA Ampere アーキテクチャ GPU、64Tensor コア | 1024コアのNVIDIA AmpereアーキテクチャGPU、32Tensor コア | 1024コアのNVIDIA AmpereアーキテクチャGPU、32Tensor コア | 512コアのNVIDIA VoltaアーキテクチャGPU、64Tensor コア | 384コアのNVIDIA Volta™ アーキテクチャGPU、48Tensor コア搭載 | 128コアのNVIDIA Maxwell™ アーキテクチャGPU |
GPU最大周波数 | 1.3 GHz | 918 MHz | 625MHz | 1377MHz | 1100 MHz | 921MHz |
CPU | 12コアNVIDIA Arm® Cortex A78AE v8.2 64ビットCPU 3MB L2 + 6MB L3 | 8コアNVIDIA Arm® Cortex A78AE v8.2 64ビットCPU 2MB L2 + 4MB L3 | 6コアArm® Cortex®-A78AE v8.2 64ビットCPU 1.5MB L2 + 4MB L3 | 8コアNVIDIA Carmel Arm®v8.2 64ビットCPU 8MB L2 + 4MB L3 | 6コアNVIDIA Carmel Arm®v8.2 64ビットCPU 6MB L2 + 4MB L3 | クアッドコアArm® Cortex®-A57 MPCoreプロセッサ |
CPU最大周波数 | 2.2 GHz | 2.0 GHz | 1.5 GHz | 2.2 GHz | 1.9 GHz | 1.43GHz |
メモリー | 64GB 256ビット LPDDR5 204.8GB/秒 | 16GB 128ビット LPDDR5 102.4GB/秒 | 8GB 128ビット LPDDR5 68GB/秒 | 32GB 256ビット LPDDR4x 136.5GB/秒 | 8GB 128ビット LPDDR4x 59.7GB/秒 | 4GB 64ビット LPDDR4 25.6GB/秒" |
より詳細な比較表については、NVIDIA Jetson公式ページの 技術仕様セクションをご覧ください。
NVIDIA JetPackとは何ですか?
Jetsonモジュールを駆動するNVIDIA JetPack SDKは、最も包括的なソリューションであり、エンドツーエンドの高速化AIアプリケーションを構築するための完全な開発環境を提供し、市場投入までの時間を短縮します。JetPackには、ブートローダ、Linuxカーネル、Ubuntuデスクトップ環境を備えたJetson Linuxと、GPUコンピューティング、マルチメディア、グラフィックス、コンピュータビジョンの高速化のためのライブラリ一式が含まれています。また、ホスト・コンピュータと開発者キットの両方に対応したサンプル、ドキュメント、開発者ツールも含まれており、ストリーミング・ビデオ解析用のDeepStream、ロボット工学用のIsaac、会話AI用のRivaなど、より高度なSDKもサポートしています。
NVIDIAジェットソンへのFlash JetPack
NVIDIA Jetsonデバイスを手に入れた後の最初のステップは、NVIDIA JetPackをデバイスにフラッシュすることです。NVIDIA Jetsonデバイスをフラッシュする方法はいくつかあります。
- Jetson Orin Nano Developer Kitなどの公式NVIDIA開発キットをお持ちの場合は、このリンクからイメージをダウンロードし、JetPackを入れたSDカードを用意してデバイスを起動することができます。
- 他のNVIDIA Development Kitをお持ちの場合は、こちらのリンクから SDK Managerを使ってJetPackをデバイスにフラッシュすることができます。
- Seeed Studio reComputer J4012デバイスをお持ちの場合は、このリンクからJetPackを付属のSSDにフラッシュすることができます。
- NVIDIA Jetsonモジュールを搭載した他のサードパーティ製デバイスをお持ちの場合は、このリンクからコマンドライン・フラッシュを実行することをお勧めします。
注
上記の3および4の方法については、システムをフラッシュしてデバイスを起動した後、デバイスのターミナルで "sudo apt update && sudo apt install nvidia-jetpack -y "を入力して、必要な残りのJetPackコンポーネントをすべてインストールしてください。
セットアップUltralytics
次のComputer Visionプロジェクトを構築するために、NVIDIA Jetson上でUltralytics パッケージをセットアップする方法は2つあります。どちらを使っても構いません。
Dockerで始める
Ultralytics YOLOv8 をNVIDIA Jetson上で使い始める最速の方法は、Jetson用にビルド済みのdockerイメージを使って実行することです。
以下のコマンドを実行すると、DockerコンテナがJetson上で実行されます。これは、PyTorch と Torchvision が Python3 環境に含まれるl4t-pytorchdocker イメージに基づいています。
t=ultralytics/ultralytics:latest-jetson && sudo docker pull $t && sudo docker run -it --ipc=host --runtime=nvidia $t
これが完了したら、NVIDIA JetsonでTensorRT 。
Dockerなしで始める
Ultralytics パッケージのインストール
ここでは、Jetsonにultralyicsパッケージをインストールし、オプションの依存関係を追加して、PyTorch モデルを他の異なるフォーマットにエクスポートできるようにします。TensoRTは、Jetsonデバイスから最大限のパフォーマンスを引き出せるようにするため、主にNVIDIATensorRT エクスポートに焦点を当てます。
-
パッケージリストの更新、pipのインストール、最新版へのアップグレード
-
インストール
ultralytics
pip パッケージと依存関係のあるオプション -
デバイスを再起動する
PyTorch とトーチビジョンをインストールする
上記のultralytics をインストールすると、Torch と Torchvision がインストールされます。しかし、pip経由でインストールされたこれら2つのパッケージは、ARM64アーキテクチャをベースとするJetsonプラットフォーム上で動作する互換性がない。そのため、ビルド済みのPyTorch pip wheelを手動でインストールし、ソースからTorchvisionをコンパイル/インストールする必要がある。
-
現在インストールされているPyTorch と Torchvision をアンインストールする。
-
JP5.1.3 に従ってPyTorch 2.1.0 をインストールする。
sudo apt-get install -y libopenblas-base libopenmpi-dev wget https://developer.download.nvidia.com/compute/redist/jp/v512/pytorch/torch-2.1.0a0+41361538.nv23.06-cp38-cp38-linux_aarch64.whl -O torch-2.1.0a0+41361538.nv23.06-cp38-cp38-linux_aarch64.whl pip install torch-2.1.0a0+41361538.nv23.06-cp38-cp38-linux_aarch64.whl
-
PyTorch v2.1.0に従ってTorchvision v0.16.2をインストールしてください。
PyTorch for Jetsonのページで、異なるJetPackのバージョンに対応したPyTorch 。PyTorch, Torchvisionの互換性についての詳細なリストは、PyTorch and Torchvision compatibilityページをご覧ください。
インストール onnxruntime-gpu
について onnxruntime-gpu PyPIでホストされているパッケージには aarch64
バイナリをインストールする必要がある。そのため、このパッケージを手動でインストールする必要がある。このパッケージはいくつかのエクスポートに必要です。
すべて異なる onnxruntime-gpu
JetPack とPython の異なるバージョンに対応するパッケージがリストされている。 これ.しかし、ここでは onnxruntime-gpu 1.17.0
と Python3.8
このガイドで使用しているJetPackをサポートしています。
wget https://nvidia.box.com/shared/static/zostg6agm00fb6t5uisw51qi6kpcuwzd.whl -O onnxruntime_gpu-1.17.0-cp38-cp38-linux_aarch64.whl
pip install onnxruntime_gpu-1.17.0-cp38-cp38-linux_aarch64.whl
注
onnxruntime-gpu
は自動的にnumpyのバージョンを最新に戻します。そのため、numpyを再インストールする必要があります。 1.23.5
を実行して問題を解決する:
pip install numpy==1.23.5
NVIDIA JetsonでTensorRT 。
Ultralytics TensorRT でサポートされているすべてのモデルエクスポートフォーマットの中で、 は、NVIDIA Jetsonデバイスで動作するときに最高の推論パフォーマンスを提供します。また、TensorRT TensorRT についての詳細なドキュメントもあります。
モデルをTensorRT に変換し、推論を実行する。
PyTorch フォーマットのYOLOv8n モデルは、エクスポートされたモデルで推論を実行するためにTensorRT に変換されます。
例
from ultralytics import YOLO
# Load a YOLOv8n PyTorch model
model = YOLO('yolov8n.pt')
# Export the model
model.export(format='engine') # creates 'yolov8n.engine'
# Load the exported TensorRT model
trt_model = YOLO('yolov8n.engine')
# Run inference
results = trt_model('https://ultralytics.com/images/bus.jpg')
注
モデルを異なるモデル形式にエクスポートする際の追加引数については、エクスポートページをご覧ください。
NVIDIA Jetson OrinYOLOv8 ベンチマーク
YOLOv8 ベンチマークは、Ultralytics チームにより、速度と精度を測定する 10 種類のモデルフォーマットで実行されました:PyTorch,TorchScript,ONNX,OpenVINO,TensorRT,TF SavedModel ,TF Graphdef ,TF ,PaddlePaddle,NCNN 。ベンチマークは、Jetson Orin NX 16GBデバイスを搭載したSeeed Studio reComputer J4012で、FP32の精度で、デフォルトの入力画像サイズ640で実行した。
比較表
すべてのエクスポートモデルがNVIDIA Jetsonで動作していますが、以下の比較表では、PyTorch 、TorchScript、 TensorRT、JetsonのGPUを使用し、最良の結果が得られることが保証されているため、これらのモデルのみを取り上げました。なぜなら、これらはJetsonのGPUを利用し、最高の結果を出すことが保証されているからです。他のすべてのエクスポートはCPUのみを利用し、パフォーマンスは上記の3つほど良くありません。このグラフの後のセクションで、すべてのエクスポートのベンチマークを見ることができます。
詳細比較表
以下の表は、5つの異なるモデル(YOLOv8n,YOLOv8s,YOLOv8m,YOLOv8l,YOLOv8x)を10種類のフォーマット(PyTorch,TorchScript,ONNX,OpenVINO,TensorRT,TF SavedModel ,TF Graphdef ,TF Lite,PaddlePaddle,NCNN)でベンチマークした結果であり、各組み合わせのステータス、サイズ、mAP50-95(B)メトリック、推論時間を示している。
パフォーマンス
フォーマット | ステータス | ディスク上のサイズ (MB) | mAP50-95(B) | 推論時間(ms/im) |
---|---|---|---|---|
PyTorch | ✅ | 6.2 | 0.6381 | 14.3 |
TorchScript | ✅ | 12.4 | 0.6117 | 13.3 |
ONNX | ✅ | 12.2 | 0.6092 | 70.6 |
OpenVINO | ✅ | 12.3 | 0.6092 | 104.2 |
TensorRT | ✅ | 13.6 | 0.6117 | 8.9 |
TF SavedModel | ✅ | 30.6 | 0.6092 | 141.74 |
TF GraphDef | ✅ | 12.3 | 0.6092 | 199.93 |
TF ライト | ✅ | 12.3 | 0.6092 | 349.18 |
PaddlePaddle | ✅ | 24.4 | 0.6030 | 555 |
NCNN | ✅ | 12.2 | 0.6092 | 32 |
フォーマット | ステータス | ディスク上のサイズ (MB) | mAP50-95(B) | 推論時間(ms/im) |
---|---|---|---|---|
PyTorch | ✅ | 21.5 | 0.6967 | 18 |
TorchScript | ✅ | 43.0 | 0.7136 | 23.81 |
ONNX | ✅ | 42.8 | 0.7136 | 185.55 |
OpenVINO | ✅ | 42.9 | 0.7136 | 243.97 |
TensorRT | ✅ | 44.0 | 0.7136 | 14.82 |
TF SavedModel | ✅ | 107 | 0.7136 | 260.03 |
TF GraphDef | ✅ | 42.8 | 0.7136 | 423.4 |
TF ライト | ✅ | 42.8 | 0.7136 | 1046.64 |
PaddlePaddle | ✅ | 85.5 | 0.7140 | 1464 |
NCNN | ✅ | 42.7 | 0.7200 | 63 |
フォーマット | ステータス | ディスク上のサイズ (MB) | mAP50-95(B) | 推論時間(ms/im) |
---|---|---|---|---|
PyTorch | ✅ | 49.7 | 0.7370 | 36.4 |
TorchScript | ✅ | 99.2 | 0.7285 | 53.58 |
ONNX | ✅ | 99 | 0.7280 | 452.09 |
OpenVINO | ✅ | 99.1 | 0.7280 | 544.36 |
TensorRT | ✅ | 100.3 | 0.7285 | 33.21 |
TF SavedModel | ✅ | 247.5 | 0.7280 | 543.65 |
TF GraphDef | ✅ | 99 | 0.7280 | 906.63 |
TF ライト | ✅ | 99 | 0.7280 | 2758.08 |
PaddlePaddle | ✅ | 197.9 | 0.7280 | 3678 |
NCNN | ✅ | 98.9 | 0.7260 | 135 |
フォーマット | ステータス | ディスク上のサイズ (MB) | mAP50-95(B) | 推論時間(ms/im) |
---|---|---|---|---|
PyTorch | ✅ | 83.7 | 0.7768 | 61.3 |
TorchScript | ✅ | 167.2 | 0.7554 | 87.9 |
ONNX | ✅ | 166.8 | 0.7551 | 852.29 |
OpenVINO | ✅ | 167 | 0.7551 | 1012.6 |
TensorRT | ✅ | 168.4 | 0.7554 | 51.23 |
TF SavedModel | ✅ | 417.2 | 0.7551 | 990.45 |
TF GraphDef | ✅ | 166.9 | 0.7551 | 1649.86 |
TF ライト | ✅ | 166.9 | 0.7551 | 5652.37 |
PaddlePaddle | ✅ | 333.6 | 0.7551 | 7114.67 |
NCNN | ✅ | 166.8 | 0.7685 | 231.9 |
フォーマット | ステータス | ディスク上のサイズ (MB) | mAP50-95(B) | 推論時間(ms/im) |
---|---|---|---|---|
PyTorch | ✅ | 130.5 | 0.7759 | 93 |
TorchScript | ✅ | 260.7 | 0.7472 | 135.1 |
ONNX | ✅ | 260.4 | 0.7479 | 1296.13 |
OpenVINO | ✅ | 260.6 | 0.7479 | 1502.15 |
TensorRT | ✅ | 261.8 | 0.7469 | 84.53 |
TF SavedModel | ✅ | 651.1 | 0.7479 | 1451.76 |
TF GraphDef | ✅ | 260.5 | 0.7479 | 4029.36 |
TF ライト | ✅ | 260.4 | 0.7479 | 8772.86 |
PaddlePaddle | ✅ | 520.8 | 0.7479 | 10619.53 |
NCNN | ✅ | 260.4 | 0.7646 | 376.38 |
さまざまなバージョンのNVIDIA Jetsonハードウェア上で実行されるSeeed Studioによるベンチマークの詳細については、このリンクをご覧ください。
結果を再現する
上記のUltralytics のベンチマークをすべてのエクスポートフォーマットで再現するには、以下のコードを実行してください:
例
ベンチマークの結果は、システムの正確なハードウェアとソフトウェアの構成、およびベンチマークの実行時のシステムの現在の作業負荷によって異なる可能性があることに注意してください。最も信頼性の高い結果を得るには、画像数の多いデータセットを使用します。 data='coco8.yaml' (4 val images), or
data='coco.yaml'` (5000 val images)。
NVIDIA Jetson使用時のベストプラクティス
NVIDIA Jetsonを使用する場合、YOLOv8 を実行するNVIDIA Jetsonで最大限のパフォーマンスを発揮するために、従うべきベストプラクティスがいくつかあります。
-
MAXパワーモードを有効にする
ジェットソンのMAXパワーモードを有効にすると、すべてのCPU、GPUコアがオンになります。
-
ジェットソン・クロックを有効にする
Jetson Clocksを有効にすると、すべてのCPU、GPUコアが最大周波数で動作するようになります。
-
Jetson Statsアプリケーションのインストール
jetson statsアプリケーションを使用して、システムコンポーネントの温度を監視し、CPU、GPU、RAMの使用率の表示、電源モードの変更、最大クロックへの設定、JetPack情報の確認など、その他のシステムの詳細を確認することができます。
次のステップ
NVIDIA Jetson でYOLOv8 のセットアップに成功しました!さらなる学習とサポートについては、Ultralytics YOLOv8 Docsのガイドをご覧ください!