Skip to content

快速入门指南:NVIDIA Jetson与Ultralytics YOLOv8

本综合指南提供了在NVIDIA Jetson设备上部署Ultralytics YOLOv8的详细步骤。此外,它还展示了性能基准测试,以展示YOLOv8在这些小巧而强大的设备上的能力。



观看: 如何在NVIDIA Jetson上设置Ultralytics YOLOv8

NVIDIA Jetson生态系统

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设备。

  1. 如果您拥有官方的NVIDIA开发套件,如Jetson Orin Nano开发套件,您可以下载镜像并准备带有JetPack的SD卡以启动设备
  2. 如果您拥有任何其他NVIDIA开发套件,您可以使用SDK Manager将JetPack刷入设备
  3. 如果您拥有Seeed Studio reComputer J4012设备,您可以将JetPack刷入包含的SSD,如果您拥有Seeed Studio reComputer J1020 v2设备,您可以将JetPack刷入eMMC/SSD
  4. 如果您拥有任何其他由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.10onnxruntime-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 设备中获得最大性能。

  1. 更新软件包列表,安装 pip 并升级到最新版本

    sudo apt update
    sudo apt install python3-pip -y
    pip install -U pip
    
  2. 安装带有可选依赖项的 ultralytics pip 包

    pip install ultralytics[export]
    
  3. 重启设备

    sudo reboot
    

安装 PyTorch 和 Torchvision

上述 ultralytics 安装将安装 Torch 和 Torchvision。然而,通过 pip 安装的这两个包在基于 ARM64 架构的 Jetson 平台上不兼容。因此,我们需要手动安装预构建的 PyTorch pip 轮并从源代码编译/安装 Torchvision。

  1. 卸载当前安装的 PyTorch 和 Torchvision

    pip uninstall torch torchvision
    
  2. 根据 JP5.1.3 安装 PyTorch 2.1.0

    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. 根据 PyTorch v2.1.0 安装 Torchvision v0.16.2

    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
    

访问 Jetson 的 PyTorch 页面 以获取适用于不同 JetPack 版本的所有 PyTorch 版本。有关 PyTorch 和 Torchvision 兼容性的更详细列表,请访问 PyTorch 和 Torchvision 兼容性页面

安装 onnxruntime-gpu

托管在 PyPI 上的 onnxruntime-gpu 包没有适用于 Jetson 的 aarch64 二进制文件。因此,我们需要手动安装此包。某些导出需要此包。

所有不同 onnxruntime-gpu 包对应于不同 JetPack 和 Python 版本的列表可以在 这里 找到。然而,在这里我们将下载并安装支持 Python3.8onnxruntime-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 以运行导出模型的推理。

示例

from ultralytics import YOLO

# 加载一个 YOLOv8n PyTorch 模型
model = YOLO("yolov8n.pt")

# 导出模型
model.export(format="engine")  # 创建 'yolov8n.engine'

# 加载导出的 TensorRT 模型
trt_model = YOLO("yolov8n.engine")

# 运行推理
results = trt_model("https://ultralytics.com/images/bus.jpg")
# 将 YOLOv8n PyTorch 模型导出为 TensorRT 格式
yolo export model=yolov8n.pt format=engine  # 创建 'yolov8n.engine'

# 使用导出的模型运行推理
yolo predict model=yolov8n.engine source='https://ultralytics.com/images/bus.jpg'

注意

访问 导出页面 以获取在将模型导出为不同模型格式时的附加参数

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

详细对比表格

下表表示了五种不同模型(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基准测试,请运行以下代码:

示例

from ultralytics import YOLO

# 加载一个YOLOv8n PyTorch模型
model = YOLO("yolov8n.pt")

# 在COCO8数据集上对所有导出格式进行YOLOv8n的速度和准确性基准测试
results = model.benchmarks(data="coco8.yaml", imgsz=640)
# 在COCO8数据集上对所有导出格式进行YOLOv8n的速度和准确性基准测试
yolo benchmark model=yolov8n.pt data=coco8.yaml imgsz=640

请注意,基准测试结果可能会因系统的具体硬件和软件配置以及运行基准测试时的系统负载而有所不同。为了获得最可靠的结果,请使用包含大量图像的数据集,例如data='coco8.yaml'(4张验证图像)或data='coco.yaml'(5000张验证图像)。

使用NVIDIA Jetson时的最佳实践

在使用NVIDIA Jetson时,遵循以下最佳实践以确保在NVIDIA Jetson上运行YOLOv8时获得最大性能。

  1. 启用MAX电源模式

    在Jetson上启用MAX电源模式将确保所有CPU和GPU核心都已开启。

    sudo nvpmodel -m 0
    
  2. 启用Jetson时钟

    启用Jetson时钟将确保所有CPU和GPU核心都以最大频率运行。

    sudo jetson_clocks
    
  3. 安装Jetson Stats应用程序

    我们可以使用Jetson Stats应用程序来监控系统组件的温度,并查看其他系统详细信息,如查看CPU、GPU、RAM利用率,更改电源模式,设置最大时钟,检查JetPack信息。

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

Jetson Stats

下一步

恭喜您成功在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 最大化性能,请遵循以下最佳实践:

  1. 启用 MAX 电源模式以利用所有 CPU 和 GPU 核心。
  2. 启用 Jetson Clocks 以使所有核心运行在其最大频率。
  3. 安装 Jetson Stats 应用程序以监控系统指标。

有关命令和更多详细信息,请参阅 使用 NVIDIA Jetson 时的最佳实践 部分。


📅 Created 6 months ago ✏️ Updated 20 days ago

Comments