Overslaan naar inhoud

Snelstartgids: NVIDIA Jetson met Ultralytics YOLOv8

This comprehensive guide provides a detailed walkthrough for deploying Ultralytics YOLOv8 on NVIDIA Jetson devices. Additionally, it showcases performance benchmarks to demonstrate the capabilities of YOLOv8 on these small and powerful devices.



Kijken: How to Setup NVIDIA Jetson with Ultralytics YOLOv8

NVIDIA Jetson Ecosystem

Opmerking

This guide has been tested with both Seeed Studio reComputer J4012 which is based on NVIDIA Jetson Orin NX 16GB running the latest stable JetPack release of JP5.1.3 and Seeed Studio reComputer J1020 v2 which is based on NVIDIA Jetson Nano 4GB running JetPack release of JP4.6.1. It is expected to work across all the NVIDIA Jetson hardware lineup including latest and legacy.

Wat is NVIDIA Jetson?

NVIDIA Jetson is een serie embedded computing boards ontworpen om versnelde AI (artificial intelligence) computing naar randapparaten te brengen. Deze compacte en krachtige apparaten zijn gebouwd rond NVIDIA's GPU architectuur en zijn in staat om complexe AI algoritmen en deep learning modellen direct op het apparaat uit te voeren, zonder afhankelijk te zijn van cloud computing resources. Jetson kaarten worden vaak gebruikt in robotica, autonome voertuigen, industriële automatisering en andere toepassingen waarbij AI-inferentie lokaal moet worden uitgevoerd met een lage latentie en hoge efficiëntie. Bovendien zijn deze kaarten gebaseerd op de ARM64 architectuur en verbruiken ze minder stroom dan traditionele GPU computers.

NVIDIA Jetson-serie vergelijking

Jetson Orin is the latest iteration of the NVIDIA Jetson family based on NVIDIA Ampere architecture which brings drastically improved AI performance when compared to the previous generations. Below table compared few of the Jetson devices in the ecosystem.

Jetson AGX Orin 64 GB Jetson Orin NX 16 GB Jetson Orin Nano 8GB Jetson AGX Xavier Jetson Xavier NX Jetson Nano
AI-prestaties 275 TOPS 100 TOPS 40 TOP's 32 TOPS 21 TOPS 472 GFLOPS
GPU 2048-core NVIDIA Ampere architecture GPU with 64 Tensor Cores 1024-core NVIDIA Ampere architecture GPU with 32 Tensor Cores 1024-core NVIDIA Ampere architecture GPU with 32 Tensor Cores 512-core NVIDIA Volta architecture GPU with 64 Tensor Cores 384-core NVIDIA Volta™ architecture GPU with 48 Tensor Cores 128-core NVIDIA Maxwell™ architecture GPU
GPU Max Frequency 1,3 GHz 918 MHz 625 MHz 1377 MHz 1100 MHz 921 MHz
CPU 12-core NVIDIA Arm® Cortex A78AE v8.2 64-bit CPU 3MB L2 + 6MB L3 8-core NVIDIA Arm® Cortex A78AE v8.2 64-bit CPU 2MB L2 + 4MB L3 6-core Arm® Cortex®-A78AE v8.2 64-bit CPU 1.5MB L2 + 4MB L3 8-core NVIDIA Carmel Arm®v8.2 64-bit CPU 8MB L2 + 4MB L3 6-core NVIDIA Carmel Arm®v8.2 64-bit CPU 6MB L2 + 4MB L3 Vierkernige Arm® Cortex®-A57 MPCore-processor
CPU Max Frequency 2,2 GHz 2,0 GHz 1,5 GHz 2,2 GHz 1,9 GHz 1,43 GHz
Geheugen 64 GB 256-bits LPDDR5 204,8 GB/s 16 GB 128-bits LPDDR5 102,4 GB/s 8 GB 128-bits LPDDR5 68 GB/s 32 GB 256-bits LPDDR4x 136,5 GB/s 8 GB 128-bits LPDDR4x 59,7 GB/s 4 GB 64-bits LPDDR4 25,6 GB/s".

For a more detailed comparison table, please visit the Technical Specifications section of official NVIDIA Jetson page.

Wat is NVIDIA JetPack?

NVIDIA JetPack SDK powering the Jetson modules is the most comprehensive solution and provides full development environment for building end-to-end accelerated AI applications and shortens time to market. JetPack includes Jetson Linux with bootloader, Linux kernel, Ubuntu desktop environment, and a complete set of libraries for acceleration of GPU computing, multimedia, graphics, and computer vision. It also includes samples, documentation, and developer tools for both host computer and developer kit, and supports higher level SDKs such as DeepStream for streaming video analytics, Isaac for robotics, and Riva for conversational AI.

Flash JetPack naar NVIDIA Jetson

De eerste stap nadat je een NVIDIA Jetson in handen hebt gekregen, is het flashen van NVIDIA JetPack naar het apparaat. Er zijn verschillende manieren om NVIDIA Jetson apparaten te flashen.

  1. If you own an official NVIDIA Development Kit such as the Jetson Orin Nano Developer Kit, you can download an image and prepare an SD card with JetPack for booting the device.
  2. If you own any other NVIDIA Development Kit, you can flash JetPack to the device using SDK Manager.
  3. Als je een Seeed Studio reComputer J4012 hebt, kun je JetPack flashen naar de bijgeleverde SSD en als je een Seeed Studio reComputer J1020 v2 hebt, kun je JetPack flashen naar de eMMC/ SSD.
  4. If you own any other third party device powered by the NVIDIA Jetson module, it is recommended to follow command-line flashing.

Opmerking

Voor methodes 3 en 4 hierboven, voer na het flashen van het systeem en het booten van het apparaat "sudo apt update && sudo apt install nvidia-jetpack -y" in op de apparaatterminal om alle resterende JetPack componenten te installeren die nodig zijn.

Draaien op JetPack 5.x

Als je een Jetson Xavier NX, AGX Xavier, AGX Orin, Orin Nano of Orin NX hebt die JetPack 5.x ondersteunt, kun je deze handleiding blijven volgen. Als je echter een ouder apparaat hebt, zoals de Jetson Nano, ga dan naar JetPack 4.x uitvoeren.

Opzetten Ultralytics

Er zijn twee manieren om Ultralytics pakket in te stellen op NVIDIA Jetson om je volgende Computer Vision project te bouwen. Je kunt ze allebei gebruiken.

Beginnen met Docker

De snelste manier om aan de slag te gaan met Ultralytics YOLOv8 op NVIDIA Jetson is door te draaien met een vooraf gebouwd docker image voor Jetson.

Voer het onderstaande commando uit om de Docker-container op te halen en op Jetson te draaien. Dit is gebaseerd op l4t-pytorch docker image dat PyTorch en Torchvision bevat in een Python3-omgeving.

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

After this is done, skip to Use TensorRT on NVIDIA Jetson section.

Starten zonder Docker

Installeer Ultralytics pakket

Here we will install Ultralytics package on the Jetson with optional dependencies so that we can export the PyTorch models to other different formats. We will mainly focus on NVIDIA TensorRT exports because TensorRT will make sure we can get the maximum performance out of the Jetson devices.

  1. Pakketlijst bijwerken, pip installeren en upgraden naar de nieuwste

    sudo apt update
    sudo apt install python3-pip -y
    pip install -U pip
    
  2. Installeer ultralytics pip-pakket met optionele afhankelijkheden

    pip install ultralytics[export]
    
  3. Herstart het apparaat

    sudo reboot
    
Installeer PyTorch en Torchvision

De bovenstaande ultralytics installatie zal Torch en Torchvision installeren. Deze 2 pakketten geïnstalleerd via pip zijn echter niet compatibel om te draaien op het Jetson platform dat is gebaseerd op de ARM64 architectuur. Daarom moeten we handmatig PyTorch pip wheel installeren en Torchvision vanaf de broncode compileren en installeren.

  1. Verwijder de momenteel geïnstalleerde PyTorch en Torchvision

    pip uninstall torch torchvision
    
  2. Installeer PyTorch 2.1.0 volgens 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. Installeer Torchvision v0.16.2 volgens 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
    

Bezoek de paginaPyTorch voor Jetson om toegang te krijgen tot alle verschillende versies van PyTorch voor verschillende JetPack-versies. Ga voor een gedetailleerdere lijst van PyTorch, Torchvision compatibiliteit naar de PyTorch en Torchvision compatibiliteitspagina.

Installeer onnxruntime-gpu

De onnxruntime-gpu pakket gehost in PyPI heeft niet aarch64 binaries voor de Jetson. We moeten dit pakket dus handmatig installeren. Dit pakket is nodig voor sommige exports.

Allemaal verschillend onnxruntime-gpu pakketten die overeenkomen met verschillende JetPack- en Python -versies worden weergegeven hier. Hier gaan we echter het volgende downloaden en installeren onnxruntime-gpu 1.17.0 met Python3.8 ondersteuning voor het JetPack dat we voor deze handleiding gebruiken.

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

Opmerking

onnxruntime-gpu zal automatisch de numpy versie terugzetten naar de laatste versie. We moeten numpy dus opnieuw installeren naar 1.23.5 om een probleem op te lossen door uit te voeren:

pip install numpy==1.23.5

Draaien op JetPack 4.x

Hier ondersteunen we om te rennen Ultralytics op legacy-hardware zoals de Jetson Nano. Momenteel gebruiken we Docker om dit te bereiken.

Execute the below command to pull the Docker container and run on Jetson. This is based on l4t-cuda docker image which contains CUDA in a L4T environment.

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

Gebruik TensorRT op NVIDIA Jetson

Out of all the model export formats supported by Ultralytics, TensorRT delivers the best inference performance when working with NVIDIA Jetson devices and our recommendation is to use TensorRT with Jetson. We also have a detailed document on TensorRT here.

Model omzetten naar TensorRT en conclusies trekken

Het YOLOv8n model in het formaat PyTorch wordt geconverteerd naar TensorRT om inferentie uit te voeren met het geëxporteerde model.

Voorbeeld

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'

Opmerking

Ga naar de pagina Exporteren voor extra argumenten bij het exporteren van modellen naar verschillende modelformaten

NVIDIA Jetson Orin YOLOv8 Benchmarks

YOLOv8 benchmarks werden uitgevoerd door de Ultralytics team op 10 verschillende modelformaten die snelheid en nauwkeurigheid meten: PyTorch, TorchScript, ONNX, OpenVINO, TensorRT, TF SavedModel, TF GraphDef, TF Lite PaddlePaddle, NCNN. Benchmarks werden uitgevoerd op Seeed Studio reComputer J4012 aangedreven door Jetson Orin NX 16GB-apparaat met FP32-precisie met een standaardinvoerbeeldgrootte van 640.

Vergelijkingstabel

Even though all model exports are working with NVIDIA Jetson, we have only included PyTorch, TorchScript, TensorRT for the comparison chart below because, they make use of the GPU on the Jetson and are guaranteed to produce the best results. All the other exports only utilize the CPU and the performance is not as good as the above three. You can find benchmarks for all exports in the section after this chart.

NVIDIA Jetson Ecosystem

Gedetailleerde vergelijkingstabel

De onderstaande tabel geeft de benchmarkresultaten weer voor vijf verschillende modellen (YOLOv8n, YOLOv8s, YOLOv8m, YOLOv8l, YOLOv8x) in tien verschillende formaten (PyTorch, TorchScript, ONNX, OpenVINO, TensorRT, TF SavedModel, TF GraphDef, TF Lite PaddlePaddle, NCNN), die ons de status, grootte, mAP50-95(B)-metriek en inferentietijd voor elke combinatie geeft.

Prestaties

Formaat Status Grootte op schijf (MB) mAP50-95(B) Inferentietijd (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
Formaat Status Grootte op schijf (MB) mAP50-95(B) Inferentietijd (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
Formaat Status Grootte op schijf (MB) mAP50-95(B) Inferentietijd (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
Formaat Status Grootte op schijf (MB) mAP50-95(B) Inferentietijd (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
Formaat Status Grootte op schijf (MB) mAP50-95(B) Inferentietijd (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

Explore more benchmarking efforts by Seeed Studio running on different versions of NVIDIA Jetson hardware.

Onze resultaten reproduceren

Voer deze code uit om de bovenstaande Ultralytics benchmarks op alle exportformaten te reproduceren:

Voorbeeld

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

Merk op dat de benchmarkresultaten kunnen variëren op basis van de exacte hardware- en softwareconfiguratie van een systeem en de huidige werkbelasting van het systeem op het moment dat de benchmarks worden uitgevoerd. Gebruik voor de meest betrouwbare resultaten een dataset met een groot aantal afbeeldingen, d.w.z. data='coco8.yaml' (4 val images), ordata='coco.yaml'` (5000 valafbeeldingen).

Beste praktijken bij het gebruik van NVIDIA Jetson

Bij het gebruik van NVIDIA Jetson zijn er een paar best practices die je moet volgen om maximale prestaties mogelijk te maken op de NVIDIA Jetson waarop YOLOv8 draait.

  1. MAX-modus inschakelen

    Het inschakelen van de MAX Power Mode op de Jetson zorgt ervoor dat alle CPU, GPU kernen zijn ingeschakeld.

    sudo nvpmodel -m 0
    
  2. Jetson klokken inschakelen

    Door Jetson Clocks in te schakelen worden alle CPU, GPU kernen op hun maximale frequentie geklokt.

    sudo jetson_clocks
    
  3. Installeer de Jetson Stats-toepassing

    We kunnen de applicatie jetson stats gebruiken om de temperaturen van de systeemonderdelen te controleren en andere systeemdetails te bekijken, zoals CPU, GPU, RAM-gebruik, energiemodi wijzigen, instellen op maximale klokken, JetPack-informatie controleren.

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

Jetson statistieken

Volgende stappen

Congratulations on successfully setting up YOLOv8 on your NVIDIA Jetson! For further learning and support, visit more guide at Ultralytics YOLOv8 Docs!

FAQ

Hoe zet ik Ultralytics YOLOv8 in op NVIDIA Jetson-apparaten?

Deploying Ultralytics YOLOv8 on NVIDIA Jetson devices is a straightforward process. First, flash your Jetson device with the NVIDIA JetPack SDK. Then, either use a pre-built Docker image for quick setup or manually install the required packages. Detailed steps for each approach can be found in sections Start with Docker and Start without Docker.

Welke prestatiebenchmarks kan ik verwachten van YOLOv8 modellen op NVIDIA Jetson apparaten?

YOLOv8 models have been benchmarked on various NVIDIA Jetson devices showing significant performance improvements. For example, the TensorRT format delivers the best inference performance. The table in the Detailed Comparison Table section provides a comprehensive view of performance metrics like mAP50-95 and inference time across different model formats.

Waarom zou ik TensorRT gebruiken voor de implementatie van YOLOv8 op NVIDIA Jetson?

TensorRT is highly recommended for deploying YOLOv8 models on NVIDIA Jetson due to its optimal performance. It accelerates inference by leveraging the Jetson's GPU capabilities, ensuring maximum efficiency and speed. Learn more about how to convert to TensorRT and run inference in the Use TensorRT on NVIDIA Jetson section.

Hoe kan ik PyTorch en Torchvision installeren op NVIDIA Jetson?

To install PyTorch and Torchvision on NVIDIA Jetson, first uninstall any existing versions that may have been installed via pip. Then, manually install the compatible PyTorch and Torchvision versions for the Jetson's ARM64 architecture. Detailed instructions for this process are provided in the Install PyTorch and Torchvision section.

Wat zijn de beste werkwijzen voor het maximaliseren van de prestaties op NVIDIA Jetson bij gebruik van YOLOv8?

Volg deze best practices om de prestaties op NVIDIA Jetson met YOLOv8 te maximaliseren:

  1. Schakel de MAX Power Mode in om alle CPU en GPU kernen te gebruiken.
  2. Schakel Jetson Clocks in om alle kernen op hun maximale frequentie te laten draaien.
  3. Installeer de applicatie Jetson Stats om de systeemgegevens te controleren.

For commands and additional details, refer to the Best Practices when using NVIDIA Jetson section.



Aangemaakt 2024-04-02, Bijgewerkt 2024-07-05
Auteurs: glenn-jocher (9), RizwanMunawar (1), lakshanthad (3), Ahelsamahy (1), Burhan-Q (2)

Reacties