Zum Inhalt springen

Schnellstartanleitung: NVIDIA Jetson mit Ultralytics YOLOv8

Dieser umfassende Leitfaden bietet eine detaillierte Anleitung für den Einsatz von Ultralytics YOLOv8 auf NVIDIA Jetson-Geräten. Außerdem zeigt er anhand von Leistungsbenchmarks die Möglichkeiten von YOLOv8 auf diesen kleinen und leistungsstarken Geräten.

NVIDIA Jetson Ă–kosystem

Hinweis

Diese Anleitung wurde mit dem Seeed Studio reComputer J4012 getestet, der auf dem NVIDIA Jetson Orin NX 16GB basiert und auf dem die neueste stabile JetPack-Version JP5.1.3 läuft. Wenn du diese Anleitung für ältere Jetson-Geräte wie den Jetson Nano verwendest (dieser wird nur bis JP4.6.4 unterstützt), kann nicht garantiert werden, dass sie funktioniert. Es wird jedoch erwartet, dass sie auf allen Jetson Orin, Xavier NX und AGX Xavier Geräten mit JP5.1.3 funktioniert.

Was ist NVIDIA Jetson?

NVIDIA Jetson ist eine Reihe von Embedded Computing Boards, die beschleunigte KI (künstliche Intelligenz) auf Edge Devices bringen sollen. Diese kompakten und leistungsstarken Geräte basieren auf der GPU-Architektur von NVIDIA und sind in der Lage, komplexe KI-Algorithmen und Deep-Learning-Modelle direkt auf dem Gerät auszuführen, ohne auf Cloud-Computing-Ressourcen angewiesen zu sein. Jetson Boards werden häufig in der Robotik, in autonomen Fahrzeugen, in der Industrieautomatisierung und in anderen Anwendungen eingesetzt, bei denen KI-Inferenzen lokal mit geringer Latenz und hoher Effizienz ausgeführt werden müssen. Außerdem basieren diese Boards auf der ARM64-Architektur und verbrauchen im Vergleich zu herkömmlichen GPU-Computing-Geräten weniger Strom.

NVIDIA Jetson Serie Vergleich

Jetson Orin ist die neueste Iteration der NVIDIA Jetson-Familie, die auf der NVIDIA Ampere-Architektur basiert und im Vergleich zu den vorherigen Generationen eine drastisch verbesserte KI-Leistung bietet. In der folgenden Tabelle werden einige der Jetson-Geräte im Ökosystem verglichen.

Jetson AGX Orin 64GB Jetson Orin NX 16GB Jetson Orin Nano 8GB Jetson AGX Xavier Jetson Xavier NX Jetson Nano
KI Leistung 275 TOPS 100 TOPS 40 TOPs 32 TOPS 21 TOPS 472 GFLOPS
GPU 2048 Kerne NVIDIA Ampere Architektur GPU mit 64 Tensor Kernen NVIDIA Ampere-Architektur-GPU mit 1024 Kernen und 32 Tensor Kernen NVIDIA Ampere-Architektur-GPU mit 1024 Kernen und 32 Tensor Kernen 512 Kerne NVIDIA Volta Architektur GPU mit 64 Tensor Kernen 384 Kerne NVIDIA Volta™ Architektur GPU mit 48 Tensor Kernen 128-Kern NVIDIA Maxwell™ Architektur GPU
GPU Max Frequenz 1,3 GHz 918 MHz 625 MHz 1377 MHz 1100 MHz 921MHz
CPU 12-Kern NVIDIA Arm® Cortex A78AE v8.2 64-bit CPU 3MB L2 + 6MB L3 8-Kern NVIDIA Arm® Cortex A78AE v8.2 64-bit CPU 2MB L2 + 4MB L3 6-Kern Arm® Cortex®-A78AE v8.2 64-bit CPU 1,5MB L2 + 4MB L3 8-Kern NVIDIA Carmel Arm®v8.2 64-bit CPU 8MB L2 + 4MB L3 6-Kern NVIDIA Carmel Arm®v8.2 64-bit CPU 6MB L2 + 4MB L3 Quad-Core Arm® Cortex®-A57 MPCore Prozessor
CPU Max Frequenz 2,2 GHz 2,0 GHz 1,5 GHz 2,2 GHz 1,9 GHz 1.43GHz
Speicher 64GB 256-bit LPDDR5 204.8GB/s 16GB 128-bit LPDDR5 102,4GB/s 8GB 128-bit LPDDR5 68 GB/s 32GB 256-bit LPDDR4x 136,5GB/s 8GB 128-bit LPDDR4x 59,7GB/s 4GB 64-bit LPDDR4 25.6GB/s"

Eine detailliertere Vergleichstabelle findest du im Abschnitt Technische Daten auf der offiziellen NVIDIA Jetson Seite.

Was ist NVIDIA JetPack?

Das NVIDIA JetPack SDK, das die Jetson-Module antreibt, ist die umfassendste Lösung und bietet eine vollständige Entwicklungsumgebung für die Erstellung von durchgängig beschleunigten KI-Anwendungen und verkürzt die Markteinführungszeit. JetPack umfasst Jetson Linux mit Bootloader, Linux-Kernel, Ubuntu-Desktop-Umgebung und einem kompletten Satz von Bibliotheken für die Beschleunigung von GPU-Computing, Multimedia, Grafik und Computer Vision. Außerdem enthält es Beispiele, Dokumentationen und Entwickler-Tools für den Host-Computer und das Developer Kit und unterstützt SDKs auf höherer Ebene wie DeepStream für Streaming Video Analytics, Isaac für Robotik und Riva für Konversations-KI.

Flash JetPack fĂĽr NVIDIA Jetson

Der erste Schritt, nachdem du ein NVIDIA Jetson Gerät in die Hände bekommen hast, ist das Flashen des NVIDIA JetPack auf das Gerät. Es gibt verschiedene Möglichkeiten, NVIDIA Jetson-Geräte zu flashen.

  1. Wenn du ein offizielles NVIDIA Development Kit wie das Jetson Orin Nano Developer Kit besitzt, kannst du diesen Link besuchen, um ein Image herunterzuladen und eine SD-Karte mit JetPack zum Booten des Geräts vorzubereiten.
  2. Wenn du ein anderes NVIDIA Development Kit besitzt, kannst du diesen Link besuchen, um JetPack mit dem SDK Manager auf das Gerät zu flashen.
  3. Wenn du ein Seeed Studio reComputer J4012 Gerät besitzt, kannst du diesen Link besuchen, um JetPack auf die mitgelieferte SSD zu flashen.
  4. Wenn du ein anderes Gerät eines Drittanbieters besitzt, das mit dem NVIDIA Jetson Modul betrieben wird, empfehlen wir dir, das Flashen per Kommandozeile unter diesem Link durchzuführen.

Hinweis

Bei den oben genannten Methoden 3 und 4 gibst du nach dem Flashen des Systems und dem Booten des Geräts bitte "sudo apt update && sudo apt install nvidia-jetpack -y" auf dem Geräteterminal ein, um alle übrigen benötigten JetPack-Komponenten zu installieren.

Einrichten Ultralytics

Es gibt zwei Möglichkeiten, das Ultralytics Paket auf dem NVIDIA Jetson einzurichten, um dein nächstes Computer Vision Projekt zu erstellen. Du kannst eine von beiden nutzen.

Mit Docker beginnen

Der schnellste Weg, um mit Ultralytics YOLOv8 auf dem NVIDIA Jetson loszulegen, ist die Verwendung eines vorgefertigten Docker-Images fĂĽr den Jetson.

Führe den unten stehenden Befehl aus, um den Docker-Container zu ziehen und auf dem Jetson auszuführen. Dies basiert auf dem l4t-pytorch Docker-Image, das PyTorch und Torchvision in einer Python3-Umgebung enthält.

t=ultralytics/ultralytics:latest-jetson && sudo docker pull $t && sudo docker run -it --ipc=host --runtime=nvidia $t

Wenn du das getan hast, fahre mit dem Abschnitt TensorRT auf NVIDIA Jetson verwenden fort.

Start ohne Docker

Ultralytics Paket installieren

Hier werden wir das ultralyics-Paket auf dem Jetson mit optionalen Abhängigkeiten installieren, damit wir die PyTorch Modelle in andere Formate exportieren können. Wir werden uns hauptsächlich auf die Exporte von NVIDIA TensorRT konzentrieren, da TensoRT dafür sorgt, dass wir die maximale Leistung aus den Jetson-Geräten herausholen können.

  1. Paketliste aktualisieren, pip installieren und auf den neuesten Stand bringen

    sudo apt update
    sudo apt install python3-pip -y
    pip install -U pip
    
  2. Installiere ultralytics Pip-Paket mit optionalen Abhängigkeiten

    pip install ultralytics[export]
    
  3. Das Gerät neu starten

    sudo reboot
    

Installiere PyTorch und Torchvision

Die obige ultralytics Installation wird Torch und Torchvision installieren. Diese beiden ĂĽber pip installierten Pakete sind jedoch nicht kompatibel mit der Jetson-Plattform, die auf der ARM64-Architektur basiert. Deshalb mĂĽssen wir PyTorch pip wheel manuell installieren und Torchvision aus dem Quellcode kompilieren und installieren.

  1. Deinstalliere die aktuell installierte PyTorch und Torchvision

    pip uninstall torch torchvision
    
  2. Installiere PyTorch 2.1.0 gemäß JP5.1.3

    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
    
  3. Installiere Torchvision v0.16.2 gemäß PyTorch v2.1.0

    sudo apt install -y libjpeg-dev zlib1g-dev
    git clone https://github.com/pytorch/vision torchvision
    cd torchvision
    git checkout v0.16.2
    python3 setup.py install --user
    

Auf der SeitePyTorch für Jetson findest du alle verschiedenen Versionen von PyTorch für verschiedene JetPack-Versionen. Eine detailliertere Liste der PyTorch, Torchvision-Kompatibilität findest du auf der SeitePyTorch und Torchvision-Kompatibilität.

Installiere onnxruntime-gpu

Die onnxruntime-gpu Paket, das in PyPI gehostet wird, hat keine aarch64 Binärdateien für den Jetson. Wir müssen dieses Paket also manuell installieren. Dieses Paket wird für einige der Exporte benötigt.

Alle unterschiedlich onnxruntime-gpu Pakete, die den verschiedenen JetPack- und Python -Versionen entsprechen, sind aufgelistet hier. Hier werden wir jedoch herunterladen und installieren onnxruntime-gpu 1.17.0 mit Python3.8 UnterstĂĽtzung fĂĽr das JetPack, das wir fĂĽr diesen Leitfaden verwenden.

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

Hinweis

onnxruntime-gpu wird die Numpy-Version automatisch auf die neueste Version zurĂĽckgesetzt. Wir mĂĽssen also numpy neu installieren, um 1.23.5 um ein Problem zu beheben, indem du es ausfĂĽhrst:

pip install numpy==1.23.5

TensorRT auf NVIDIA Jetson verwenden

Von allen Modellexportformaten, die von Ultralytics unterstützt werden, liefert TensorRT die beste Inferenzleistung bei der Arbeit mit NVIDIA Jetson-Geräten und wir empfehlen, TensorRT mit Jetson zu verwenden. Wir haben auch ein ausführliches Dokument zu TensorRT hier.

Modell in TensorRT umwandeln und Inferenz durchfĂĽhren

Das Modell YOLOv8n im Format PyTorch wird in TensorRT konvertiert, um die Inferenz mit dem exportierten Modell durchzufĂĽhren.

Beispiel

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')
# Export a YOLOv8n PyTorch model to TensorRT format
yolo export model=yolov8n.pt format=engine  # creates 'yolov8n.engine'

# Run inference with the exported model
yolo predict model=yolov8n.engine source='https://ultralytics.com/images/bus.jpg'

Hinweis

Besuche die Seite Exportieren, um zusätzliche Argumente beim Exportieren von Modellen in verschiedene Modellformate zu erhalten

NVIDIA Jetson Orin YOLOv8 Benchmarks

YOLOv8 Benchmarks wurden vom Ultralytics Team auf 10 verschiedenen Modellformaten durchgeführt, um die Geschwindigkeit und Genauigkeit zu messen: PyTorch, TorchScript, ONNX, OpenVINO, TensorRT, TF SavedModel , TF Graphdef , TF Lite, PaddlePaddle, NCNN. Die Benchmarks wurden auf dem Seeed Studio reComputer J4012 mit einem Jetson Orin NX 16GB mit FP32-Genauigkeit und einer Standard-Eingangsgröße von 640 Bildern durchgeführt.

Vergleichstabelle

Obwohl alle Modellexporte mit dem NVIDIA Jetson funktionieren, haben wir nur PyTorch, TorchScript und TensorRT in die untenstehende Vergleichstabelle aufgenommen, weil sie die GPU des Jetson nutzen und garantiert die besten Ergebnisse liefern. Alle anderen Exporte nutzen nur die CPU und die Leistung ist nicht so gut wie die der drei oben genannten. Benchmarks fĂĽr alle Exporte findest du im Abschnitt nach diesem Diagramm.

NVIDIA Jetson Ă–kosystem

Detaillierte Vergleichstabelle

Die folgende Tabelle zeigt die Benchmark-Ergebnisse für fünf verschiedene Modelle (YOLOv8n, YOLOv8s, YOLOv8m, YOLOv8l, YOLOv8x) in zehn verschiedenen Formaten (PyTorch, TorchScript, ONNX, OpenVINO, TensorRT, TF SavedModel , TF Graphdef , TF Lite, PaddlePaddle, NCNN) und gibt den Status, die Größe, die mAP50-95(B) Metrik und die Inferenzzeit für jede Kombination an.

Leistung

Format Status Größe auf der Festplatte (MB) mAP50-95(B) Inferenzzeit (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 Lite âś… 12.3 0.6092 349.18
PaddlePaddle âś… 24.4 0.6030 555
NCNN âś… 12.2 0.6092 32
Format Status Größe auf der Festplatte (MB) mAP50-95(B) Inferenzzeit (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 Lite âś… 42.8 0.7136 1046.64
PaddlePaddle âś… 85.5 0.7140 1464
NCNN âś… 42.7 0.7200 63
Format Status Größe auf der Festplatte (MB) mAP50-95(B) Inferenzzeit (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 Lite âś… 99 0.7280 2758.08
PaddlePaddle âś… 197.9 0.7280 3678
NCNN âś… 98.9 0.7260 135
Format Status Größe auf der Festplatte (MB) mAP50-95(B) Inferenzzeit (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 Lite âś… 166.9 0.7551 5652.37
PaddlePaddle âś… 333.6 0.7551 7114.67
NCNN âś… 166.8 0.7685 231.9
Format Status Größe auf der Festplatte (MB) mAP50-95(B) Inferenzzeit (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 Lite âś… 260.4 0.7479 8772.86
PaddlePaddle âś… 520.8 0.7479 10619.53
NCNN âś… 260.4 0.7646 376.38

Unter diesem Link findest du weitere Benchmarking-Tests von Seeed Studio mit verschiedenen Versionen der NVIDIA Jetson Hardware.

Reproduziere unsere Ergebnisse

Um die oben genannten Ultralytics Benchmarks fĂĽr alle Exportformate zu reproduzieren, fĂĽhre diesen Code aus:

Beispiel

from ultralytics import YOLO

# Load a YOLOv8n PyTorch model
model = YOLO('yolov8n.pt')

# Benchmark YOLOv8n speed and accuracy on the COCO8 dataset for all all export formats
results = model.benchmarks(data='coco8.yaml', imgsz=640)
# Benchmark YOLOv8n speed and accuracy on the COCO8 dataset for all all export formats
yolo benchmark model=yolov8n.pt data=coco8.yaml imgsz=640

Beachte, dass die Benchmarking-Ergebnisse je nach der genauen Hardware- und Softwarekonfiguration eines Systems sowie der aktuellen Arbeitsbelastung des Systems zum Zeitpunkt der Durchführung der Benchmarks variieren können. Die zuverlässigsten Ergebnisse erhältst du, wenn du einen Datensatz mit einer großen Anzahl von Bildern verwendest, d. h. data='coco8.yaml' (4 val images), ordata='coco.yaml'` (5000 val-Bilder).

Best Practices bei der Verwendung von NVIDIA Jetson

Bei der Verwendung von NVIDIA Jetson gibt es einige Best Practices zu beachten, um die maximale Leistung auf dem NVIDIA Jetson mit YOLOv8 zu erreichen.

  1. MAX Power Modus aktivieren

    Wenn du den MAX Power Mode auf dem Jetson aktivierst, werden alle CPU- und GPU-Kerne eingeschaltet.

    sudo nvpmodel -m 0
    
  2. Jetson-Uhren einschalten

    Wenn du Jetson Clocks aktivierst, wird sichergestellt, dass alle CPU- und GPU-Kerne mit ihrer maximalen Frequenz getaktet sind.

    sudo jetson_clocks
    
  3. Jetson Stats Anwendung installieren

    Mit der Anwendung jetson stats können wir die Temperaturen der Systemkomponenten überwachen und andere Systemdetails überprüfen, wie z. B. die CPU-, GPU- und RAM-Auslastung anzeigen, den Energiemodus ändern, die maximale Taktfrequenz einstellen und JetPack-Informationen überprüfen.

    sudo apt update
    sudo pip install jetson-stats
    sudo reboot
    jtop
    

Jetson-Statistiken

Nächste Schritte

Herzlichen GlĂĽckwunsch zur erfolgreichen Einrichtung von YOLOv8 auf deinem NVIDIA Jetson! Weitere Anleitungen und UnterstĂĽtzung findest du unter Ultralytics YOLOv8 Docs!



Erstellt am 2024-04-02, Aktualisiert am 2024-05-08
Autoren: Burhan-Q (2), lakshanthad (2), glenn-jocher (2)

Kommentare