Salta para o conteúdo

Guia de iniciação rápida: NVIDIA Jetson com Ultralytics YOLOv8

Este guia abrangente fornece um passo a passo detalhado para implementar Ultralytics YOLOv8 em dispositivos NVIDIA Jetson. Além disso, apresenta benchmarks de desempenho para demonstrar os recursos do YOLOv8 nesses dispositivos pequenos e poderosos.



Observa: Como configurar o NVIDIA Jetson com Ultralytics YOLOv8

NVIDIA Ecossistema Jetson

Nota

Este guia foi testado com o Seeed Studio reComputer J4012, que se baseia no NVIDIA Jetson Orin NX 16GB executando a última versão estável do JetPack do JP5.1.3 e o Seeed Studio reComputer J1020 v2, que se baseia no NVIDIA Jetson Nano 4GB executando a versão do JetPack do JP4.6.1. Espera-se que funcione em toda a linha de hardware NVIDIA Jetson, incluindo o mais recente e o legado.

O que é NVIDIA Jetson?

NVIDIA A Jetson é uma série de placas de computação incorporadas concebidas para levar a computação acelerada de IA (inteligência artificial) aos dispositivos periféricos. Estes dispositivos compactos e potentes são construídos com base na arquitetura NVIDIA's GPU e são capazes de executar algoritmos de IA complexos e modelos de aprendizagem profunda diretamente no dispositivo, sem necessidade de depender de recursos de computação em nuvem. As placas Jetson são frequentemente utilizadas em robótica, veículos autónomos, automação industrial e outras aplicações em que a inferência de IA tem de ser realizada localmente com baixa latência e elevada eficiência. Além disso, estas placas baseiam-se na arquitetura ARM64 e consomem menos energia do que os dispositivos de computação GPU tradicionais.

NVIDIA Comparação da série Jetson

O Jetson Orin é a mais recente iteração da família NVIDIA Jetson baseada na arquitetura NVIDIA Ampere, que melhora drasticamente o desempenho da IA em comparação com as gerações anteriores. A tabela abaixo compara alguns dos dispositivos Jetson no ecossistema.

Jetson AGX Orin 64GB Jetson Orin NX 16GB Jetson Orin Nano 8GB Jetson AGX Xavier Jetson Xavier NX Jetson Nano
Desempenho da IA 275 TOPS 100 TOPS 40 TOPs 32 TOPS 21 TOPS 472 GFLOPS
GPU 2048 núcleos NVIDIA Arquitetura Ampere GPU com 64 Tensor núcleos 1024 núcleos NVIDIA Arquitetura Ampere GPU com 32 Tensor núcleos 1024 núcleos NVIDIA Arquitetura Ampere GPU com 32 Tensor núcleos 512 núcleos NVIDIA Arquitetura Volta GPU com 64 Tensor núcleos 384 núcleos NVIDIA Arquitetura Volta™ GPU com 48 Tensor núcleos Arquitetura NVIDIA Maxwell™ com 128 núcleos GPU
GPU Frequência máxima 1,3 GHz 918 MHz 625 MHz 1377 MHz 1100 MHz 921MHz
CPU 12 núcleos NVIDIA Arm® Cortex A78AE v8.2 64-bit CPU 3MB L2 + 6MB L3 8 núcleos NVIDIA Arm® Cortex A78AE v8.2 64-bit CPU 2MB L2 + 4MB L3 Arm® Cortex®-A78AE v8.2 de 6 núcleos e 64 bits CPU 1,5 MB L2 + 4 MB L3 8 núcleos NVIDIA Carmel Arm®v8.2 64-bit CPU 8MB L2 + 4MB L3 6 núcleos NVIDIA Carmel Arm®v8.2 64-bit CPU 6MB L2 + 4MB L3 Processador Quad-Core Arm® Cortex®-A57 MPCore
CPU Frequência máxima 2,2 GHz 2,0 GHz 1,5 GHz 2,2 GHz 1,9 GHz 1.43GHz
Memória 64GB LPDDR5 de 256 bits 204,8GB/s 16GB LPDDR5 de 128 bits 102,4GB/s 8GB LPDDR5 de 128 bits 68 GB/s 32GB LPDDR4x de 256 bits 136,5GB/s 8GB LPDDR4x de 128 bits 59,7GB/s 4GB LPDDR4 de 64 bits 25,6GB/s"

Para uma tabela de comparação mais detalhada, visita a secção Especificações técnicas da página oficial NVIDIA Jetson.

O que é o NVIDIA JetPack?

NVIDIA O JetPack SDK que alimenta os módulos Jetson é a solução mais abrangente e fornece um ambiente de desenvolvimento completo para a criação de aplicações de IA aceleradas de ponta a ponta e reduz o tempo de colocação no mercado. O JetPack inclui o Jetson Linux com bootloader, kernel Linux, ambiente de trabalho Ubuntu e um conjunto completo de bibliotecas para aceleração de GPU computação, multimédia, gráficos e visão computacional. Inclui também amostras, documentação e ferramentas de desenvolvimento para o computador anfitrião e o kit de desenvolvimento, e suporta SDKs de nível superior, como o DeepStream para análise de vídeo em fluxo contínuo, Isaac para robótica e Riva para IA de conversação.

Flash JetPack para NVIDIA Jetson

O primeiro passo depois de pores as mãos num dispositivo NVIDIA Jetson é flashear o NVIDIA JetPack para o dispositivo. Há várias formas diferentes de flashear os dispositivos NVIDIA Jetson.

  1. Se tiveres um kit de desenvolvimento oficial NVIDIA , como o Jetson Orin Nano Developer Kit, podes transferir uma imagem e preparar um cartão SD com o JetPack para arrancar o dispositivo.
  2. Se tiveres qualquer outro NVIDIA Development Kit, podes fazer flash do JetPack para o dispositivo utilizando o SDK Manager.
  3. Se tiveres um dispositivo Seeed Studio reComputer J4012, podes fazer flash do JetPack para o SSD incluído e se tiveres um dispositivo Seeed Studio reComputer J1020 v2, podes fazer flash do JetPack para o eMMC/SSD.
  4. Se tiveres qualquer outro dispositivo de terceiros alimentado pelo módulo NVIDIA Jetson, recomenda-se que sigas a linha de comandos para flashes.

Nota

Para os métodos 3 e 4 acima, depois de flashear o sistema e arrancar o dispositivo, introduz "sudo apt update && sudo apt install nvidia-jetpack -y" no terminal do dispositivo para instalar todos os restantes componentes JetPack necessários.

Execute no JetPack 5.x

Se tiveres um Jetson Xavier NX, AGX Xavier, AGX Orin, Orin Nano ou Orin NX que suporte o JetPack 5.x, podes continuar a seguir este guia. No entanto, se tiveres um dispositivo antigo, como o Jetson Nano, salta para Executar no JetPack 4.x.

Prepara-te Ultralytics

Há duas formas de configurar o pacote Ultralytics em NVIDIA Jetson para construíres o teu próximo projeto de Visão por Computador. Podes usar qualquer uma delas.

Começa com o Docker

A maneira mais rápida de começar a usar o Ultralytics YOLOv8 no NVIDIA Jetson é executar uma imagem docker pré-construída para o Jetson.

Executa o comando abaixo para puxar o contentor Docker e correr no Jetson. Isto é baseado na imagem docker l4t-pytorch que contém PyTorch e Torchvision num ambiente Python3.

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

Depois de fazeres isto, passa à secção Utilizar TensorRT em NVIDIA Jetson.

Começa sem o Docker

Instala o pacote Ultralytics

Aqui vamos instalar o pacote Ultralytics no Jetson com dependências opcionais para que possamos exportar os modelos PyTorch para outros formatos diferentes. Iremos focar-nos principalmente nas exportaçõesNVIDIA TensorRT porque TensorRT irá garantir que podemos obter o máximo desempenho dos dispositivos Jetson.

  1. Actualiza a lista de pacotes, instala o pip e actualiza para a versão mais recente

    sudo apt update
    sudo apt install python3-pip -y
    pip install -U pip
    
  2. Instala ultralytics pacote pip com dependências opcionais

    pip install ultralytics[export]
    
  3. Reinicia o dispositivo

    sudo reboot
    
Instala PyTorch e Torchvision

A instalação do ultralytics acima instala o Torch e o Torchvision. No entanto, esses dois pacotes instalados via pip não são compatíveis para rodar na plataforma Jetson, que é baseada na arquitetura ARM64. Portanto, precisamos instalar manualmente o PyTorch pip wheel pré-construído e compilar/instalar o Torchvision a partir da fonte.

  1. Desinstala o PyTorch e o Torchvision atualmente instalados

    pip uninstall torch torchvision
    
  2. Instala PyTorch 2.1.0 de acordo com 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. Instala o Torchvision v0.16.2 de acordo com 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
    

Visita a páginaPyTorch for Jetson para acederes a todas as diferentes versões de PyTorch para diferentes versões do JetPack. Para obter uma lista mais detalhada sobre a compatibilidade do PyTorch e do Torchvision, visita a página de compatibilidade doPyTorch e do Torchvision.

Instala onnxruntime-gpu

O onnxruntime-gpu hospedado no PyPI não tem o pacote aarch64 para o Jetson. Por isso, tens de instalar manualmente este pacote. Este pacote é necessário para algumas das exportações.

Todos diferentes onnxruntime-gpu os pacotes correspondentes às diferentes versões do JetPack e do Python estão listados aqui. No entanto, aqui vamos descarregar e instalar onnxruntime-gpu 1.17.0 com Python3.8 suporta o JetPack que estamos a utilizar para este guia.

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

Nota

onnxruntime-gpu reverterá automaticamente a versão do numpy para a mais recente. Por isso, precisamos de reinstalar o numpy para 1.23.5 para resolver um problema, executando:

pip install numpy==1.23.5

Execute no JetPack 4.x

Aqui apoiamos para correr Ultralytics em hardware legado, como o Jetson Nano. Atualmente usamos Docker para conseguir isso.

Executa o comando abaixo para extrair o contentor Docker e executá-lo no Jetson. Isto é baseado na imagem docker l4t-cuda que contém CUDA num ambiente L4T.

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

Utiliza TensorRT em NVIDIA Jetson

De todos os formatos de exportação de modelos suportados por Ultralytics, TensorRT oferece o melhor desempenho de inferência ao trabalhar com dispositivos NVIDIA Jetson e nossa recomendação é usar TensorRT com Jetson. Também temos um documento detalhado sobre TensorRT aqui.

Converte o modelo para TensorRT e executa a inferência

O modelo YOLOv8n no formato PyTorch é convertido para TensorRT para executar a inferência com o modelo exportado.

Exemplo

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'

Nota

Visita a página Exportar para aceder a argumentos adicionais ao exportar modelos para diferentes formatos de modelo

NVIDIA Jetson Orin YOLOv8 Referências

YOLOv8 os benchmarks foram executados pelo Ultralytics equipe em 10 formatos de modelos diferentes medindo velocidade e precisão: PyTorch , TorchScript , ONNX , OpenVINO , TensorRT , TF SavedModel , TF GraphDef , TF Leve, PaddlePaddle , NCNN . Os benchmarks foram executados no Seeed Studio reComputer J4012 equipado com dispositivo Jetson Orin NX de 16 GB com precisão FP32 com tamanho de imagem de entrada padrão de 640.

Gráfico de comparação

Apesar de todas as exportações de modelos estarem a funcionar com NVIDIA Jetson, incluímos apenas PyTorch, TorchScript, TensorRT no gráfico de comparação abaixo porque utilizam GPU no Jetson e garantem os melhores resultados. Todas as outras exportações utilizam apenas o CPU e o desempenho não é tão bom como as três anteriores. Podes encontrar referências para todas as exportações na secção a seguir a este gráfico.

NVIDIA Ecossistema Jetson

Tabela de comparação detalhada

A tabela abaixo representa os resultados de benchmark para cinco modelos diferentes ( YOLOv8n , YOLOv8s , YOLOv8m , YOLOv8l , YOLOv8x ) em dez formatos diferentes ( PyTorch , TorchScript , ONNX , OpenVINO , TensorRT , TF SavedModel , TF GraphDef , TF Leve, PaddlePaddle , NCNN ), fornecendo o status, tamanho, métrica mAP50-95(B) e tempo de inferência para cada combinação.

Desempenho

Formato Estado Tamanho no disco (MB) mAP50-95(B) Tempo de inferência (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 Leve 12.3 0.6092 349.18
PaddlePaddle 24.4 0.6030 555
NCNN 12.2 0.6092 32
Formato Estado Tamanho no disco (MB) mAP50-95(B) Tempo de inferência (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 Leve 42.8 0.7136 1046.64
PaddlePaddle 85.5 0.7140 1464
NCNN 42.7 0.7200 63
Formato Estado Tamanho no disco (MB) mAP50-95(B) Tempo de inferência (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 Leve 99 0.7280 2758.08
PaddlePaddle 197.9 0.7280 3678
NCNN 98.9 0.7260 135
Formato Estado Tamanho no disco (MB) mAP50-95(B) Tempo de inferência (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 Leve 166.9 0.7551 5652.37
PaddlePaddle 333.6 0.7551 7114.67
NCNN 166.8 0.7685 231.9
Formato Estado Tamanho no disco (MB) mAP50-95(B) Tempo de inferência (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 Leve 260.4 0.7479 8772.86
PaddlePaddle 520.8 0.7479 10619.53
NCNN 260.4 0.7646 376.38

Explora mais esforços de avaliação comparativa do Seeed Studio executados em diferentes versões do hardware NVIDIA Jetson.

Reproduzir os nossos resultados

Para reproduzir as referências Ultralytics acima em todos os formatos de exportação, executa este código:

Exemplo

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

Nota que os resultados dos testes de referência podem variar com base na configuração exacta de hardware e software de um sistema, bem como na carga de trabalho atual do sistema no momento em que os testes de referência são executados. Para obter os resultados mais fiáveis, utiliza um conjunto de dados com um grande número de imagens, ou seja data='coco8.yaml' (4 val images), ordata='coco.yaml'` (5000 imagens val).

Melhores práticas ao utilizar NVIDIA Jetson

Quando utilizas o NVIDIA Jetson, há algumas práticas recomendadas a seguir para obteres o máximo desempenho no NVIDIA Jetson com o YOLOv8.

  1. Ativar o modo de potência máxima

    Se activares o Modo de Energia Máxima no Jetson, certificar-te-ás de que todos os núcleos CPU, GPU estão ligados.

    sudo nvpmodel -m 0
    
  2. Ativar os relógios Jetson

    Se activares o Jetson Clocks, certificar-te-ás de que todos os núcleos CPU, GPU têm a frequência máxima.

    sudo jetson_clocks
    
  3. Instala a aplicação Jetson Stats

    Podemos utilizar a aplicação jetson stats para monitorizar as temperaturas dos componentes do sistema e verificar outros detalhes do sistema, tais como ver CPU, GPU, utilização da RAM, alterar os modos de energia, definir os relógios máximos, verificar a informação do JetPack

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

Estatísticas Jetson

Próximos passos

Parabéns por teres configurado com êxito o YOLOv8 no teu NVIDIA Jetson! Para mais informações e apoio, consulta o guia em Ultralytics YOLOv8 Docs!

FAQ

Como posso implementar Ultralytics YOLOv8 em dispositivos NVIDIA Jetson?

Implantar o Ultralytics YOLOv8 em dispositivos NVIDIA Jetson é um processo simples. Em primeiro lugar, faz o flash do teu dispositivo Jetson com o NVIDIA JetPack SDK. Em seguida, usa uma imagem Docker pré-construída para uma configuração rápida ou instala manualmente os pacotes necessários. Os passos detalhados para cada abordagem podem ser encontrados nas secções Iniciar com o Docker e Iniciar sem o Docker.

Que benchmarks de desempenho posso esperar dos modelos YOLOv8 em dispositivos NVIDIA Jetson?

YOLOv8 foram comparados em vários dispositivos NVIDIA Jetson, mostrando melhorias significativas no desempenho. Por exemplo, o formato TensorRT oferece o melhor desempenho de inferência. A tabela na secção Tabela de comparação detalhada fornece uma visão abrangente das métricas de desempenho como o mAP50-95 e o tempo de inferência em diferentes formatos de modelo.

Por que razão devo utilizar TensorRT para implementar YOLOv8 em NVIDIA Jetson?

TensorRT é altamente recomendado para a implementação de modelos YOLOv8 no NVIDIA Jetson devido ao seu desempenho ideal. Acelera a inferência aproveitando os recursos GPU do Jetson, garantindo máxima eficiência e velocidade. Saiba mais sobre como converter para TensorRT e executar a inferência na seção Usar TensorRT no NVIDIA Jetson.

Como posso instalar o PyTorch e o Torchvision no NVIDIA Jetson?

Para instalar o PyTorch e o Torchvision no NVIDIA Jetson, primeiro desinstala quaisquer versões existentes que possam ter sido instaladas via pip. Em seguida, instala manualmente as versões compatíveis do PyTorch e do Torchvision para a arquitetura ARM64 do Jetson. Instruções detalhadas para este processo são fornecidas na secção Instalar o PyTorch e o Torchvision.

Quais são as melhores práticas para maximizar o desempenho em NVIDIA Jetson quando utilizas YOLOv8?

Para maximizar o desempenho em NVIDIA Jetson com YOLOv8, segue estas práticas recomendadas:

  1. Ativa o modo de energia MAX para utilizar todos os núcleos CPU e GPU .
  2. Ativa o Jetson Clocks para executar todos os núcleos na sua frequência máxima.
  3. Instala a aplicação Jetson Stats para monitorizar as métricas do sistema.

Para comandos e detalhes adicionais, consulta a secção Práticas recomendadas ao utilizar o NVIDIA Jetson.



Criado em 2024-04-02, Atualizado em 2024-07-05
Autores: glenn-jocher (9), RizwanMunawar (1), lakshanthad (3), Ahelsamahy (1), Burhan-Q (2)

Comentários