前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >作为合格的NVIDIA Jetson开发者需要知道的Jetson开发工具

作为合格的NVIDIA Jetson开发者需要知道的Jetson开发工具

作者头像
GPUS Lady
发布2024-04-13 20:36:47
990
发布2024-04-13 20:36:47
举报
文章被收录于专栏:GPUS开发者GPUS开发者

NVIDIA Jetson平台通过全球最全面的人工智能软件堆栈和生态系统,实现了对边缘人工智能和机器人应用开发的广泛访问。它集成了可扩展的平台软件、现代化的人工智能堆栈、灵活的微服务和API、ROS包以及特定应用的人工智能工作流程。在本次讲座中,您将学习到使用新升级的NVIDIA Jetson软件堆栈加快开发视觉人工智能和工业机器人应用的技能。

您可能已经听说过许多来自NVIDIA免费训练模型的SDK和工具,比如SDG合成数据生成器、ISAAC感知器、以及JetPack操纵器等。我相信有些人可能觉得自己掌握了所有的SDK和工具,不仅仅是来自NVIDIA的,而是涵盖了边缘人工智能和机器人技术的全部。我预料到了这一点。因此,我今天的演讲实际上是尝试成为一名导航员,试图引领大家穿越这个迷宫,向您展示我们拥有的工具,并给出一个框架,让您如何思考这些工具。

我将戴两顶帽子,第一顶帽子将是一个视觉人工智能开发者,可能是开发视觉应用的开发者。也许他正在进行人员检测、交通分析、零售分析等用例的开发。第二顶帽子是我将戴上的机器人开发者的帽子。他仍然是一个视觉开发者,试图将感知引入机器人用例,但更多地是针对机器人特定的用例。这些就是我将采取的两种角色,我将带领大家走过开发者之旅,了解各种工具以及如何在它们之间进行选择。

视觉AI开发者

首先从视觉人工智能开发者角度出发。如果我想要将视觉人工智能开发者的开发之旅分为三个主要部分,我可能会这样划分。他必须开发一个在其管道中使用的模型。他必须开发AI管道,但这并不是最终目标。他们必须围绕该管道开发整个AI应用程序。所以让我们从模型开发开始。

模型开发

在模型开发方面,有两种基本方法。一种是您可以从头开始创建模型。您收集训练数据,然后进行模型训练和优化。但是还有另一种方法,您可以不从头开始创建模型,而是从一个预训练模型开始。这些模型已经用大量数据进行了训练,因此您可能需要收集较少量的数据来适应您的特定用例,并进行迁移学习,然后进行模型训练和优化。现在有两种基本方法,应该选择哪一种?这就是我在研究这些问题时心中所思考的问题。

当您创建自定义模型时,如果您有独特的用例、特定的需求,并且没有适用于您用例的预训练模型可用,那么创建自定义模型就变得必要。或者,如果您用于您用例的数据看起来与预训练模型训练所使用的数据显著不同,那么再次进行自定义模型开发就变得必要。另一个情况是,如果您想要完全控制架构、超参数和训练过程,那么当然您可能需要选择自定义模型。

但如果您的用例是一个非常普遍的任务,比如人员检测、物体检测等常见任务,而且存在许多已有的预训练模型,那么使用预训练模型可能是一个很好的起点。或者您的用例有限的数据量,只有很少量的标记数据。那么,您也可以从预训练模型开始,然后使用迁移学习来适应您的用例。最后,使用预训练模型的主要原因之一实际上是缺乏专业知识。我们没有专业知识来创建自定义模型,或者您想要快速进行项目、快速进行API、缺乏用于训练等计算资源。因此,这就是我会如何在自定义模型和预训练模型之间做出决定的方式。

你可以通过Hugging Face、GitHub,甚至是NVIDIA GPU Cloud获取各种模型

有多少人知道我们从NVIDIA GPU云上提供的预训练模型?我们在NVIDIA GPU云上主要提供了数百种预训练模型。我这里列出的都是基于视觉的,比如对于视觉开发者,我们有用于人员检测的CNN和迁移模型,还有用于人员分割、物体分割的CNN和迁移模型。如果你在做交通分析之类的工作,我们有可以进行车辆检测、行人检测、甚至道路标志检测、车牌识别、人体姿态估计和人脸检测的模型,这些模型很多。所以这为你提供了一个非常好的起点,可以让你开始适应你的用例。但我们看到了一个明显的趋势。一是我们看到transformers和基础模型正在取代CNN,因为它们可以获得更强大的鲁棒性和基础模型具有的零短期学习能力,因此你不必为新对象反复训练。

NVIDIA已经让大家大吃一惊了。我们想要给我们的开发者在Jetson上完全本地运行的边缘AI的能力。所以我们创建了 Jetson 生成式AI 实验室。在这个生成式AI实验室里,我们在那里汇集了许多开源社区模型,并为我们的平台进行了优化,如果你正在构建一个聊天机器人,那里有各种大型语言模型可用。如果你正在构建一个视觉代理,比如我们正在将文本和视觉结合起来,那里有像LIama这样的模型。如果你想要从文本生成图像,那么类似于stable diffusion的模型就在那里。如果你想要使用大型模型然后进行知识蒸馏并转换成小型模型,那么我们有关于如何做到这一点的蒸馏方法,如果你对生成式AI感兴趣,那么你应该去看看那里的各种东西。所以我谈到的不仅仅是NVIDIA GPU云,我们有预训练模型,如果你对生成式AI感兴趣,我建议你去看看我们创建的这个实验室。

但无论如何,现在你有了一个模型,到目前为止我们所讨论的是,你可以选择一个自定义模型或预训练模型。现在是训练的时候了。再说一遍,你面临两个选择。一种是使用常规的流行方法,比如我会选择像Pytorch或TensorFlow这样的流行框架,或者我们有Nvidia训练和优化方式(TAO)。那么我什么时候选择哪一个呢?如果你是从零开始创建模型,当然选择Pytorch或TensorFlow;如果你想对训练、模型架构和优化有更多控制权,那就选择TensorFlow和Pytorch;但是如果你从我们这里开始使用预训练模型,那么它会为你提供一个非常简单的工作流程来进行训练和优化;如果你没有使用Pytorch和TensorFlow的经验,但是你想在一个抽象级别上工作,使用起来简单的API,你不必了解TensorFlow或Pytorch。那么 TAO 会为你提供一个简单的方法来创建模型,然后进行训练。

这是一个示例。你可以使用自己的数据,可以使用自己的模型或预训练模型,进行训练、调整和优化,进行训练,还可以进行优化,比如说进行自动ML,实际上找出哪些超参数对你的用例有好处,或者进行混合精度训练等等。因此,它为你提供了各种优化技术,比如量化,让你在一个单一的工作流程中进行训练和优化,而其输出。有趣的是,你实际上可以继续部署到任何地方。它不仅可以是Nvidia平台,也可以是非Nvidia平台。去年,我们实际上还包括了非Nvidia平台。模型选择使用自定义模型预训练模型,然后进行训练。

流水线开发

我们讲一个流水线开发,我所说的流水线是指——模型推理只是流水线中的一个部分,你需要做获取视频。你需要对数据进行预处理,以便可以进行推理。然后进行推断后的任务。

在视觉开发者中 ,你面前有两个选择。一个是Gstreamer,另一个是Nvidia DeepStream。什么时候使用哪一个?其实我们的DeepStream也是基于Gstreamer的。但是,有一些区别。如果你正在进行一个快速的概念验证,如果你不担心性能问题,那就选择Gstreamer。但是,如果你想要做一个端到端的加速流水线,我指的是什么?即你的流水线的每个部分都不在CPU上运行,而是在Jetson上的加速器上运行。其次,如果你不希望在你的流水线之间复制内存。因此,如果你希望内存保留在一个地方,并且在整个流水线过程中不进行内存复制,从而让整个流水线高效,那么你就选择DeepStream。它提供了40多个GPU加速的插件。因此,你可以使用各种插件来加速整个AI流水线。

一个典型的流水线从视频捕获开始,经过预处理,进行推理,如果可能的话进行人员跟踪,以及进行其他后处理任务,所有这些都是。DeepStream提供了可以在Jetson上运行的各种加速块。例如,捕获可以在ISP上运行,预处理可以在GPU上运行,推理可以在GPU或我们拥有的深度学习加速器上运行,类似地,其他任务也是如此。但是,如果你看到一个流水线,它甚至完全不触及CPU,它可以完全加速,最好的部分是从开始到结束,没有内存复制,零内存复制,这就是给你一个高效的流水线。所以,正如我所说的,如果你追求性能,就选择DeepStream,但如果你想要快速简单,就选择Gstreamer。

现在,我们所做的是为DeepStream带来的新功能,称为Service Maker。看看我们如何让有人编写DeepStream流水线变得如此简单。只需使用这些点添加流水线的不同部分。我们使它如此简单,以至于即使是高中开发人员现在也可以编写流水线。他们不必完全了解GStreamer。如果他们懂C++,他们就可以编写它。不仅如此,你可以将流水线打包为一个容器,然后通过REST API部署和管理它。甚至动态地,比如如果你想要添加一个流,如果你连接另一个摄像头的流,或者如果你想要删除一个流,所有这些都可以通过REST API来完成。所以现在你不仅可以创建一个AI流水线,而且实际上可以将其创建为一个服务。

AI应用开发

你从模型开始,又创建了一个AI流水线。但这并不是游戏的终点。你必须围绕它编写一个应用程序。那意味着什么呢?在这里,我向你展示了一个典型的视觉AI应用程序。推理部分只是在中心。有很多事情你需要担心。例如,如何发现传感器?如何管理传感器?如何对正在发生的感知进行分析?如何监视感兴趣的事件?如果你想要,你如何进行日志记录,如果你想要查看一些利用率,我的系统发生了什么,你如何从云端控制它,网关等等。所以,每个视觉AI应用程序开发者都必须关注的一些事情。现在正在发生的是,我们看到每个人都在尝试解决同样的问题。所以我们做的是为Jetson创建了微服务。

Jetson上的微服务是每个视觉AI应用程序开发者所需的基本构建块,而不是你从头开始创建,我们在这里为你提供。这些是云原生、以API为驱动的微服务,例如防火墙微服务,它可以是分析微服务,也可以是推理微服务等等。因此,这些都是预构建的微服务。我们还集成了生成式AI,意味着你也可以通过其中一个服务,比如推理服务,引入AI模型,并创建一个完整的基于生成式AI的视觉应用程序。所以归根结底,我们为Jetson创建微服务的原因是因为我们看到每个人都在尝试解决完全相同的问题,而你不需要这样,所以我们创建了这些服务,以便你可以立即使用它们。

机器人开发者

如果我要将机器人开发者的旅程分为三个构建块,我会这样划分。首先,你要把感知带入到机器人应用程序中。因此,你将不得不进行某种模型开发。当然,整个世界都在向模拟方向发展。在实际接触物理机器人之前,你首先在模拟环境中完成所有工作。在最后你将实际构建一个真实的机器人,并在机器人上运行真实的代码。你会称之为运行时。

模型开发

对于机器人开发者来说,模型开发的旅程看起来几乎与我展示的视觉开发者的旅程相同。因此,我不会讨论我已经涵盖过的许多内容,但是当涉及到预训练模型时,再次在Nvidia GPU云上,我们有各种各样的预训练模型,主要用于机器人用例。例如,如果你正在处理激光雷达点云并基于激光雷达点云进行目标检测,那么就有PointPillar网络。如果你在许多机器人用例中进行姿态估计,你需要确定一个对象的姿态,无论是为了抓取还是其他目的,你都需要中心点,你需要姿态估计。目前有各种姿态估计模型,在NGC中有一个Depth在机器人用例中变得非常重要。在NGC上有Vision Transformer,如果你正在做的机器人做像光学字符检测这样的事情,这个OCR是你需要的....所有这些东西都可以在NGC上找到。

但是当涉及到这里的机器人模型开发时,我会说相比我之前谈到的视觉开发者,这里更具挑战性,因为在机器人用例中训练模型缺乏数据,绝对缺乏数据,尤其是在地面上,例如,让我举个例子。假设你想为ISAAC SIM做一个基于激光雷达的点检测模型,对吧,目标检测,你如何收集这样的数据?这是非常困难的。所以这个时候需要模拟。现在有了模拟,你可以创建逼真的数据。这些数据遵循ISAAC SIM的物理规律。你可以进行域随机化,这样你就可以改变纹理、不同的光照条件等,不同的反射特性。而且,你生成的数据最好的部分是已经标记好的。你不必再去标记它,因为它是合成生成的。它已经被标记了。所以在许多用例中,例如,即使你正在创建一个立体深度模型,收集一个合适的训练数据集也是极其困难的。这就是为什么我们看到很多机器人开发者使用模拟进行数据生成和训练的地方。ISAAC SIM具有合成数据生成功能,你可以使用这个功能。

我已经展示过TAO了,就不多说了,只是需要强调的是:你可以使用真实数据或合成数据。对TAO来说,无所谓。因此,它可以使用真实数据或合成数据,你的自定义模型或预训练模型进行训练。

模拟

现在是模拟的部分。在这里,你又面临着各种选择。该选择使用Gazebo、MuJOCO还是ISAAC SIM,你可能会想知道何时选择ISAAC SIM,何时应该继续使用Gazebo。我在这里试图为你尝试回答这个问题。

如果你正在处理基于ROS的项目,因为Gazebo是一个非常好的选择,特别是你可以模拟复杂的环境,如果你正在处理模拟任务和控制,那就选择Gazebo。

如果你正在处理类似机器人手臂这种需要模拟关节和可变形身体部件的用例,那么MuJOCO肯定是一个答案,如果你正在教一些技能给强化学习,MuJOCO对此提供了非常好的支持。

那么,何时使用Nvidia ISAAC SIM呢?特别是当你将感知带入到机器人时,它变得非常重要,例如,如我所说的,无论是基于激光雷达还是摄像头或其他类型的传感器,如果你想要在模拟器中模拟它,那么模拟必须遵循物理规律,例如,激光雷达束在模拟中反射物体时应该与在现实世界中的行为完全相同。否则,模拟就没有意义。所以,如果你引入了机器人感知,ISAAC SIM就真的变得非常重要,因为它可以生成合成数据。但ISAAC SIM的另一个亮点是,如果你不仅是在模拟一个机器人,而是在模拟整个工厂水平的仿真,做Digital Twin,那么ISAAC SIM就会发挥非常重要的作用。我们还在ISAAC Labs中添加了通过强化学习训练机器人的能力。如果你想通过任务和强化学习来教导机器人,我们也添加了这个功能。所以我会说,如果你正在进行机器人感知或进行大规模仿真,那么一定要看看ISAAC SIM。

你可以通过各种方式将机器人或3D模型带入ISAAC SIM,通过你的URDF、CAD等任何支持的格式将其带入。这里有各种传感器模型可以模拟传感器,如立体传感器,RGBD,LiDAR,超声波传感器等等。你可以进行复制以生成合成数据,然后如果你想的话,你可以进行软件在环或硬件在环。在这种情况下,你想要使用像我们支持的ROS2到Python这样的机器人接口,甚至如果你可以做一个自定义接口。

机器人应用开发

现在你准备编写实际在机器人上运行的程序。而框架是什么呢?我甚至没有尝试提供任何替代方案。ROS是最著名的框架之一,拥有一个非常庞大、活跃且备受喜爱的社区。他们在2023年有5000万次ROS包下载,这是一个10%的增长。它非常非常受欢迎,而且越来越受欢迎。

认识到现有的大多数ROS包都是基于CPU的。但是,如今在机器人技术中,感知水平正在提高。随着感知水平的提高,人们为机器人带来的传感器数量和多样性也在增加。因此,您必须进行传感器处理、传感器融合,然后进行定位、导航等任务。而CPU显然行不通。因此,我们意识到,嘿,所有现有的ROS包都是基于CPU的。NVIDIA如何为ROS社区带来硬件加速?这就是Isaac ROS的目的。因此,我们为ROS社区带来了AI加速,并且实际上有三种方式。

第一种方式是,我们有一系列用于各种机器人任务的ROS包,如视觉、物体识别、3D重建、人员检测、立体深度等。其次,这是我们所做的第一种工作。这意味着我们创建了硬件加速的包。我们不试图发明一个新的ROS。我们仍然使用相同的ROS中间件。我们所有的包都基于ROS2。

我们进行的第二种工作是与OSRF合作,在中间件本身引入一些优化。我指的是什么?如果你看一下,ROS并不是为硬件加速而建立的。它在两个节点之间通信的方式是将数据从GPU传回CPU,然后再传到下一个节点,数据再返回到GPU。因此存在大量的内存复制。因此我们认识到这一点,我们说,'好吧,这不是做事的方式。'所以我们与他们合作。我不得不介绍两个功能,称为类型适应和类型协商。这是什么意思?如果有两个节点是GPU加速的,这两个节点可以说,'好吧,我知道GPU,你也知道GPU。在这种情况下,我只需指向GPU位置,告诉你对象在哪里以及它是什么样子。就这样。我不必只发送给你数据的标记,而不是整个数据本身。这样就可以消除所有的副本,并加速整个graph。因此,我们已经为ROS社区做出了贡献。

此外,我们开发的包,我们的第三个重点,我们开发的包,它们的性质是模块化的。如果您使用ROS1,我们也可以与ROS1一起工作,这没问题。我们为您提供了加速的ROS桥接,以便您将这些ROS包实际带入ROS1图中。如果您使用任何自定义框架,我们也可以与您合作。这就是ISAAC ROS的三个主要关注点。

正如我所说的,有很多ROS包是GPU加速的,所以你可以直接使用。例如,3D重建,在导航过程中进行障碍物检测非常重要。视觉测距,实际上是视觉惯性测距。你可以进行基于摄像头和IMU的测距。立体深度,自由空间分割,姿态估计等等,有很多,PPT放不下,你可以在Isaac ROS中查看

这个视频是关于我们的ROS3项目的新功能,它将带来许多新特性,但我在这里将重点介绍其中的三个。首先是多摄像头感知,视觉度量和三维场景重建。我们过去提供的是基于单个摄像头的功能。现在我们正在扩展到多摄像头。因此,您可以实际上引入多个摄像头,将其融合,然后进行视觉度量和三维重建。第二个是我们也在扩展我们操作用例。首先是基础姿态。这是一个基础模型,用于进行姿态估计,六自由度姿态估计。最后一个是cuMotion,这是加速轨迹规划和优化。这三个功能将与ROS3一起推出,当然还有其他功能。

您可能已经听说过Isaac Perception。你可能会问Isaac感知器是什么,但实际上Isaac感知器是一个基于ROS的图形。归根结底,它是一个全空间可用的图形,提供了三维环绕感知、多摄像头深度感知和周围三维障碍物地图生成。所以,我这整个图形是在我们的新一代传感器套装Nova Orin Sensor Suite上验证的,但您也可以将其调整适应您自己的。如果您正在使用自己的传感器,您也可以将相同的图形调整为适应自己的。但是,Isaac Perception为您提供了将感知引入移动机器人的简单方法。您可以使用我展示给您的Ros包,并使用它,但您将不得不自己处理集成。Isaac Perception为您提供了一个非常简单的方法将感知引入到移动奖励中,因为我们提供了经传感器套件验证的ROS图形。

对于Isaac Manipulator,涉及到多个任务。首先是物体检测。您要拾取的是什么物体?物体放置在哪里?您必须进行姿态估计。找出物体有多远。它是如何放置的?然后,您必须进行轨迹规划,以便去拿取物体。所有这些任务都作为ROS包提供,用于操纵任务。

这两个工作流程,像Isaac感知器和上面讲的Isaac操纵器,是我们为移动机器人和操纵用例生成的工作流程,因此很容易将它们整合到您的工作流程中。

JetPack SDK

最终,对于那些具有远见的开发者或机器人开发者来说,您最终会使用Jetpack进行开发。Jetpack SDK是我们在Jetson上拥有的一个水平SDK。它是Jetson 模组的SDK。它有两个部分。一个是BSP,另一个是为AI加速提供的一系列库,比如CUDA和Triton等。

对于使用Jetpack SDK的开发者们,Jetpack 6即将推出,目前已经有一个开发预览版,正式版本将于四月第二周推出。

我们正在做三件重要的事情,这就是为什么我们称其为有史以来最大的升级。

第一件事是能够自定义内核。到目前为止,我们构建内核的方式是采用上游内核,并进行大量修改,使其完全无法识别。现在,您可以自定义内核,不必再使用我们的内核,我们解决了这个问题,我们向上游Linux内核贡献了大量的补丁,现在我们构建的方式是一个上游Linux内核,加上三个清晰的识别补丁,我们可以为您提供一个配方,如果您想要使用不同的内核。例如,您想要内核六,那没问题。您想要做不同内核的原因可能是因为您正在使用的一些驱动程序在新内核中,并且您不想将其回溯到旧内核。或者您可以构建自己的内核,然后始终使用最新内核。

其次,由于我们进行的所有上游工作,各种Linux发行版都希望在Jetson上提供发行版。因此,我们看到Jetson支持的发行版列表正在扩展,Canonical Ubuntu、Wind River、Red Hot Clinics和各种基于Yocto的发行版都在Jetson上启用,并且这个列表将继续增长。

另一件事,如果您了解Jetpack并且了解其中一个痛点是Jetpack升级,我相信您肯定知道。如果您的开发团队想要使用更新的TensorRT,唯一的答案就是获得新的Jetpack。这意味着系统团队也必须适应携带Jetpack的新BSP。我们尝试用Jetpack 6来解决这个问题,通过解构BSP上的计算栈,使您的AI开发团队可以获得最新的Jetpack栈,而无需升级BSP,也不会对系统团队造成依赖。这就是我们正在做的第三件事。实际上,过去两个月来,我们看到了很多的兴奋。Jetpack 6恰好是我们发布以来下载量最高的Jetpack版本之一。

Jetpack,正如您之前所知道的,是一个包含BSP和AI堆栈的AJ Linux,但我们扩展到现在也包括平台服务。这些是我刚才在谈论视觉开发时向您展示的相同的微服务。例如API网关、消息总线、监控、防火墙、AI分析服务等。这些是每个人都需要的基本组件。因此,我们将它们引入了Jetpack本身。现在Jetpack不仅仅是Linux和AI堆栈,还包括了Linux堆栈和Jetpack平台服务。

我们每年尝试发布两个版本,如果没有推出任何新模块的话。因此,我们尝试每年发布两个版本。Jetpack开发者预览版已于去年12月发布。我们计划在4月份的第二周发布正式版本,并且在第三季度会有第六个版本发布。但是,支持Xavier和Orin的Jetpack 5将继续存在。我们将定期发布Jetpack 5版本,其中包含安全修复程序或关键错误修复程序。这将持续到Jetpack 5的结束。这就是我要说的最后一句话。所以我这次会议的目的实际上是给您一个开发者之旅,介绍一些来自Nvidia的开发者SDK和工具,并最终展示路线图。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2024-04-06,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 GPUS开发者 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 模型开发
  • 流水线开发
  • AI应用开发
  • 模型开发
  • 模拟
  • 机器人应用开发
相关产品与服务
消息队列 TDMQ
消息队列 TDMQ (Tencent Distributed Message Queue)是腾讯基于 Apache Pulsar 自研的一个云原生消息中间件系列,其中包含兼容Pulsar、RabbitMQ、RocketMQ 等协议的消息队列子产品,得益于其底层计算与存储分离的架构,TDMQ 具备良好的弹性伸缩以及故障恢复能力。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档