2. Jetson硬件与软件栈选型

在真正开始写 DeepStream 管线之前,选型是决定项目能否顺利落地、以及后续能跑多少路视频的关键一步。Jetson 平台、JetPack 版本、CUDA/cuDNN/TensorRT 组件版本、DeepStream SDK 版本这四者之间是层层约束的关系:硬件决定算力上限,JetPack 决定可用的组件版本区间,而 DeepStream 又对 JetPack 有明确的版本要求。任何一环选错,都会在编译或运行阶段以“找不到库”“版本不兼容”的形式暴露出来。

一、Orin / Xavier / Nano 三代平台的定位差异

Jetson 家族目前主流的三代平台在算力、内存带宽和编解码能力上差距很大,直接决定了多路视频分析的路数上限。下面这张图把三代平台的关键规格与典型适用场景放在一起对比,便于快速定位。

Jetson 三代平台关键规格与选型定位 Orin 系列(AGX / NX) GPU 算力 AGX Orin 最高 275 TOPS Orin NX 约 100 TOPS 内存 32/64 GB LPDDR5,带宽约 204 GB/s 编解码 NVDEC 多路 4K 解码 NVENC 支持 H.264/H.265 典型路数(1080p 检测) 约 16~32 路(视模型而定) 适用场景 多路高密度视频分析、 大模型推理、边缘服务器 推荐:新项目首选 Xavier 系列(AGX / NX) GPU 算力 AGX Xavier 32 TOPS Xavier NX 21 TOPS 内存 16/32 GB LPDDR4x,带宽约 137 GB/s 编解码 NVDEC 多路 4K 解码 NVENC 支持 H.264/H.265 典型路数(1080p 检测) 约 8~16 路(视模型而定) 适用场景 中等规模视频分析、 存量项目维护、成本敏感场景 推荐:预算有限或已有设备 Nano 系列(含 Orin Nano) GPU 算力 Orin Nano 最高 40 TOPS 原 Nano 仅 0.5 TFLOPS 内存 4/8 GB LPDDR5(Orin Nano) 编解码 解码能力有限,编码较弱 原 Nano 不支持 NVENC 典型路数(1080p 检测) 约 2~6 路(Orin Nano) 适用场景 单路/少路推理、教学验证、 轻量边缘设备 推荐:入门学习或极轻量场景

从工程角度看,如果目标是 8 路以上 1080p 的实时检测,Orin AGX 或 Orin NX 是更稳妥的选择;Xavier 适合中等规模或已有设备复用;Nano 系列(尤其是原 Nano)更适合单路验证或教学演示,不建议直接用于多路生产环境。需要注意的是,Orin Nano 虽然名字带 Nano,但算力已接近 Xavier NX,选型时不要被命名误导。

二、JetPack 版本与组件对应关系

JetPack 是 NVIDIA 为 Jetson 提供的 SDK 套件,它把 L4T(Linux for Tegra)、CUDA、cuDNN、TensorRT、多媒体 API 等打包在一起。每个 JetPack 版本对应一组固定的组件版本,不能随意混搭。例如 JetPack 5.x 对应 L4T 35.x、CUDA 11.4、TensorRT 8.5;JetPack 6.x 对应 L4T 36.x、CUDA 12.x、TensorRT 8.6/10.x。刷机时选择哪个 JetPack,就决定了后续能装哪个版本的 DeepStream。

可以用下面的命令在设备上确认当前组件版本,这是排查兼容性问题的第一步:

# 查看 L4T / JetPack 版本
cat /etc/nv_tegra_release

# 查看 CUDA 版本
nvcc --version

# 查看 TensorRT 版本
dpkg -l | grep nvinfer

# 查看 DeepStream 版本
deepstream-app --version-all

典型输出中,/etc/nv_tegra_release 会显示类似 # R35 (release), REVISION: 4.1 的信息,对应 JetPack 5.1.2;nvcc --version 显示 CUDA 11.4;nvinfer 包版本显示 8.5.x。三者必须与 DeepStream 的要求一致。

三、DeepStream SDK 版本匹配规则

DeepStream 对 JetPack 有硬性要求,不能跨大版本安装。下表列出常见组合,实际以 NVIDIA 官方文档为准:

DeepStream 版本 要求 JetPack L4T TensorRT CUDA
6.1.15.1.135.3.18.5.211.4
6.25.1.235.4.18.5.211.4
6.35.1.235.4.18.5.211.4
7.06.036.38.6.212.2
7.16.136.410.312.6

如果设备上已经装了 JetPack 5.1.2,就只能选 DeepStream 6.2 或 6.3,强行装 7.x 会在 apt install 阶段报依赖冲突,或者运行时报 libnvinfer.so.10: cannot open shared object file。反过来,如果项目必须用 DeepStream 7.x 的新特性(如新的 tracker 或 Python binding 改进),就必须先把设备刷到 JetPack 6.x。

四、刷机部署流程与关键判断

刷机是选型落地的最后一步。以 Orin 系列为例,标准流程是:在 Ubuntu 主机上安装 NVIDIA SDK Manager,用 USB-C 线连接 Jetson 的 recovery 口,进入 recovery 模式后由 SDK Manager 自动完成 L4T 烧写和 JetPack 组件安装。关键判断点有三个:

  1. 确认进入 recovery 模式:lsusb 能看到 0955:7023(Orin)或对应 PID,否则 SDK Manager 无法识别设备。
  2. 选择正确的 JetPack 版本:在 SDK Manager 的 STEP 2 中勾选目标版本,不要默认全选,避免装入不需要的组件占用 eMMC。
  3. 刷机后验证:重启进入系统后,依次执行 cat /etc/nv_tegra_release、nvcc --version、dpkg -l | grep nvinfer,确认三者与预期一致,再安装 DeepStream。
如果设备是 eMMC 版本且容量较小(如 16 GB),刷机时建议只勾选 Jetson OS 和必要的 CUDA/TensorRT,DeepStream 可在系统启动后用 apt 单独安装,避免刷机阶段空间不足导致失败。
不要在同一台设备上混装多个 JetPack 大版本。L4T 是底层系统,跨版本混装会导致内核模块与用户态库不匹配,表现为摄像头无法打开、nvidia-smi 无输出或 DeepStream 启动即崩溃。若必须切换版本,应重新刷机而不是覆盖安装。

完成刷机和 DeepStream 安装后,可以用 deepstream-app -c /opt/nvidia/deepstream/deepstream/samples/configs/deepstream-app/source4_1080p_dec_infer-resnet_tracker_sgie_tiled_display_int8.txt 跑一个官方示例,确认四路 1080p 解码、推理、跟踪、显示整条链路正常。如果这个示例能稳定运行,说明硬件、JetPack、CUDA/cuDNN/TensorRT、DeepStream 四层已经匹配到位,后续再替换成自己的模型和视频源即可。

选型的本质是“先定路数和模型,再倒推平台和版本”。建议在项目启动阶段就明确目标路数、单路分辨率、模型类型(检测/分类/分割)和精度要求(FP32/FP16/INT8),然后按“平台 → JetPack → DeepStream”的顺序锁定版本组合,最后再执行刷机。这样能避免在开发中途因为版本不匹配而返工。