1. 为什么要在 Jetson AGX Orin 上折腾 YOLOv8
Jetson AGX Orin 到手那天,我第一反应是"这玩意儿算力真不是盖的"——275 TOPS 的 INT8 算力,放在一台巴掌大的盒子里,功耗还能压在 60W 以内。但真正开始跑 YOLOv8 目标检测的时候,我才发现"算力强"和"跑得顺"完全是两码事。边缘 AI 部署这件事,硬件只是入场券,环境配置和推理优化才是真正吃时间的地方。
这篇文章记录的是我完整走一遍 Jetson AGX Orin 上部署 YOLOv8 目标检测的全过程,包括 JetPack 版本选择、CUDA 与 PyTorch 的版本对齐、TensorRT 引擎导出、推理脚本编写,以及中间踩过的各种坑。目标读者是手里已经有 Orin 或者准备入手、想拿它做目标检测落地的朋友。如果你之前只在 x86 服务器或者 GTX 1660 Ti 这类消费级显卡上跑过 YOLOv8,那 Orin 上的体验会和你想象的差别很大——ARM 架构、JetPack 的版本绑定、TensorRT 的算子兼容性,每一项都可能让你卡半天。
我这次的任务很明确:在 Orin 上跑通 YOLOv8 的实时目标检测,输入是 USB 摄像头和 RTSP 视频流,输出是带框的检测结果,帧率要稳定在 30 FPS 以上。听起来简单,但从零到跑通,我前后花了大概三天,其中两天都在和环境配置搏斗。下面把整个过程拆开讲,能帮你省掉至少一半的折腾时间。
2. 硬件与系统环境的前期准备
2.1 设备清单与基础配置确认
先把我用的硬件配置列清楚,方便你对照。Jetson AGX Orin 我选的是 64GB 版本,主要是考虑到后面可能还要跑多模态模型,显存留足余量。存储用的是 1TB NVMe SSD,原厂自带的 64GB eMMC 装完系统基本就满了,跑模型根本不够用。摄像头用的是罗技 C920,免驱,插上就能被 V4L2 识别。
| 硬件项 | 型号/规格 | 备注 |
|---|---|---|
| 计算模块 | Jetson AGX Orin 64GB | 275 TOPS INT8 |
| 存储 | 1TB NVMe SSD | 原厂 eMMC 仅够装系统 |
| 摄像头 | 罗技 C920 | UVC 免驱 |
| 电源 | 原厂 60W 适配器 | 别用第三方,供电不稳会降频 |
| 散热 | 原厂风扇 + 散热片 | 满载时核心温度能到 70 度 |
这里有个容易被忽略的点:Orin 的功耗模式直接影响推理性能。默认出厂是 15W 模式,算力被压得很低。你需要用 nvpmodel 切换到 MAXN 模式,才能释放全部算力。我一开始没注意,跑 YOLOv8n 只有 12 FPS,切到 MAXN 之后直接飙到 60 FPS 以上。
# 查看当前功耗模式
sudo nvpmodel -q
# 切换到 MAXN 模式(最大性能)
sudo nvpmodel -m 0
# 锁定最高频率
sudo jetson_clocks
注意:MAXN 模式下功耗和发热都会明显上升,如果做长时间推理,建议加个散热底座或者确认风扇转速正常。我实测连续跑两小时,核心温度稳定在 72 度左右,没有触发降频。
2.2 JetPack 版本选择与刷机
JetPack 版本是 Orin 上最容易踩坑的地方。截至我写这篇文章的时候,JetPack 6.x 已经比较成熟了,基于 Ubuntu 22.04,自带 CUDA 12.x 和 TensorRT 8.6。但如果你之前用的是 JetPack 5.x(Ubuntu 20.04 + CUDA 11.4),很多教程和预编译包都是基于那个版本的,直接混用会出问题。
我的建议是: 新项目直接上 JetPack 6.x ,别留恋 5.x。原因很简单,JetPack 6 的 TensorRT 8.6 对 YOLOv8 的算子支持更好,而且 Python 3.10 的环境下装 PyTorch 和 ultralytics 都更顺。JetPack 5 的 Python 3.8 虽然也能跑,但有些新版本的包会挑 Python 版本。
刷机用 NVIDIA SDK Manager 最省事,但需要一台 Ubuntu 主机。如果你只有 Windows,可以用虚拟机装 Ubuntu 22.04,然后通过 USB-C 连接 Orin 进入恢复模式刷机。刷机过程大概 40 分钟,中间会重启几次,别断电。
刷完之后第一件事是检查版本:
# 查看 L4T 版本
cat /etc/nv_tegra_release
# 查看 CUDA 版本
nvcc --version
# 查看 TensorRT 版本
dpkg -l | grep tensorrt
我刷的是 JetPack 6.0,对应 L4T 36.3,CUDA 12.2,TensorRT 8.6.2。这个组合是目前跑 YOLOv8 最稳的。
2.3 存储扩容与系统迁移
原厂 eMMC 只有 64GB,装完 JetPack 就剩不到 20GB,连 PyTorch 的 wheel 包都放不下。所以刷机的时候我就直接把系统装到了 NVMe SSD 上。如果你已经刷到 eMMC 了,也可以后期迁移,但过程比较麻烦,建议一开始就装到 SSD。
迁移的方法是用 jetson-initrd-flash 或者直接重新刷机时选择 SSD 作为目标盘。SDK Manager 里有个选项可以指定存储设备,选 NVMe 就行。装完之后 df -h 看一下,根分区应该是 1TB 的 SSD。
实操心得:SSD 的读写速度对模型加载影响很大。我从 eMMC 换到 NVMe 之后,YOLOv8m 的模型加载时间从 8 秒降到了 2 秒左右。如果你经常重启或者切换模型,这个提升很直观。
3. 软件环境配置的核心细节
3.1 CUDA 与 PyTorch 的版本对齐
这是整个配置过程中最容易翻车的一步。Jetson 是 ARM64 架构,PyTorch 不能用 pip 直接装官方版,必须用 NVIDIA 提供的预编译 wheel 包。而且 wheel 包的版本必须和 JetPack 的 CUDA 版本严格对应,差一个小版本都可能 import 失败。
JetPack 6.0 对应 CUDA 12.2,PyTorch 要用 NVIDIA 官方编译的 2.1 或 2.2 版本。下载地址在 NVIDIA 的论坛帖子里,文件名类似 torch-2.2.0a0+git...-cp310-cp310-linux_aarch64.whl 。
689




被折叠的 条评论
为什么被折叠?



