快速入门指南:NVIDIA Jetson与Ultralytics YOLOv8
本综合指南提供了在NVIDIA Jetson设备上部署Ultralytics YOLOv8的详细步骤。此外,它还展示了性能基准测试,以展示YOLOv8在这些小巧而强大的设备上的能力。
观看: 如何在NVIDIA Jetson上设置Ultralytics YOLOv8
Note
本指南已在Seeed Studio reComputer J4012上进行了测试,该设备基于NVIDIA Jetson Orin NX 16GB,运行最新的稳定JetPack版本JP6.0,以及Seeed Studio reComputer J1020 v2,该设备基于NVIDIA Jetson Nano 4GB,运行JetPack版本JP4.6.1。预计它将在所有NVIDIA Jetson硬件系列中工作,包括最新和旧版。
什么是NVIDIA Jetson?
NVIDIA Jetson是一系列嵌入式计算板,旨在将加速的AI(人工智能)计算带到边缘设备。这些紧凑而强大的设备基于NVIDIA的GPU架构,能够在设备上直接运行复杂的AI算法和深度学习模型,无需依赖云计算资源。Jetson板通常用于机器人、自动驾驶车辆、工业自动化和其他需要本地执行AI推理的应用,具有低延迟和高效率。此外,这些板基于ARM64架构,与传统的GPU计算设备相比,功耗更低。
NVIDIA Jetson系列对比
Jetson Orin是NVIDIA Jetson家族的最新迭代,基于NVIDIA Ampere架构,与前几代相比,AI性能大幅提升。下表比较了生态系统中的几款Jetson设备。
Jetson AGX Orin 64GB | Jetson Orin NX 16GB | Jetson Orin Nano 8GB | Jetson AGX Xavier | Jetson Xavier NX | Jetson Nano | |
---|---|---|---|---|---|---|
AI性能 | 275 TOPS | 100 TOPS | 40 TOPs | 32 TOPS | 21 TOPS | 472 GFLOPS |
GPU | 2048核NVIDIA Ampere架构GPU,带64个Tensor核心 | 1024核NVIDIA Ampere架构GPU,带32个Tensor核心 | 1024核NVIDIA Ampere架构GPU,带32个Tensor核心 | 512核NVIDIA Volta架构GPU,带64个Tensor核心 | 384核NVIDIA Volta™架构GPU,带48个Tensor核心 | 128核NVIDIA Maxwell™架构GPU |
GPU 最大频率 | 1.3 GHz | 918 MHz | 625 MHz | 1377 MHz | 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/s | 16GB 128位 LPDDR5 102.4GB/s | 8GB 128位 LPDDR5 68 GB/s | 32GB 256位 LPDDR4x 136.5GB/s | 8GB 128位 LPDDR4x 59.7GB/s | 4GB 64位 LPDDR4 25.6GB/s" |
如需更详细的对比表格,请访问官方NVIDIA Jetson页面的技术规格部分。
什么是NVIDIA JetPack?
NVIDIA JetPack SDK 为Jetson模块提供最全面的解决方案,并提供完整的开发环境,用于构建端到端的加速AI应用,缩短上市时间。JetPack包括带有引导程序的Jetson Linux、Linux内核、Ubuntu桌面环境,以及用于GPU计算、多媒体、图形和计算机视觉加速的完整库集。它还包括示例、文档和适用于主机计算机和开发套件的开发工具,并支持更高级别的SDK,如用于流媒体视频分析的DeepStream、用于机器人的Isaac和用于对话式AI的Riva。
将JetPack刷入NVIDIA Jetson
在获得NVIDIA Jetson设备后,第一步是将NVIDIA JetPack刷入设备。有几种不同的方法可以刷入NVIDIA Jetson设备。
- 如果您拥有官方的NVIDIA开发套件,如Jetson Orin Nano开发套件,您可以下载镜像并准备带有JetPack的SD卡以启动设备。
- 如果您拥有任何其他NVIDIA开发套件,您可以使用SDK Manager将JetPack刷入设备。
- 如果您拥有Seeed Studio reComputer J4012设备,您可以将JetPack刷入包含的SSD,如果您拥有Seeed Studio reComputer J1020 v2设备,您可以将JetPack刷入eMMC/SSD。
- 如果您拥有任何其他由NVIDIA Jetson模块驱动的第三方设备,建议遵循命令行刷入。
注意
对于上述方法3和4,在刷入系统并启动设备后,请在设备终端输入“sudo apt update && sudo apt install nvidia-jetpack -y”以安装所有剩余的JetPack组件。
基于Jetson设备的JetPack支持
下表突出显示了不同NVIDIA Jetson设备支持的NVIDIA JetPack版本。
JetPack 4 | JetPack 5 | JetPack 6 | |
---|---|---|---|
Jetson Nano | ✅ | ❌ | ❌ |
Jetson TX2 | ✅ | ❌ | ❌ |
Jetson Xavier NX | ✅ | ✅ | ❌ |
Jetson AGX Xavier | ✅ | ✅ | ❌ |
Jetson AGX Orin | ❌ | ✅ | ✅ |
Jetson Orin NX | ❌ | ✅ | ✅ |
Jetson Orin Nano | ❌ | ✅ | ✅ |
使用Docker快速开始
在NVIDIA Jetson上使用Ultralytics YOLOv8最快的方式是使用为Jetson预构建的Docker镜像。请参考上表并根据您拥有的Jetson设备选择JetPack版本。
```bash t=ultralytics/ultralytics:latest-jetson-jetpack4
```bash sudo docker pull $t && sudo docker run -it --ipc=host --runtime=nvidia $t
=== "JetPack 5"
```bash
t=ultralytics/ultralytics:latest-jetson-jetpack5
sudo docker pull $t && sudo docker run -it --ipc=host --runtime=nvidia $t
```
=== "JetPack 6"
```bash
t=ultralytics/ultralytics:latest-jetson-jetpack6
sudo docker pull $t && sudo docker run -it --ipc=host --runtime=nvidia $t
```
完成上述操作后,跳转到[在 NVIDIA Jetson 上使用 TensorRT 部分](#use-tensorrt-on-nvidia-jetson)。
## 使用本地安装启动
对于不使用 Docker 的本地安装,请参考以下步骤。
### 在 JetPack 6.x 上运行
#### 安装 Ultralytics 包
这里我们将在 Jetson 上安装 Ultralytics 包以及可选依赖项,以便我们可以将 [PyTorch](https://www.ultralytics.com/glossary/pytorch) 模型导出为其他不同格式。我们将主要关注 [NVIDIA TensorRT 导出](../integrations/tensorrt.md),因为 TensorRT 将确保我们能够从 Jetson 设备中获得最大性能。
1. 更新软件包列表,安装 pip 并升级到最新版本
```bash
sudo apt update
sudo apt install python3-pip -y
pip install -U pip
```
2. 安装带有可选依赖项的 `ultralytics` pip 包
```bash
pip install ultralytics[export]
```
3. 重启设备
```bash
sudo reboot
```
#### 安装 PyTorch 和 Torchvision
上述 ultralytics 安装将安装 Torch 和 Torchvision。然而,通过 pip 安装的这两个包在基于 ARM64 架构的 Jetson 平台上不兼容。因此,我们需要手动安装预构建的 PyTorch pip 轮并从源代码编译/安装 Torchvision。
根据 JP6.0 安装 `torch 2.3.0` 和 `torchvision 0.18`
```bash
sudo apt-get install libopenmpi-dev libopenblas-base libomp-dev -y
pip install https://github.com/ultralytics/assets/releases/download/v0.0.0/torch-2.3.0-cp310-cp310-linux_aarch64.whl
pip install https://github.com/ultralytics/assets/releases/download/v0.0.0/torchvision-0.18.0a0+6043bc2-cp310-cp310-linux_aarch64.whl
访问 Jetson 的 PyTorch 页面 以获取适用于不同 JetPack 版本的所有不同版本的 PyTorch。有关 PyTorch 和 Torchvision 兼容性的更详细列表,请访问 PyTorch 和 Torchvision 兼容性页面。
安装 onnxruntime-gpu
托管在 PyPI 上的 onnxruntime-gpu 包没有适用于 Jetson 的 aarch64
二进制文件。因此,我们需要手动安装此包。此包对于某些导出是必需的。
所有不同 onnxruntime-gpu
包对应于不同 JetPack 和 Python 版本的列表可以在 这里 找到。然而,在这里我们将下载并安装支持 Python3.10
的 onnxruntime-gpu 1.18.0
。
wget https://nvidia.box.com/shared/static/48dtuob7meiw6ebgfsfqakc9vse62sg4.whl -O onnxruntime_gpu-1.18.0-cp310-cp310-linux_aarch64.whl
pip install onnxruntime_gpu-1.18.0-cp310-cp310-linux_aarch64.whl
注意
onnxruntime-gpu
会自动将 numpy 版本回退到最新版本。因此,我们需要重新安装 numpy 到 1.23.5
以修复问题,执行:
pip install numpy==1.23.5
在 JetPack 5.x 上运行
安装 Ultralytics 包
这里我们将在 Jetson 上安装 Ultralytics 包以及可选依赖项,以便我们可以将 PyTorch 模型导出为其他不同格式。我们将主要关注 NVIDIA TensorRT 导出,因为 TensorRT 将确保我们能够从 Jetson 设备中获得最大性能。
-
更新软件包列表,安装 pip 并升级到最新版本
-
安装带有可选依赖项的
ultralytics
pip 包 -
重启设备
安装 PyTorch 和 Torchvision
上述 ultralytics 安装将安装 Torch 和 Torchvision。然而,通过 pip 安装的这两个包在基于 ARM64 架构的 Jetson 平台上不兼容。因此,我们需要手动安装预构建的 PyTorch pip 轮并从源代码编译/安装 Torchvision。
-
卸载当前安装的 PyTorch 和 Torchvision
-
根据 JP5.1.3 安装 PyTorch 2.1.0
-
根据 PyTorch v2.1.0 安装 Torchvision v0.16.2
访问 Jetson 的 PyTorch 页面 以获取适用于不同 JetPack 版本的所有 PyTorch 版本。有关 PyTorch 和 Torchvision 兼容性的更详细列表,请访问 PyTorch 和 Torchvision 兼容性页面。
安装 onnxruntime-gpu
托管在 PyPI 上的 onnxruntime-gpu 包没有适用于 Jetson 的 aarch64
二进制文件。因此,我们需要手动安装此包。某些导出需要此包。
所有不同 onnxruntime-gpu
包对应于不同 JetPack 和 Python 版本的列表可以在 这里 找到。然而,在这里我们将下载并安装支持 Python3.8
的 onnxruntime-gpu 1.17.0
。
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 设备配合使用时提供了最佳的推理性能,我们推荐在 Jetson 上使用 TensorRT。我们还有关于 TensorRT 的详细文档 这里。
将模型转换为 TensorRT 并运行推理
将 PyTorch 格式的 YOLOv8n 模型转换为 TensorRT 以运行导出模型的推理。
示例
注意
访问 导出页面 以获取在将模型导出为不同模型格式时的附加参数
NVIDIA Jetson Orin YOLOv8 基准测试
Ultralytics 团队在 10 种不同的模型格式上运行了 YOLOv8 基准测试,测量了速度和 准确性:PyTorch、TorchScript、ONNX、OpenVINO、TensorRT、TF SavedModel、TF GraphDef、TF Lite、PaddlePaddle、NCNN。基准测试在 Seeed Studio reComputer J4012 上运行,该设备由 Jetson Orin NX 16GB 驱动,FP32 精度,默认输入图像大小为 640。
对比图表
尽管所有模型导出在 NVIDIA Jetson 上都能正常工作,但我们仅在下表中包含了 PyTorch、TorchScript、TensorRT,因为它们利用了 Jetson 上的 GPU,并且能够保证产生最佳结果。所有其他导出仅利用 CPU,性能不如上述三种。您可以在本图表之后的部分找到所有导出的基准测试。
![NVIDIA Jetson Ecosystem](https://github.com/ultralytics/docs/releases/download/0/nvidia-jetson-ecosystem-2.avif)
详细对比表格
下表表示了五种不同模型(YOLOv8n、YOLOv8s、YOLOv8m、YOLOv8l、YOLOv8x)在十种不同格式(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 |
| 格式 | 状态 | 磁盘大小 (MB) | mAP50-95(B) | 推理时间 (ms/im) |
|-----------------|--------|-------------------|-------------|------------------------|
| ONNX | ✅ | 12.2 | 0.6092 | 70.6 |
| OpenVINO | ✅ | 12.3 | 0.6092 | 104.2 |
| TensorRT (FP32) | ✅ | 16.1 | 0.6091 | 8.01 |
| TensorRT (FP16) | ✅ | 9.2 | 0.6093 | 4.55 |
| TensorRT (INT8) | ✅ | 5.9 | 0.2759 | 4.09 |
| 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 |
格式 | 状态 | 磁盘大小 (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 (FP32) | ✅ | 46.4 | 0.7136 | 14.01 |
TensorRT (FP16) | ✅ | 24.2 | 0.722 | 7.16 |
TensorRT (INT8) | ✅ | 13.7 | 0.4233 | 5.49 |
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 |
格式 | 状态 | 磁盘大小 (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 (FP32) | ✅ | 102.4 | 0.7285 | 31.51 |
TensorRT (FP16) | ✅ | 52.6 | 0.7324 | 14.88 |
TensorRT (INT8) | ✅ | 28.6 | 0.3283 | 10.89 |
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 |
格式 | 状态 | 磁盘大小 (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 (FP32) | ✅ | 170.5 | 0.7554 | 49.79 |
TensorRT (FP16) | ✅ | 86.1 | 0.7535 | 22.89 |
TensorRT (INT8) | ✅ | 46.4 | 0.4048 | 14.61 |
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 |
=== "YOLOv8x"
| 格式 | 状态 | 磁盘占用 (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 (FP32) | ✅ | 264.0 | 0.7469 | 80.01 |
| TensorRT (FP16) | ✅ | 133.3 | 0.7513 | 40.76 |
| TensorRT (INT8) | ✅ | 70.2 | 0.4277 | 22.08 |
| 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 |
探索更多由Seeed Studio进行的基准测试,运行在不同版本的NVIDIA Jetson硬件上。
复现我们的结果
要在所有导出格式上复现上述Ultralytics基准测试,请运行以下代码:
示例
请注意,基准测试结果可能会因系统的具体硬件和软件配置以及运行基准测试时的系统负载而有所不同。为了获得最可靠的结果,请使用包含大量图像的数据集,例如data='coco8.yaml'
(4张验证图像)或data='coco.yaml'
(5000张验证图像)。
使用NVIDIA Jetson时的最佳实践
在使用NVIDIA Jetson时,遵循以下最佳实践以确保在NVIDIA Jetson上运行YOLOv8时获得最大性能。
-
启用MAX电源模式
在Jetson上启用MAX电源模式将确保所有CPU和GPU核心都已开启。
-
启用Jetson时钟
启用Jetson时钟将确保所有CPU和GPU核心都以最大频率运行。
-
安装Jetson Stats应用程序
我们可以使用Jetson Stats应用程序来监控系统组件的温度,并查看其他系统详细信息,如查看CPU、GPU、RAM利用率,更改电源模式,设置最大时钟,检查JetPack信息。
下一步
恭喜您成功在NVIDIA Jetson上设置YOLOv8!欲了解更多学习和支持,请访问Ultralytics YOLOv8文档!
常见问题
如何在NVIDIA Jetson设备上部署Ultralytics YOLOv8?
在NVIDIA Jetson设备上部署Ultralytics YOLOv8是一个直接的过程。首先,使用NVIDIA JetPack SDK刷写您的Jetson设备。然后,可以使用预构建的Docker镜像进行快速设置,或手动安装所需的软件包。每种方法的详细步骤可以在使用Docker快速启动和使用本地安装启动部分找到。
在NVIDIA Jetson设备上使用YOLOv8模型可以期待什么样的性能基准?
YOLOv8模型已经在各种NVIDIA Jetson设备上进行了基准测试,显示出显著的性能提升。例如,TensorRT格式提供了最佳的推理性能。详细比较表部分中的表格提供了不同模型格式下的性能指标(如mAP50-95和推理时间)的全面视图。
为什么在NVIDIA Jetson上部署YOLOv8时应使用TensorRT?
TensorRT 因其最佳性能,强烈推荐用于在 NVIDIA Jetson 上部署 YOLOv8 模型。它利用 Jetson 的 GPU 能力加速推理,确保最大效率和速度。了解更多关于如何转换为 TensorRT 并在 在 NVIDIA Jetson 上使用 TensorRT 部分运行推理的信息。
如何在 NVIDIA Jetson 上安装 PyTorch 和 Torchvision?
要在 NVIDIA Jetson 上安装 PyTorch 和 Torchvision,首先卸载通过 pip 安装的任何现有版本。然后,为 Jetson 的 ARM64 架构手动安装兼容的 PyTorch 和 Torchvision 版本。此过程的详细说明在 安装 PyTorch 和 Torchvision 部分提供。
在使用 YOLOv8 时,如何在 NVIDIA Jetson 上最大化性能的最佳实践是什么?
要在 NVIDIA Jetson 上使用 YOLOv8 最大化性能,请遵循以下最佳实践:
- 启用 MAX 电源模式以利用所有 CPU 和 GPU 核心。
- 启用 Jetson Clocks 以使所有核心运行在其最大频率。
- 安装 Jetson Stats 应用程序以监控系统指标。
有关命令和更多详细信息,请参阅 使用 NVIDIA Jetson 时的最佳实践 部分。