使用 PVA 引擎优化汽车开发中的 CV 管道

在汽车软件开发领域,越来越多的大规模AI模型被集成到自动驾驶汽车中。这些模型包括视觉AI模型到自动驾驶的端到端AI模型。现在对计算能力的需求急剧增加,导致系统负载增加,这可能会对系统稳定性和延迟产生负面影响。

为了应对这些挑战,可编程视觉加速器 (PVA)是 NVIDIA DRIVE SoC 上提供的低功耗高效硬件引擎,可用于提高能效和整体系统性能。通过使用 PVA,可以卸载通常由 GPU 或其他硬件引擎处理的任务,从而减轻它们的负载并使它们能够更有效地管理其他关键任务。

在本文中,我们简要介绍了 DRIVE 平台上的 PVA 硬件引擎和 SDK。我们展示了 PVA 引擎在计算机视觉 (CV) 管道中的典型用例,包括预处理、后处理和其他 CV 算法,突出了其有效性和效率。最后,作为示例,我们详细介绍了 NIO 如何在数据管道中使用 NVIDIA PVA 引擎和优化算法来卸载 GPU 或视频图像合成器 (VIC) 任务并提高自动驾驶汽车系统的整体性能。

PVA 硬件概述

PVA 引擎是一种先进的超长指令字 (VLIW)、单指令多数据 (SIMD) 数字信号处理器。它针对图像处理和计算机视觉算法加速任务进行了优化。

PVA 性能卓越,功耗极低。PVA 可作为异构计算管道的一部分,与 DRIVE 平台上的 CPU、GPU 和其他加速器异步并发使用。

图表显示了 PVA 的组件,包括故障控制、调试控制和主机控制。
图 1. PVA 硬件架构
NVIDIA Orin 上的 CV 集群中有一个 PVA 实例,它是一种高性能片上系统 (SoC),专为高级 AI 应用(尤其是自动驾驶汽车和机器人技术)而设计。

每个 PVA 中都有两个矢量处理子系统 (VPS)。每个 VPS 包括以下内容:

1 个矢量处理单元 (VPU) 核心
1 个解耦查找单元 (DLUT)
1 个向量存储器(VMEM)
1 个指令缓存 (I-cache)
VPU 核心是主处理单元。它是针对计算机视觉优化的矢量 SIMD VLIW DSP。它通过 I-cache 获取指令,并通过 VMEM 访问数据。

DLUT 是一种专用硬件组件,旨在提高并行查找操作的效率。它通过在独立于主处理器流水线的解耦流水线中执行这些查找,使用查找表的单个副本实现并行查找。通过这样做,DLUT 可以最大限度地减少内存使用量并提高吞吐量,同时避免数据相关的存储库冲突,最终提高整体系统性能。

VPU VMEM为VPU提供本地数据存储,高效实现各类图像处理、计算机视觉算法,支持DMA、R5等VPS外部主机的访问,方便与R5等系统级组件进行数据交换。

VPU I-cache 在收到请求时向 VPU 提供指令数据,从系统内存请求缺失的指令数据,并为 VPU 维护临时指令存储。

对于每个 VPU 任务,R5 配置 DMA,可选地将 VPU 程序预取到 VPU I-cache 中,并启动每个 VPU-DMA 对来处理任务。Orin PVA 还包括一个 L2 SRAM 内存,供两组 VPS 和 DMA 共享。

两个 DMA 设备用于在外部存储器、PVA L2 存储器、两个 VMEM(每个 VPS 中一个)、R5 TCM(紧密耦合存储器)、DMA 描述符存储器和 PVA 级配置寄存器之间移动数据。

在负载较轻的系统中,两个并行的 DMA 访问 DRAM 可以实现高达 15 GB/s 的读/写带宽。在负载较重的系统中,该带宽可以达到高达 10 GB/s。

至于计算能力,INT8 GMAC(每秒千兆乘法累加运算)为 2048,不包括 DLUT。FP32 GMAC 为每个 PVA 实例 32 个。

PVA SDK 简介

与 CUDA 工具包与 GPU 类似,NVIDIA PVA SDK 旨在设计利用 PVA 硬件功能的计算机视觉算法。PVA SDK 提供运行时 API、工具和教程,用于开发、部署和安全性认证 CV 和 DL/ML 算法。它提供了一个无缝的构建部署框架,支持将代码交叉编译为 Tegra PVA 上的二进制可执行文件。

PVA SDK 通过多种资源支持软件开发:

全面的入门指南
模拟真实 VPU 的 x86 原生模拟器,支持在 x86-64 平台上开发和调试 VPU 内核
全套代码生成工具,包括优化的 C/C++ 编译器、调试器和集成开发环境
分析实用程序,例如用于视觉性能分析的 NVIDIA Nsight Systems 和用于详细 VPU 代码性能指标的 API
循序渐进的教程逐个介绍 PVA 概念,从基本示例到 VPU、DMA 和与其他 Tegra 引擎互操作的高级优化
丰富的文档和参考手册提供了有关 VPU 内在函数的详细信息,使您能够编写优化的代码,同时抽象 DMA 编程的复杂性
PVA SDK 提供多种现成的算法,以支持自动驾驶和机器人技术中常见的计算机视觉用例。它使您能够在生产环境中默认使用这些算法(可以访问源代码),或者使用 PVA SDK 功能开发自定义算法。

NVIDIA 已根据常见的 CV 用例预先开发了许多基于 PVA SDK 的算法。您可以在生产中使用 PVA 算法并访问代码,或者仅使用不同的算法作为参考来开发您自己的有价值的算法。

典型的 PVA 用例

许多自动驾驶汽车的开发人员都面临着 SoC 上计算资源不足的挑战,导致 CPU、GPU、VIC 和 DLA 负载过高。为了解决此问题,正在考虑使用 PVA 硬件来卸载 SoC 上这些高负荷硬件引擎的处理任务。

以下是一些可以卸载的处理任务的示例:

图像处理:一些图像 处理和 CV 任务可以移植到 PVA 以卸载 GPU、CPU、VIC 甚至 DLA。
深度学习操作:在深度 GCash 电话号码 学习网络中,某些层或计算密集型操作(例如 ROI 对齐)可以卸载到 PVA。在特定情况下,小型深度学习网络可以完全移植到 PVA。
数学计算: PVA 作为矢量 SIMD VLIW DSP,可以有效地处理数学计算,例如矩阵计算、FFT 等。
下面详细提供两个用例供参考:

特殊数据

将 AI 管道中的预处理和后处理卸载到 PVA

将纯 CV 或计算密集型管道迁移至 PVA
将 AI 管道中的预处理和后处理卸载到 PVA

这是 CV 管道的典型用例。输入图像来自实时​​场景中的实时摄像头或离线场景中的解码器。管道由三个阶段组成:

预处理

人工智能推理
后期处理
PVA 硬件引擎可以在 CV 管道的 这是全球数字广告市场经历 所有阶段(从预处理到后处理)发挥至关重要的作用,确保高效有效地处理图像处理和计算机视觉任务。

预处理
预处理涉及基本 CV 任务,用于对齐或规范化模型的输入。这包括重新映射(去失真)、裁剪、调整大小和颜色转换(从 YUV 到 RGB)等操作。

在某些情况下,当图像来自 NVDEC(Tegra SoC 上的解码器硬件引擎)时,图像布局是块线性的。在这种情况下,预处理阶段需要更多步骤来将块线性图像转换为音高线性图像。

PVA 硬件引擎非常适合这些任务。然而,在内存受限的情况下,请考虑合并相邻的 PVA 操作以充分利用 PVA 的计算能力。

人工智能推理

AI推理基于先进的AI模型,执行业务需求所需的核心CV任务。此步骤可以在GPU或DLA(深度学习加速器)上执行,以获得更好的性能。

PVA 运行时 API 同时 cg 线索  支持 NvSciSync 和原生 CUDA 流,能够高效执行涉及 GPU 或 DLA 的异构管道,而不会产生与恢复到 CPU 进行调度相关的延迟。

根据使用情况,AI 模型可以是用于对象检测的 YOLO 或 R-CNN、用于分类的逻辑回归或k最近邻 (KNN),以及任何其他模型等等。

后期处理

后处理可完善检测结果。这可能涉及使用中值滤波器去除异常值、混合操作以融合不同的候选值,或应用非最大抑制 (NMS) 来选择最佳目标。PVA 硬件可以有效地处理这些任务。

将纯 CV 或计算密集型管道迁移至 PVA

工作流程图显示图像经过图像金字塔、特征检测器和特征跟踪器,并跟踪信息告知先前的步骤。输出是跟踪的特征点或稀疏光流。

发表评论

您的邮箱地址不会被公开。 必填项已用 * 标注