Guia de início rápido: NVIDIA Jetson com Ultralytics YOLOv8
Este guia abrangente fornece um passo a passo detalhado para implantar o Ultralytics YOLOv8 em dispositivos NVIDIA Jetson. Além disso, apresenta benchmarks de desempenho para demonstrar os recursos do YOLOv8 nesses dispositivos pequenos e poderosos.
Nota
Este guia foi testado com o Seeed Studio reComputer J4012 que é baseado no NVIDIA Jetson Orin NX 16GB executando a última versão estável do JetPack JP5.1.3. Não é garantido que este guia funcione em dispositivos Jetson mais antigos, como o Jetson Nano (que suporta apenas até JP4.6.4). No entanto, espera-se que funcione em todos os dispositivos Jetson Orin, Xavier NX, AGX Xavier com JP5.1.3.
O que é o NVIDIA Jetson?
NVIDIA Jetson é uma série de placas de computação incorporadas concebidas para levar a computação acelerada de IA (inteligência artificial) aos dispositivos de ponta. Estes dispositivos compactos e potentes são construídos em torno da arquitetura GPU da NVIDIA e são capazes de executar algoritmos complexos de IA 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 executada 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.
Comparação da série NVIDIA Jetson
O Jetson Orin é a mais recente iteração da família NVIDIA Jetson baseada na arquitetura NVIDIA Ampere, que traz um desempenho de IA drasticamente melhorado 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 | GPU de arquitetura NVIDIA Ampere de 2048 núcleos com 64 Tensor núcleos | GPU de arquitetura NVIDIA Ampere de 1024 núcleos com 32 Tensor núcleos | GPU de arquitetura NVIDIA Ampere de 1024 núcleos com 32 Tensor núcleos | GPU de arquitetura NVIDIA Volta de 512 núcleos com 64 Tensor núcleos | GPU de 384 núcleos de arquitetura NVIDIA Volta™ com 48 Tensor Cores | GPU de 128 núcleos com arquitetura NVIDIA Maxwell |
Frequência máxima da GPU | 1,3 GHz | 918 MHz | 625 MHz | 1377 MHz | 1100 MHz | 921MHz |
CPU | CPU NVIDIA Arm® Cortex A78AE v8.2 de 64 bits com 12 núcleos 3 MB L2 + 6 MB L3 | CPU NVIDIA Arm® Cortex A78AE v8.2 de 64 bits com 8 núcleos 2 MB L2 + 4 MB L3 | CPU Arm® Cortex®-A78AE v8.2 de 64 bits com 6 núcleos 1,5 MB L2 + 4 MB L3 | CPU NVIDIA Carmel Arm®v8.2 de 8 núcleos e 64 bits 8 MB L2 + 4 MB L3 | CPU NVIDIA Carmel Arm®v8.2 de 6 núcleos e 64 bits 6 MB L2 + 4 MB L3 | Processador Quad-Core Arm® Cortex®-A57 MPCore |
Frequência máxima da CPU | 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 da NVIDIA Jetson.
O que é o NVIDIA JetPack?
O SDK NVIDIA JetPack 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 da computação GPU, 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 streaming de vídeo, 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 é fazer o flash do NVIDIA JetPack para o dispositivo. Existem várias maneiras diferentes de flashear dispositivos NVIDIA Jetson.
- Se tiveres um kit de desenvolvimento oficial da NVIDIA, como o Jetson Orin Nano Developer Kit, podes visitar esta ligação para transferir uma imagem e preparar um cartão SD com o JetPack para arrancar o dispositivo.
- Se tiveres qualquer outro Kit de Desenvolvimento NVIDIA, podes visitar este link para flashear o JetPack para o dispositivo usando o SDK Manager.
- Se tiveres um dispositivo Seeed Studio reComputer J4012, podes visitar esta ligação para flashear o JetPack para o SSD incluído.
- Se tiveres qualquer outro dispositivo de terceiros equipado com o módulo NVIDIA Jetson, recomenda-se que sigas a linha de comando para flashes, visitando esta ligação.
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.
Prepara-te Ultralytics
Existem duas formas de configurar o pacote Ultralytics no NVIDIA Jetson para construir o teu próximo projeto de Visão Computacional. 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 && sudo docker pull $t && sudo docker run -it --ipc=host --runtime=nvidia $t
Depois de fazer isso, passa para a secção Usar TensorRT no NVIDIA Jetson.
Começa sem o Docker
Instala o pacote Ultralytics
Aqui vamos instalar o pacote ultralyics no Jetson com dependências opcionais para que possamos exportar os modelos PyTorch para outros formatos diferentes. Concentrar-nos-emos principalmente nas exportações para NVIDIA TensorRT porque o TensoRT garante que podemos obter o máximo desempenho dos dispositivos Jetson.
-
Actualiza a lista de pacotes, instala o pip e actualiza para a versão mais recente
-
Instala
ultralytics
pacote pip com dependências opcionais -
Reinicia o dispositivo
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.
-
Desinstala o PyTorch e o Torchvision atualmente instalados
-
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
-
Instala o Torchvision v0.16.2 de acordo com PyTorch v2.1.0
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 que correspondem a 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
Usa TensorRT no NVIDIA Jetson
De todos os formatos de exportação de modelos suportados pelo Ultralytics, o TensorRT oferece o melhor desempenho de inferência ao trabalhar com dispositivos NVIDIA Jetson e nossa recomendação é usar o TensorRT com o 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')
Nota
Visita a página Exportar para aceder a argumentos adicionais ao exportar modelos para diferentes formatos de modelo
NVIDIA Jetson Orin YOLOv8 Benchmarks
YOLOv8 Os testes de referência foram executados pela equipa Ultralytics em 10 formatos de modelos diferentes, medindo a velocidade e a precisão: PyTorch, TorchScript, ONNX, OpenVINO, TensorRT, TF SavedModel , TF Graphdef , TF Lite, PaddlePaddle, NCNN. Os testes de referência foram executados no Seeed Studio reComputer J4012 alimentado pelo dispositivo Jetson Orin NX 16GB com precisão FP32 e tamanho de imagem de entrada predefinido de 640.
Gráfico de comparação
Apesar de todas as exportações de modelos estarem a funcionar com NVIDIA Jetson, apenas incluímos PyTorch, TorchScript, TensorRT para o gráfico de comparação abaixo porque utilizam o 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 acima. Podes encontrar benchmarks para todas as exportações na secção a seguir a este gráfico.
Tabela de comparação detalhada
A tabela abaixo representa os resultados do teste de referência para cinco modelos diferentes (YOLOv8n, YOLOv8s, YOLOv8m, YOLOv8l, YOLOv8x) em dez formatos diferentes (PyTorch, TorchScript, ONNX, OpenVINO, TensorRT, TF SavedModel , TF Graphdef , TF Lite, PaddlePaddle, NCNN), dando-nos o estado, o tamanho, a métrica mAP50-95(B) e o 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 |
Visita esta ligação para explorares 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
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), or
data='coco.yaml'` (5000 imagens val).
Práticas recomendadas ao usar o NVIDIA Jetson
Quando utilizas o NVIDIA Jetson, existem algumas práticas recomendadas a seguir para permitir o máximo desempenho no NVIDIA Jetson com YOLOv8.
-
Ativar o modo de potência máxima
Se activares o Modo de Energia MÁX no Jetson, certificar-te-ás de que todos os núcleos do CPU e da GPU estão ligados.
-
Ativar os relógios Jetson
Se activares o Jetson Clocks, certificar-te-ás de que todos os núcleos do CPU e do GPU têm a frequência máxima.
-
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, como ver a utilização do CPU, GPU e RAM, alterar os modos de energia, definir os relógios máximos, verificar as informações do JetPack
Próximos passos
Parabéns por teres configurado com sucesso o YOLOv8 no teu NVIDIA Jetson! Para mais informações e suporte, visita mais guias em Ultralytics YOLOv8 Docs!
Criado em 2024-04-02, Atualizado em 2024-05-08
Autores: Burhan-Q (2), lakshanthad (2), glenn-jocher (2)