📺 B站视频讲解(Bilibili):https://www.bilibili.com/video/BV1k1C9BYEAB/
📘 《Yocto项目实战教程》京东购买链接:Yocto项目实战教程
Jetson 边缘 AI 应用核心技术点:CUDA 与 TensorRT 实战解析
(本文严格聚焦应用层的 AI 技术点,不展开硬件、系统引导、驱动等外围内容;重点描述 CUDA、TensorRT、推理优化、Pipeline 架构等工程侧核心知识。内容客观、清晰、结构合理。)
一、边缘 AI 的核心任务:如何把模型“跑好”
在 Jetson 上做 AI,本质并不是“模型能跑起来”,而是:
能否在有限功耗与内存条件下,把实际业务模型推理得更快、更稳、更低延迟,并且可落地。
换句话说,Jetson 的应用层 AI 核心任务是:
- 高效执行深度学习推理(TensorRT)
- 最大化利用 GPU(CUDA)
- 管理推理前后处理(Pre/Post)
- 在多路输入、多模型下保持系统稳定
因此,本文的全部内容围绕:
- AI 推理执行流程
- CUDA 的应用层使用方式(而不是写 kernel)
- TensorRT 的工程化能力
- 推理性能优化方法
- 多模型、多路视频的 pipeline 实践

二、应用层视角:Jetson 的 AI 推理执行链路
AI 应用在 Jetson 上的执行流程可以总结为:
模型加载 → Preprocessing → TensorRT 推理 → Postprocessing → 输出/显示/推流
这是所有应用共同的结构,差别只在于:
- 模型种类(检测、分类、分割、OCR、ReID…)
- 输入源(文件、GPU buffer、摄像头)
- 输出方式(socket、显示、编码推流、控制信号)
2.1 Preprocessing:推理前处理
典型任务包括:
- resize
- 色彩空间转换(BGR/RGB/NV12)
- 归一化(均值方差)
- layout 转换(HWC ⇆ CHW)
Jetson 上这些步骤是否高效,直接决定 GPU 的利用率与整体 FPS。
高效前处理方法:
- 使用 CUDA 流(cudaStream)并行执行
- 使用 VPI / NPP 做 GPU Resize、Color Convert
- 使用 zero-copy buffer 避免 CPU memcpy
2.2 推理(TensorRT Runtime)
TensorRT 负责把优化后的 engine 执行在 GPU 或 DLA 上,整个流程为:
- 加载序列化引擎
- 创建 execution context
- 准备 inference bindings(输入/输出 buffer)
- 执行 enqueueV2(异步推理)
- 拿到输出张量
TensorRT 的执行性能取决于:
- engine 构建参数(FP16/INT8/batch)
- 是否启用多流(multi-stream)
- GPU 内存访问模式
- 前后处理是否阻塞
2.3 Postprocessing
包括:
- 检测框 decode
- NMS
- 阈值过滤
- 分割 mask 拼接
高效化方式:
- 尽量放在 GPU 执行(可使用 CUDA kernel 或 NPP)
- 避免 CPU 大量参与浮点计算
- 减少 Python 层循环逻辑
三、CUDA 在应用层的核心角色
Jetson 上的大多数开发者不会写大量 CUDA kernel,但必须理解 CUDA 在应用层扮演的三个关键作用:
3.1 GPU 并行预处理
即便模型足够快,但如果预处理在 CPU 上执行,就会出现:
- GPU 闲置
- CPU 占用过高
- pipeline 卡顿
推荐使用:
- CUDA + NPP(图像处理基础操作)
- VPI(Jetson 提供的通用图像处理库)
3.2 异步执行(CUDA Stream)
TensorRT 推理、GPU 前处理和后处理要尽量并行:
-
使用多个 CUDA Stream 让:
- Resize
- TensorRT 推理
- NMS
互不阻塞。
3.3 Zero-copy 与 GPU buffer 管理
应用层需要避免所有不必要的 CPU–GPU–CPU 往返拷贝。
关键技术:
- DMABUF
- CUDA external memory
- EGLImage → CUDA 互操作
只要做到这一点,系统性能能提升 20%–40%。
四、TensorRT:Jetson AI 的真正核心
TensorRT 是 Jetson AI 相关应用层中最重要的组件。本节只讨论实际工程中需要掌握的能力,不展开理论推导。
4.1 Engine 构建的核心参数
构建 TensorRT 引擎时,最重要的参数只有三类:
4.1.1 精度(Precision)
- FP32:最稳定但慢
- FP16:首选,速度快、精度损失极低
- INT8:最快,但需校准(calibration)
工程准则:
优先 FP16 → 再考虑 INT8 → 尽量避免 FP32。
4.1.2 batch size
- 多路视频 → 使用 batch 提升吞吐
- 单路低延迟 → batch=1
4.1.3 Workspace size
表示 TensorRT 能够使用的 GPU 临时内存大小,越大优化空间越多。
4.2 推理侧的关键优化点
以下是所有 TensorRT 工程都必须掌握的五个核心点:
4.2.1 减少 Host–Device 往返
GPU 推理快,但 CPU 和 GPU 之间的 tensor copy 很慢。
必须保证:
- 输入 tensor 在 GPU buffer 中
- 输出 tensor 也尽量不经过 CPU
4.2.2 使用异步推理(enqueueV2)
避免同步阻塞,使用独立 CUDA Stream 提升吞吐。
4.2.3 尽量 fuse 模型结构
- ONNX 导出时避免 reshape/slice 等频繁存在的算子
- 避免动态 shape(TensorRT 会降低优化能力)
4.2.4 使用 profiling 分析瓶颈
TensorRT Profiler 可用于:
- 查看每个 layer 耗时
- 判断模型是否被拆成过多算子
4.2.5 充分利用 DLA
在 Orin/Xavier 上,可以将轻量 CNN 放到 DLA:
- 降低 GPU 占用
- 降低功耗
五、多模型 / 多路视频的 AI Pipeline 设计
应用层的 pipeline 是影响整体系统性能最关键的部分。
5.1 单模型单路:最简结构
Capture → Preprocess → TensorRT → Postprocess → Output
5.2 多路(multi-stream)模式
关键瓶颈通常不是推理,而是:
- 颜色转换
- resize
- 帧同步
- 编解码器吞吐
解决方法:
- 合并多路输入(batch)
- 为每路分配独立 CUDA Stream
- 尽量减少 v4l2 + CPU 格式转换
5.3 多模型 pipeline
推理链路可能包含多个模型:
- 检测 → 分类
- 检测 → 跟踪 → 行为识别
- OCR → NLP
优化策略:
- 不同模型复用 GPU buffer
- 多模型异步执行(不同 CUDA Stream)
- 根据延迟需求决定是否共享前处理
六、Jetson 应用层 AI 的性能优化指南
以下优化方法是实际工程中最有效的方向,按效果排序。
6.1 第一优先级:减少 CPU 干预
- 颜色转换放 GPU
- NMS 放 GPU
- resize 放 GPU
CPU 不参与,则推理链路会自然变快。
6.2 第二优先级:FP16/INT8 引擎
FP16 往往可以带来 1.3×–2× 提升,基本无精度损失。
6.3 第三优先级:批处理 batch
多路视频情况下:
- batch=4 或 batch=8 提升巨大
6.4 第四优先级:CUDA Stream 并行
每路视频独立 Stream,提升吞吐与实时性。
6.5 第五优先级:减少内存拷贝
原则:一次进入 GPU,直到输出都不要回来。
七、典型应用层工程案例(浓缩版)
7.1 YOLO 检测系统
- ONNX → TensorRT(FP16)
- VPI 做颜色转换
- GPU NMS
- 多线程 pipeline
- 输出推流(NVENC)
7.2 多路视频分析
- nvvidconv → GPU buffer
- DeepStream 或自定义 batch
- 多模型推理(识别 + 分类)
- GPU OSD(overlay)
7.3 机器人视觉
- RGB-D 输入 GPU 预处理
- TensorRT 推理
- GPU Post(深度滤波、mask 处理)
- 控制循环实时性要求高 → pipeline 分离
八、总结:Jetson 应用层 AI 的核心能力
压缩后的五个关键点:
- TensorRT 是核心中的核心:所有性能优化都围绕它展开。
- CUDA 在应用层不是写 kernel,而是做并行前处理与 buffer 管理。
- Pipeline 设计决定系统最终性能。
- 减少 CPU 干预是最有效的优化。
- FP16/INT8 + multi-stream 是边缘推理的黄金组合。
📺 B站视频讲解(Bilibili):https://www.bilibili.com/video/BV1k1C9BYEAB/
📘 《Yocto项目实战教程》京东购买链接:Yocto项目实战教程
14

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



