NVIDIA Jetson 软件: 将 NVIDIA 加速技术带到边缘

NVIDIA
2257 0 2022-04-04

本次讲座整理自:

今天讲座的目录:

自主机器和机器人技术的世界正在经历一场革命。这些自主机器和机器人不再孤立地工作,它们正在进入人类世界,随着这种转变,自主机器需要更智能、更快、更安全。这些机器需要在现实世界中在我们之间导航,检测人们避开障碍物,规划其移动路径,执行其他视频分析任务,并以人们理解的语言与人们交流。下一代AIOT和机器人变革将需要下一代软件堆栈。

Jetson 软件旨在为下一代 AI 提供动力,该软件堆栈不仅提供预训练模型、训练和性能优化工具包等,还通过Omniverse Replicator提供合成数据生成器。为了加快客户的上市时间,还提供应用程序框架来加速各种用例,如视频分析、对话式人工智能和机器人技术。所有这些都运行在一个全面而强大的 JetPack sdk 上,它为所有对象和模块提供动力,今天我们将介绍这些技术中的每一项,这些技术将作为 Jetson 软件的一部分为您带来。


Jetson 是一个软件定义的平台。所有 Jetson 生产模块和开发工具包都由相同的软件支持。底部是 Jetson 硬件,它是模块上的系统,包含 gpu 和其他加速器,如硬件编码器的解码器、视觉加速器,以便整个 AI 管道可以在 Jetson 上加速。为数字硬件提供动力的是 JetPack sdk。 Sdk 有两个部分,一个是我们称为 Json Linux 或 L4T 的板级支持包,其中包括要链接的引导加载程序\内核\设备驱动程序和一个基于 ubuntu 的参考文件系统。最重要的是此 SDK 的第二部分,即用户级库。这些可用的库包括加速深度学习的库,例如 CUDA、cuDNN、TensorRT 库;加速计算机视觉和图像处理的库,如 VPI 库。多媒体加速库,还有加速计算库如CUDA、cuFFT等。在 JetPack SDK 之上,我们支持更高级别的 sdk,例如 deepstream 以及用于机器人技术的 ISAAC。

为了缩短开发时间并缩短上市时间,NVIDIA 提供了各种高度精确且可用于生产的预训练模型。因此,您可以通过使用这些预训练模型缩短开发时间,或者使用训练调整和优化工作流程来使用您自己的自定义数据微调这些预训练模型。NVIDIA提供了针对与计算机视觉和会话 AI 相关的各种用例的预训练模型。


从头开始建立模型是一项具有挑战性的任务,它从收集大量质量数据开始,训练模型,然后优化模型。这个过程不仅资源密集,而且非常耗时。在现实世界中收集数据是困难的,而且通常情况下,为了提高模型的准确性,您需要大量的数据。Nvidia 提供了Omniverse Replicator ,可以生成用于训练深度神经网络的物理模拟合成数据,它提供了创建大量多样的物理准确数据的能力,它还能够生成人类难以甚至不可能标记的地面真实数据,例如速度、深度、被遮挡的物体和不利的天气条件。


使用 Nvidia TAO 工具包,您可以快速跟踪您的 AI 模型开发,您可以从我们托管在 NGC 上的预训练模型和模型架构库中进行选择。这些预训练模型是针对各种视觉和会话的高度准确和生产就绪的模型,那里提供了人工智能,可以选择您的模型或模型架构,并使用真实或合成数据训练您的模型。您可以优化模型,然后您可以使用训练模型并使用 Nvidia 应用程序框架部署在任何 Nvidia 平台上。使用 Omniverse Replicator 生成合成数据,从而显着减少创建生产就绪、高度准确的模型的时间。


现在,一旦我们有了要部署的模型,让我们看看 Nvidia Triton 推理服务器,这是在 NVIDIA AI 平台上部署模型的最佳方式。NVIDIA的专家决定要解决客户在部署其模块时将面临的主要挑战。

首先,客户的模型可以来自不同的框架,如今数据科学家和开发人员有很多 AI 框架可供选择,如 tensorflow、Pytorch 和 TensorRT 等,因此在平台上运行这些来自不同框架的模型面临挑战。

其次,今天的应用程序跨越边界,从云到边缘,需要相同的影响服务解决方案,可能是边缘数据中心或云,拥有一个解决方案将降低复杂性和使用不同解决方案的成本。

下一个挑战是如何在平台中以最佳方式运行这些模型。不同的用例需要不同类型的推理,有些可能需要实时,而有些则需要安全。

最后,一旦模型投入生产,责任并不止于此,如何在生产中和大规模管理和更新模型也是相当具有挑战性的。


Triton 推理服务器通过提供服务解决方案来解决这些挑战,通过该服务解决方案,您可以在运行模型的同时,保持对模型的管理。与应用程序逻辑不同。Triton 推理服务器有许多建模技术,例如运行同一订单的多个实例以增加吞吐量或在运行时动态创建批次,或更改模型以便一个模型的输出作为另一个模型的输入。开发人员可以利用这些调度技术来提出在 Nvidia 平台上运行模型的最佳方式。最重要的是,支持所有流行的框架,TensorRT、tensorflow、Pytorch 等。



Jetson 也支持Triton,我们每月发布新功能,最重要的是它都是开源的。可以根据用例添加自己的扩展和逻辑。

Deepstream 是一个用于加速流分析用例的 sdk。 Deepstream 基于 GStreamer 并遵循流式架构。流式管道架构的元素称为插件。 Deepstream 提供硬件应用插件,不仅可以加速整个管道,还可以让您为其添加 AI 功能。 Deepstream sdk 利用 Jetson 上可用的多个硬件块来加速解码预处理跟踪、可视化,当然还有 AI 推理。 Deepstream 插件还针对数据传输进行了优化。作为 cuda 硬件缓冲的杠杆,插件之间的内存复制为零。 Deepstream SDK 不仅适用于 jetson,而且适用于在线视频平台。这很容易从 Jetson 部署到云端。 Deepstream 让开发人员可以放心地专注于带来新的用例和差异化,因为他们已经为视频或音频流应用程序的每一步都进行了全面优化和加速。


Isaac 是机器人和人工智能的加速平台。机器人开发可能是复杂的、耗时的、极具挑战性和昂贵的。再说一次,这就像机器人平台提供了一个端到端的解决方案,以帮助降低成本,简化开发并加快上市时间。ROS是最流行的机器人设计系统。有一个庞大的开发者社区使用 ROS 开发机器人应用程序。我说过 GEMS for ROS 是硬件加速包,它使 ROS 开发人员更容易在他们的 NVIDIA 平台上构建高性能解决方案。这些GEMS 可以与 ROS 工具和软件包无缝集成。这些GEMS 利用 Nvidia 硬件加速库为您的应用程序实现最高性能。它还针对各个平台进行了优化,并将 NGC 的预训练模型引入 ROS 社区。

ISAAC Sim 作为可扩展的机器人模拟应用程序和合成数据生成工具,可为照片逼真、物理准确提供支持。用于开发测试和管理 AI 基础报告的虚拟环境。感知是下一代机器人的关键,因为它们需要检测确定姿势并跟踪环境中的不同物体和人类。 ISAAC Sim 提供了一个端到端的工作池,用户可以在其中生成具有地面实况信息的合成数据,并针对不同的应用程序训练他们的网络。域随机化工具将有助于从同一场景生成大量场景。 ISAAC Sim 支持您当前步骤模型来导入机器人模型,URDF 是 ROS 社区中最常见的机器人模型格式,并且挑选行业需要 CAD 模型来获得更复杂和准确的机器人模型。

所有机器人都需要传感器套装,ISAAC Sim 提供了一套很好的传感器,涵盖了大多数应用。对于视觉传感器,它已经有RGB、立体和深度,对于激光雷达传感器,它有两维和三维激光雷达,加上超声波传感器,它还有合成激光雷达传感器,用于生成合成数据和标签,用于语义和实例分割,以及作为二维和三维边界框。


NVIDIA RIVA 是一个用于构建 gpu 加速会话应用程序的 sdk。我们将包括用于自动语音识别 (ASR)、自然语言处理 (NLP) 和文本到语音 (TTS) 的最先进的预训练模型,这些预训练模型可以使用 TAO 工具包根据不同的领域和语言轻松定制。实际上,这些语音模型非常准确,并且 TensorRT 进行了优化以提供最高性能。RIVA SDK 今年将在 jetson 上普遍可用,这些语音模型在 jetson 本地运行,与必须连接到云来运行语音模型相比,延迟显着降低。


接下来我们介绍一下JetPack SDK. 正如我之前提到的,在底部,我们有板级支持包 (BSP),包括带有外部引导加载程序的示例根文件系统、工具链,我们今天支持的示例根文件系统基于 ubuntu.在 bsp 之上,我们有各种库,例如用于深度学习的库,如 TensorRT 和 cuDNN;计算机视觉库包括 VP I 和 open CV,还有各种其他用于加速计算的库。对于图形,包括 Vulkan、 OpenGL,以及出色的显示驱动程序。我们将为多媒体使用 gstreamer,并提供各种在Jetson上加速的远程插件。对于这些库中,我们都包含示例,以便我们的开发人员可以通过我们的示例了解这些库来快速启动和运行。我们还包括开发人员工具,例如将脚本刷机 以及用于交叉编译的工具,或者用于分析代码并解锁各种优化应用程序的途径。我们还包括完整的JetPack文档。

TensorRT 是一个运行时,并针对深度学习推理进行了优化。并为一系列 GPU 产品的深度学习推理应用程序提供低延迟和高吞吐量。您可以使用您选择的框架构建和创建模型,使用 python 或 c ++实用程序导入您的训练模型。然后,TensorRT 可以传递一个训练模型并执行优化,例如通过联系模型进行指示来最大化吞吐量,同时保持准确性。通过优化 gpu、内存和带宽的使用。根据目标gpu平台等选择最佳数据层和算法。然后将优化的计划保存在序列化文件中。在部署期间,TensorRT 运行时引擎会访问这些序列化文件并对其进行反序列化,并在目标 GPU上优化运行模型。 TensorRT 还简化了现有模型,降低精度以提高性能,例如使用FP16或者Int8降低精度.


我们包含在 jetpack 里的下一个深度学习探索库是 cuDNN,它是 CUDA 深度神经网络库,它是一个原语库,使用深度神经网络,这些原语在 gpu 上加速。支持例如前向和后向卷积前向和后向池化神经元激活器,如 relu、sigmoid 等。cuDNN 加速了广泛的框架,如 tensorflow、caffe、pytorch 等。如果层不支持,可以使用这些协调原语创建自定义层,该层在 gpu 上加速。

我们最新的计算机视觉和图像处理库是 VP I (视觉编程接口)。与 openCV 和 visionworks 等其他计算机视觉库不同,VPI 在多种计算硬件上实现计算机视觉和图像处理算法,可以在 jetson 上找到,如 cpu、 gpu、PVA 或 Jetson AGX Xavier 和 Jason Xavier NX,以及VIC(可编程视觉加速器)上。可以充分利用设备的计算能力。例如,当深度学习推理在 gpu 上运行时,可以使用 VPI 算法在 PVA 上对下一帧进行预处理,同时在PVA 上对 cpu 上的前一帧进行后处理。我们支付的算法性能很高,在大多数情况下比 openCV 和 visionworks 快得多。此外VPI 与 openCV可以 高度互操作。


在靠近边缘端,我们启用了开发云应用程序时熟悉的相同认知方法。容器编排等技术使开发和部署管道变得敏捷、可扩展和响应迅速。这使得 Jetson 真正实现了从应用程序开发到部署再到维护的软件定义平台。容器化是一种技术,其中将应用程序及其运行时依赖项打包,所有内容都在同一个包中,并与其他容器或整个系统隔离。由于应用程序在容器中拥有它所需要的一切,因此容器化的应用程序变得非常便携。容器化还有助于使开发过程简化、敏捷化。通过容器化开发,在整个开发组织中建立一致的开发环境变得非常容易。此外,由于应用程序及其所有依赖项都是容器化的,因此它使开发变得敏捷,因为容器化带来的隔离确保了开发和部署环境之间没有区别。现在,人们可以通过快速开发满足市场需求的小改进并将容器推向现场,从而更快地对市场需求做出反应。借助社区的容器编排技术,人们可以大规模部署和更新在现场运行的应用程序。为了将云原生带到边缘,我们包括 Nvidia 容器运行时,与 docker 集成以支持在 jetson 上运行的 docker 容器。我们还启用了使用我们的加速库和从容器内访问我们的加速器。为了帮助我们的应用程序容器化,我们在 Nvidia gpu、cloud 或NGC上托管了多个容器。


以下是在NVIDIA NGC上已经提供的Jetson相关容器:

在 Jetson 上编写各种安全功能,从安全启动开始,以确保系统从真实的软件堆栈启动,我们不仅支持对引导加载程序进行加密和签名,而且您可以对内核质量进行加密和签名,而且已经如此。为了保护存储在 Jetson 上的数据,我们支持 EMC 等内部磁盘加密,也支持 llvm、ir 等附加到 jetson 的外部磁盘加密,即使有人掌握了存储,也没有人能够读出数据。如果您需要保护 Jetson 上运行的其他应用程序的某些数据,我们支持可信执行环境,它提供了一个完全隔离的环境,带有自己的存储卡板,因此该环境之外的任何代码都无法访问当前数据存储在这里。它可以包括提供加密加速的安全引擎,并注入回内核驱动程序以访问安全引擎并使用其服务。在安全启动中使用安全引擎来启动堆栈并验证签名。这包括可以被烧毁以控制各种安全项目的各种Fuses,至于防止网络攻击,jetpack支持块监控电压监控温度监控等功能。安全性是Jetson 的一个重要方面,我们不断投资于JetPack的新安全功能,并定期发布 CVS 安全补丁。


为了升级jetsons,我们提供了三种无线更新。一个是 使用debian 包管理工具进行 OTA升级,您可以从一个JetPack 版本升级到另一个版本,我们只需使用 APP 命令。我们为 jetpack 中的所有软件包托管一个 debian 软件包管理服务器。因此,这对于使用 Jetson 开发套件的开发人员升级到更新的JetPack而不影响他们的开发环境,非常有用。接下来的两种方式是为已经在现场部署的产品上的 OTA 设计的。 一个是基于镜像得OTA,NVIDIA提供了一个可以客制化的端到端的OTA解决方案。另外一个通过 A/B 根文件系统冗余,您可以维护两个同时包含内核和内核 dtb 的根文件系统,并且在一个插槽上运行时,您可以尝试更新未运行的插槽,如果更新失败,您始终可以从一个好的插槽启动,因此它提供一种在现场设备中升级设备的非常安全的方法,并且是一种非常常见的 ota 技术。


NVIDIA 支持 jetson 开发人员工具可帮助开发人员在典型的嵌入式系统上更快地工作并开发更高效的应用程序,从开发到优化的过程可能会因对分析等任务的有限支持而变得复杂。 Jetson 开发人员工具从头到尾简化了整个过程。 Nvidia nsight 工具使您能够在同一会话中以同一 ID 开发和交付 cpu 和 gpu 代码。 Jetson 支持远程和本地调试。 gpu、分析器和系统跟踪提供了对瓶颈和效率改进机会的洞察。分析也可以远程或本地完成。 Nvidia 还提供了更多用于详细分析的工具。包括 gpu、内存检查、 汇编器和库性能顾问。还因为 jetson 开发工具包就像一个 Linux 工作站。您还可以访问由 Linux 生态系统本身提供的庞大的兼容工具存储库。 Nvidia Nsight 工具可帮助开发人员专注于优化他们的应用程序,而不必担心设置调试和分析工具,它包含在 jetpack 中。

功能安全是关于实施保护功能以应对系统故障的风险。功能安全在制造、农业、机器人、建筑、医疗、航空电子等多种应用中非常重要,以保护人员、财产和环境免受系统意外或异常行为的影响。NVIDIA Jetsons 的功能安全方法是提供对硬件错误诊断基础的访问权限,该基础可用于与安全相关的系统设计环境中。Jetson 安全扩展包 (JSEP) 提供错误诊断和错误报告框架,用于实施安全功能和实现功能安全标准合规性。此外,JSEP 包括来自 NVIDIA 安全专家的各种文档和指导,以简化功能安全流程。结合 Jetson 安全扩展包提供的支持,满足 IEC 61508 和 ISO 13849 功能安全标准。

NVIDIA Jetson AGX Xavier Industrial 模块包括 Xavier SOC,它经过 TUV SUD 评估,符合 ISO 26262 的所有适用要求。该模块还包括内置的各种安全扩展:

  • 安全集群引擎 (SCE),一个专用的 ARM Cortex R5F 锁步子系统,用于集成故障检测。
  • 用于检测永久性和潜在故障的系统内测试 (IST)、LBIST(逻辑内置自检)和 MBIST(内存内置自检)。
  • 用于监控和报告错误信号的硬件安全管理器 (HSM) 和错误整理器 (EC)。
  • 支持添加外部安全MCU
  • DRAM 和 GPU ECC(纠错码)
  • 每个 IP 的 SEC(单一纠错)、DED(双重错误检测)和奇偶校验保护*
  • ARM CCPLEX RAS(可靠性、可用性和可维护性)*
  • 温度、时钟和电压监控



现在让我们来看看 JetPack 今年的路线图。两周前,我们发布了4.6.1,这是对JetPack的一个小更新,添加了对 Jetson AGX Xavier 64GB模组和Jetson Xavier NX 16G 模组的支持。接下来我们有一个大版本即将发布,它是JetPack 5.0,同时我们准备了一系列版本。其中包括两个开发人员预览版和一个生产版。Kernel将升级到5.10,Ubuntu支持20.04。我们也切换到使用UEFI作为cpu boot loader。明天我们将发布 jetpack 5.0开发者预览版,它将支持Jetson Xavier orin开发套件。

我们看一下JetPack 5.0具体的内容: