RK3588 NPU 软件堆栈如何组合在一起
Rockchip 的 RKNN 软件堆栈将模型准备与设备上的执行分开。 RKNN-Toolkit2提供转换和评估工具。 RKNN-Toolkit-Lite2 在支持的目标平台上提供 Python 接口,而 RKNN Runtime 则提供 C/C++ 接口。内核驱动程序将运行时连接到 NPU。检查这些组件与为您的模块提供的板支持包的兼容性。
有用的部署记录可识别主板和 SoM 版本、Linux 映像、驱动程序、运行时、转换工具版本、原始型号和转换后的型号。将构建脚本和预处理设置保存在模型工件旁边。文件名例如 detector.rknn 仅凭这一点无法解释为什么一种部署的行为与另一种部署不同。
步骤1:转换前建立参考
在代表性验证集上运行原始模型。保存原始输出和重要的应用指标:分类准确性、检测质量或其他特定于任务的衡量标准。对于检测器,保留标签排序、置信阈值和后处理设置。这成为转换后模型的比较点。
写下整个输入合同。包括尺寸、批量大小、RGB 或 BGR 排序、布局、数值范围、标准化、调整大小和填充。如果应用程序以与训练不同的方式对图像进行信箱处理或两次减去偏移量,则正确的模型可能会产生较差的结果。同样仔细地记录网络外部的后处理。
使用Rockchip的 RKNN 模型动物园 当它包含匹配模型和目标时作为起点。它的转换和推理示例比假设任何导出的网络将不变地工作更有用。选择一个已知的存储库修订版并按照该特定示例的说明进行操作。
步骤2:转换模型并检查运算符支持
- 匹配目标。 选择 RK3588 目标和与预期电路板映像兼容的工具链。
- 检查图表。 确认导出模型中实际操作的形状、预处理、输出和支持。
- 构建参考转换。 使用该图形和软件版本支持的精度选项。
- 阅读完整的构建日志。 在添加相机采集或用户界面之前解决故障并调查警告。
- 比较输出。 通过原始模型和转换后的模型运行相同的输入,并进行相同的后处理。
不受支持的操作可能需要不同的导出、图形重写或显式 CPU 处理阶段。不要假设运行时将透明地执行每个不支持的层。如果部分工作负载转移到 CPU,请在性能测量中包括传输和同步。
步骤 3:根据您的精度要求评估 INT8
量化改变了数字表示。当所选转换流程使用校准数据时,选择代表部署的输入:照明、对象大小、背景和操作条件。保留一个单独的验证集来评估结果。成功完成的转换仍需要准确性检查。
比较应用程序输出,而不仅仅是两个张量之间的差异。例如,小的数值变化可以使检测跨越置信度阈值。检查困难的情况、示例很少的类以及原始模型已经处于边缘状态的条件。如果精度低于可接受限度,请在更改硬件之前重新检查校准范围和预处理。
的 ONNX 运行时量化文档 是数值权衡和准确性调查的有用背景。 RKNN 转换选项和支持的精度仍必须在 Rockchip 自己的所选版本的文档中进行检查。
步骤4:测量超过推理时间
在预热后和持续运行期间再次测量部署的工作负载。记录温度、功率模式、并发进程和 机箱 或冷却布置。有用的结果是在产品运行的条件下可再现的性能范围,包括准确性和延迟。
| 测量 | 它回答什么 | 记录什么 |
|---|---|---|
| 模型执行持续时间 | 这个运行时调用需要多长时间? | 输入形状、精度、时序边界和运行时版本 |
| 端到端延迟 | 交付结果时观察是多久前的? | 捕获时间、预处理、排队、推理和输出时间 |
| 持续吞吐量 | 随着时间的推移交付了多少完成的结果? | 运行长度、已完成的请求以及丢弃或跳过的输入 |
| 应用精度 | 部署的模型是否满足任务要求? | 验证集、任务指标和决策阈值 |
| 热行为 | 系统预热后结果是否稳定? | 环境条件、冷却、温度和时钟(如果有) |
作为说明性预算,如果应用程序处理每一帧,则每 40 毫秒接收新帧的应用程序必须跟上每秒 25 帧的速度。 12 ms 推理测量会将其余预算用于仅在适当安排的设计中进行采集、准备和交付。它并不能证明 12 毫秒相机到结果的延迟。这些数字是一个规划示例,而不是测量的 ForgeEdge 性能。
对软件持续时间使用单调时钟。报告中值和尾部延迟,而不是单个最佳观察结果,并保留原始测量值。对于多个摄像机,考虑所有活动流的工作负载,包括解码、图像转换、内存移动和记录。在整个测试过程中队列不断增长表明平均容量低于传入工作负载。
常见部署症状
| 症状 | 第一次调查 |
|---|---|
| 正确的型号、不正确的标签或包装盒 | 颜色顺序、标准化、调整大小/填充、输出布局和后处理 |
| 转换后的模型无法初始化 | 目标选择、运行时/驱动程序兼容性和模型工件完整性 |
| 短期基准良好,持续表现较差 | 温度、功耗模式、内存压力和竞争工作 |
| 可接受的推理时间,明显延迟的结果 | 捕获缓冲、队列寿命、副本和输出调度 |
| INT8 输出丢失有用的检测 | 校准覆盖率、预处理等效性和任务级验证 |
将原型变成可重复的产品
将模型、运行时和应用程序配置打包为受控版本。定义启动检查、故障报告、恢复和回滚路径。保持一个小的参考输入测试,可以在连接相机之前识别不正确的部署。将软件检查与物理传感器测试分开,物理传感器测试还测试布线、驱动程序和曝光设置。
当电路板需要不同的连接器、电源调节或传感器接口时,请查看 SoM 与 SBC 的决定 和 载板设计流程。这些决策决定了成功的模型演示如何成为可维护的系统。
RK3588 NPU 部署问题
每个ONNX模型都可以在RK3588 NPU上运行吗?
兼容性取决于实际的图形、形状、操作和所选的工具链。通过对您打算发布的模型进行转换和设备上验证来建立支持。
广告中的加速器等级是否可以预测应用程序 FPS?
不会。网络、精度、内存行为、预处理和运行时间决定了应用程序的测量吞吐量。比较平台时使用目标工作负载及其完整数据路径。
我应该先优化神经网络吗?
先介绍一下。如果采集、图像转换或排队占主导地位,则减少模型执行时间可能对应用程序所经历的结果寿命影响不大。
对完整的计算机视觉任务进行基准测试
对于对象检测应用,测量相机捕获、调整大小和标准化、NPU 推理、输出解码和决策交付。报告模型版本、输入分辨率、精度、置信阈值和评估数据集以及计时结果。否则,两个明显相似的边缘人工智能基准测试可能会描述不同的任务。
在提交模型架构之前,通过选定的 RKNN 工具链测试导出的图和所需的运算符。检查量化后的准确性和持续执行期间的行为,而不仅仅是转换是否成功。对象检测、分割和分类具有不同的输出处理成本;验证为项目选择的实际工作负载。
