加速边缘AI开发:释放Metropolis API和Jetson上的微服务的强大力量

2023-11-22 17:23:40 浏览数 (1)

本文整理自NVIDIA讲座《Accelerate Edge AI Development With Metropolis APIs and Microservices on Jetson》。

本次讲座重点是如何加速在边缘开发具有远见的应用程序。我们了解构建这些应用程序可能需要昂贵的开发周期。因此,我们引入了强大的新一套 Nvidia Metropolis API 和微服务,以帮助您加快视觉应用程序的开发和部署,甚至包括在 Nvidia Jetson 上生成的人工智能应用。

让我为今天的讨论提供一些背景。我们将关注边缘计算以及人工智能如何改变这一领域。具体而言,我想首先谈谈生成式人工智能。众所周知,生成式人工智能经历了显著的增长,彻底改变了我们与数据互动的方式。最初以基于文本的数据和自然语言处理为中心,新的模型和能力以加速的速度涌现。这一演变不仅改变了我们对人工智能的看法,还扩展了我们对可能性的理解。

值得注意的是,这种互动性现在正在将其优势扩展到基于视觉的应用程序,涵盖了各种模态,包括图像、视频、文本和音频。今天讲座的主要焦点是探讨如何借助最新的Nvidia Metropolis平台扩展,开发人员可以利用包括生成式人工智能和多模态方法在内的最新人工智能能力。目标是与客户和客户一起试验这些创新,将其无缝集成到Nvidia Jetson上的应用程序中,并朝着生产的方向不断迭代。这个过程符合现代云原生堆栈的要求,并受到新的API和微服务的支持。这就是我们在一起的时间里要深入探讨的内容。

那么,这与我们此前的做法有何不同呢?嗯,最好的解释方式可能是通过一个例子,特别是与以前的方法(例如卷积神经网络)相比。考虑一下供应链中的仓库管理场景。负责分销中心的运营经理希望了解其分销中心内发生的情况。传统上,按照标准操作程序,他们查看历史数据和实时数据,例如检测箱子的数量。

在传统方法中,存在一个刚性的工作流程,需要为训练指定特定的模型。例如,可能需要训练一个模型来识别和计数箱子,或者跟踪其他对象,比如人、叉车或滑板车。这个过程需要不断重新训练模型,开发新的神经网络,非常繁琐且耗时。整个周期涉及试验、部署,而且充满挑战。

然而,通过生成式人工智能和基础模型,我们可以利用一种令人难以置信的泛化能力。不再需要不断地重新训练模型。实际上,这只是一个例子,还有许多其他应用。出现了零样本学习的能力,极大简化了开发过程。此外,我们还可以使用自然语言与模型和应用进行交互。我们可以就内容提问,询问过去的事件、当前的情况,甚至预测未来的发生。

生成式人工智能应用不仅提升了开发周期,还使与模型的交互达到了一个新的水平。用户现在可以通过提问问题、寻求解释或请求视觉示例来与模型互动,使我们更接近于期望的在应用中获得非凡和神奇互动体验的状态。

这些能力对于将人工智能集成到应用程序中的开发者,并向最终用户提供交互性,几乎在每个主要行业中都具有巨大的价值。在仓储供应链管理、资产跟踪方面,这些能力表现出色,同样在机器人技术领域也有令人惊叹的表现。不论是与移动机器人互动还是与静止机器人,无论是在制造业基础设施还是医疗保健应用中,这些能力都得以应用。它们还延伸至智能空间和城市,潜在应用几乎无穷无尽,所带来的威力非常强大。毫无疑问,这项技术注定将在各个行业中产生重大而深远的影响。

为了开发需要实时洞察力的解决方案,并在分布式边缘部署中特别针对不断演化的生成式人工智能工作负载,我们需要能够与客户一起试验应用程序的能力。在实际的企业级打包中,我们需要强大的边缘人工智能计算。我们需要灵活的云原生软件堆栈,能够处理来自多个传感器的数据,转化为高度精准的实时洞察,并通过可以与云连接的应用程序提供。

我们以前采用的传统的DIY(自己动手)方法非常耗时,需要多年的开发时间。然而,借助这一套专为Jetson定制的新的Metropolis API和微服务,开发时间得到了显著压缩。我们相信,这将对构建和部署应用程序的方式产生重大影响,特别是对那些寻求将强大的边缘人工智能计算集成到解决方案中的人,尤其是在具有动态和不断演化的生成式人工智能工作负载的场景中。

在典型情境下,构建和部署应用程序需要进行一系列关键步骤。首先,您需要创建您的人工智能模型,构建推理管道并对其进行优化以实现最佳性能。在此之后,您可能需要将各种组件组合在一起,以构建一个协调的应用程序。然而,在部署阶段,需要额外考虑一些因素,比如确保采取安全措施以在安全环境中部署应用程序。独立完成所有这些任务可能会非常耗时。

这就是我们引入Jetson上的Metropolis API和微服务的重要性所在。通过模块化的方法和高度可扩展的架构,我们的解决方案使您能够以敏捷的方式构建应用程序,并将其无缝集成到其他应用程序和服务中。您可以开发自己的微服务并轻松地将其插入Metropolis on Jetson框架中的现有API和微服务中。

在真实系统中,持续监控应用程序和设备的健康状况至关重要。如果出现问题,需要立即获得警报。对于基于边缘的解决方案,远程管理和空中更新是必不可少的。安全性是至关重要的,以防止不良行为者访问您的敏感信息。借助Jetson上的Metropolis,您可以显著减少开发和部署时间,加速推向市场的人工智能解决方案的时间。现在,让我们深入了解我们是如何实现这一切的。

我们的使命是成为构建和部署Jetson上生成式人工智能应用的生产堆栈,可以概括为三个主要支柱。首先是我们的架构,我们的云原生架构,这是一组微服务和容器化服务,其优势在于模块化,可以非常轻松地添加和删除组件。您可以拥有自己的微服务,并轻松连接到应用程序的其余部分。您可以在不影响整个流程的情况下修改和更新应用程序。它将云的灵活性带入了边缘。我们还提供一套API和微服务,可帮助您加速应用程序构建过程。我们有我们的视频源工具包,主要用于流式数据的处理、检索以及在应用程序中流式传输数据。我们有超高效的感知管道,利用了大多数人熟悉的NVIDIA DeepStream SDK,然后我们有许多用于计数、地理围栏等功能的分析微服务。最后,第三支柱是人工智能或生成式人工智能。我们的目标是在Jetson上简化生成式人工智能的开发和部署,使用户不仅能够轻松构建应用程序,还能够轻松部署应用程序。通过快速演示,我们将展示如何使用这一堆栈运行生成式人工智能应用程序,特别是零样本检测应用程序。用户甚至可以使用自然语言查询,而不是依赖于机器语言查询。使用Metropolis on Jetson,LLM(大语言模型)微服务可以在云端或Jetson上运行,方便与自然语言提示进行交互。用户可以运行先进的零样本推理模型,并使用提示进行动态更新。

这是我们用于边缘计算的Metropolis on Jetson的端到端工作流程,将云一样的体验带到了边缘,其中一切都在微服务中运行。从左到右开始,我们首先有传感器,将数据流入传感器和I/O模块,基本上是我们的视频存储工具包(VST),负责处理传感器数据,可以自动发现标准协议,如ONVIF Forking,然后能够存储、检索数据,并通过WebRTC进行流式传输,以便在您的桌面或移动应用程序中查看视频流。

然后,数据传递到我们的Pixel Perception微服务,该服务对流数据应用人工智能。这可能涉及解码压缩流、预处理、分批处理以及应用人工智能以生成元数据。目标跟踪也是我们Pixel Perception微服务的一部分,利用了DeepStream SDK。

生成的元数据然后通过Redis发送,这是我们在Metropolis on Jetson上选择的消息代理,用于生成可操作的见解。我们提供的分析微服务包括计数、地理围栏以及处理GNAI(生成自然语言人工智能)应用程序的人类语言查询的能力。

我们堆栈的另一个关键组件是我们的系统服务,这对于创建生产级别的应用程序非常重要。首先,我们有IoT节点,可以在云端或本地服务器与边缘设备之间安全地通信,以便您可以从云端向边缘设备发送请求并发送用于诊断和警报的数据。微服务使您能够监视系统指标、跟踪系统性能、诊断应用程序性能,并在出现问题时生成警报。重要的是,我们的系统服务非常安全,利用了Jetson平台软件提供的强大安全措施。

可能在幻灯片中感觉Metropolis和Jetson堆栈很固定,灵活性很小。实际上,情况正好相反。虽然我们定义了接口和微服务,但开发人员可以轻松将任何应用程序引入我们的堆栈并在其中运行。让我们看看是否可以将生成式人工智能应用程序与我们的Metropolis堆栈一起运行。 为此,我们选择了一个基于Python的开源项目。这是一个使用现代模型进行零样本检测的应用程序。用户可以使用提示动态更新要检测的标签。实际上,运行这个应用程序与我们的堆栈需要做的事情并不多。我们不需要对这个应用程序进行大规模的修改。事实上,我们只需执行三个步骤:

  1. **使用正确的I/O:**确保适当的输入/输出连接,以将应用程序集成到整个应用程序框架中。在这种情况下,我们需要通过Jetson I/O库建立连接,实现与DSP的无缝交互。
  2. **实现REST API:**定义REST API至关重要,特别是对于具有提示和动态标签更新的生成式人工智能应用程序。这允许使用简单的REST API命令轻松进行动态修改。
  3. **容器化:**为了简化部署,我们将应用程序容器化,使其与Docker兼容。这有助于将应用程序顺利集成到我们的Docker Compose组中,实现整个应用程序的无缝执行。

在即将进行的演示中,我将展示这些步骤如何协同工作,强调了我们的Metropolis和Jetson堆栈中固有的适应性和灵活性。

如果我们将之前幻灯片中的堆栈图与我们的生成式人工智能整合在一起,大致如下。您的摄像头输入进入传感器和I/O块,然后到VD块,该块发送RTSP信号。生成式人工智能应用程序利用AI技术处理RTSP输入,并通过RTSP输出。这个输出可以通过WebRTC播放到您的手机或桌面设备上。

此外,我们还可以进行API调用。这使得动态更新成为可能,可以实时修改要检测的标签。无论是识别人员、机器人还是特定的箱子,所有这些调整都可以实时完成。

在这个演示中,我们将看到几个方面。首先,我们将看到生成式人工智能模型的实际运行情况,这个模型能够根据我们的要求检测特定物体。例如,我们会让它检测一个人,或者检测箱子,甚至检测头发,它能够根据我们的提示有效地完成这些检测。

此外,我们还将瞥见我们的PT或视频存储工具包,这是一个基于UI的界面,您可以在其中捕捉和管理数据。我们还将通过Grafana仪表板展示系统的性能。最后,我们将展示这整个设置在移动应用程序中无缝运行。

在这个演示中,我们有四个不同的屏幕。聚焦在左上角,您可以看到通过RTC播放的输出。我们提供提示来检测一个人,它成功地识别了一个人。现在让我们尝试检测一个安全帽;我们更新并提供一个简单的API请求,包含提示和阈值,成功地捡起了一个安全帽。我们对马甲重复此过程,成功地检测到了马甲。现在,让我们结合这三个提示:一个人、一个马甲和一个安全帽。

接下来,我们添加一些设备,包括托盘和箱子。令人惊讶的是,我们甚至可以描述这些箱子,指定捡起品红色的箱子,系统能够识别箱子的颜色。这突显了生成式人工智能的强大之处,展示了在不依赖固定模型的情况下实时检测物体的能力。

另一个方面是,我们收集由这个应用程序生成的所有元数据,并通过我们的Redis消息总线将其流出。这些信息存储在一个数据库中,用于分析。Grafana仪表板显示关键的系统指标,如GPU利用率、GPU频率等等。最后,所有这些数据都可以流向我们的移动应用程序,提供一个参考移动应用程序,您可以在其中查看输出。它反映了您的输入以及您感兴趣的物体的元数据和边界框。

整个过程展示了在我们的Metropolis和Jetson堆栈上如何轻松实现这一点。我们演示了如何轻松地将任何开源模型或应用程序与我们的Metropolis on Jetson堆栈一起运行。

现在让我们深入了解一些我们提供的核心组件。你们中的大多数人可能对deepStream比较熟悉,我们已经发布了将近五年的deepStream版本。DeepStream是我们用于构建流式分析应用程序的SDK,它可以通过零内存复制高效地将像素处理为元数据,因为一旦流被解码,之后就绝对没有内存复制,我们在我们的参考微服务或深度中利用了这一点。在这种情况下,我们能够运行高达16个流的高度准确的人员检测模型,或者人员检测,所以在这种情况下,甚至没有使用GPU,GPU几乎是百分之百的空闲,供您用于其他模型。我们还运行了世界级的目标追踪器,实际上也利用了我们的可编程视觉加速器。因此,即使是我们的追踪器也没有使用GPU,因此您可以运行其他模型,可以运行更多模型,可以使用我们的GPU运行其他分析。此应用程序还提供了动态流发现功能,可以添加和删除流,如果失去连接,可以重新连接,最后生成的所有数据,所有元数据都被发布到Redis总线上,然后可以与我们的分析微服务一起使用。

现在让我稍微谈一下我们的VST或视频存储工具包。一些人可能对我们的VST比较熟悉,我们一直提供这个作为早期访问,现在每个人都有机会将VST用作更大的应用程序的一个微服务。我们提供了一组API,用于管理您的输入流、管理您的摄像头流,以及存储和流式传输。有20多个不同的API,可以执行诸如自动发现摄像头之类的功能。您可以管理摄像头,可以存储摄像头,对于存储,我们为您提供了一些选项。您可以将其存储在本地,也可以将其存储在网络存储上。至于输出,我们提供了WebRTC,所以如果您想在移动设备上通过WebRTC播放或流式传输视频,您可以这样做,并且我们使任何人都能够通过REST API与API进行接口非常容易,这个REST API允许您获取和检索视频数据,因此您可以提供API并说:“从时刻t0到t1在传感器X上发送给我一个视频剪辑”,它可以发送数据,可以通过WebRTC流式传输您的视频。

接下来,我们还提供一些参考的分析微服务,其背后的理念是您可以将其与我们的应用程序结合使用,与我们的感知应用程序一起使用,以便接收元数据并生成很多见解。我们直接支持的功能包括创建地理围栏,创建感兴趣区域,甚至设置一条线并说计算通过这条线的物体数量或人数。所有这些都可以通过我们的移动应用程序完成,这也是您提供的另一个参考应用程序,这使得任何人都能够迅速入门,了解有关分析的信息,并学会如何使用REST API,以便将其集成到您自己的应用程序中。分析微服务获取数据,从我们的Redis总线中获取数据,然后使用该信息生成许多见解。这作为我们Metropolis on Jetson的一部分打包,可以立即使用。

最后,为了连接您的边缘设备到您的云端或更大的服务器,我们提供了完整的双向边缘到云的连接。这样一来,您可以拥有连接到云的客户端应用程序,可以运行一个IoT服务器,向边缘设备发送API请求,并且通信从一旦请求在边缘接收后,它将其发送到在边缘运行的适当微服务,然后将信息发送回来。您可以用它进行身份验证、设备身份验证。您还可以用它进行授权和用户管理。您还可以用它声明特定的设备,并且我们将其提供为一个参考应用程序工作流程,可以部署在任何云上,以便IoT服务器可以作为微服务提供,并部署在本地服务器或任何云上。

最后,在您的生产环境中,您需要能够监控系统的性能,可能还需要监控应用程序的性能,为此,我们正在集成Trifana、Prometheus和Grafana,这样您就可以查看您的仪表板。您可以在Grafana仪表板中查看所有指标,这不仅允许您监视,还允许您在某个指标达到阈值时生成警报。例如,如果GPU利用率非常高,您可能会收到警报,表示可能出现问题,或者如果GPU频率低于某个阈值,您可能希望收到警报。这非常有用,它是一个额外的微服务,计算量很小,但提供了关键的指标,您还可以查看应用程序指标。您可能对服务质量等事物感兴趣。您可能想知道您的每秒处理多少帧。您也可以获取该信息,还可以获取所有微服务的状态。因此,如果某个微服务发生故障,您将能够看到并生成警报。通过API网关非常容易使用这些暴露的端点,因此您可以在自己的桌面上可视化这些数据。

总结一下,这个表格展示了我们从应用程序层提供的所有不同的API和微服务。我们提供了视频存储工具包VST、DeepStream、各种空间分析微服务以及云服务。在云服务中,我们提供了可以在任何云上或本地使用的参考云微服务,还有许多平台服务,可用于快速构建应用程序,如Redis或消息传递用于内存处理、入口监控系统、监控等等。最后,在我们的参考工作流中,我们提供了一些参考工作流,其中包括我今天演示的生成式AI示例应用程序,我们采用了一个开源项目,并将其作为Metropolis Jets包的一部分提供,这也会在软件发布后提供,使您能够使用它以及我们的AINVR。这是一个全面的应用程序,利用了大多数组件,包括像像素感知、空间分析等,也将作为Docker Compose包提供,您可以使用它快速入门。最后,我们提供了一个移动应用程序,主要作为参考,其想法是您可以使用它来查看如何与API进行交互,快速入门我们的应用程序,然后将其集成到您自己的应用程序中。

这就是我们的所有内容。您可以从今天开始。您可以注册以便在软件发布时得到通知。虽然软件目前还不可用,但我们预计在12月发布。您可以注册以便在其发布时获得通知,届时您将能够立即尝试使用。与此同时,如果您想要开始,我们在Jetson AI Lab中提供了一个非常好的、全面的生成式AI playground,您可以立即使用它来入门。

0 人点赞