前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >NVIDIA Jetson如何利用生成式AI和微服务在视觉领域创建强大的应用

NVIDIA Jetson如何利用生成式AI和微服务在视觉领域创建强大的应用

作者头像
GPUS Lady
发布2024-04-26 16:36:27
650
发布2024-04-26 16:36:27
举报
文章被收录于专栏:GPUS开发者GPUS开发者

本文整理自2024 NVIDIA GTC讲座:

NVIDIA Metropolis微服务套件为Jetson提供了参考应用之一的生成式人工智能应用,这是一套云原生构建模块,用于开发边缘人工智能应用和解决方案。本讲座将让您了解NVIDA Metropolis为Jetson提供的最新微服务以及构建边缘应用程序的新型云原生方法。探索如何构建强大的视觉AI应用程序,从云端管理您的Jetson应用程序,并使用您自己的微服务定制您的应用程序。

传统的AI或计算机视觉,特别是卷积神经网络(CNN),表现得非常出色。当然,它也有自己的排序功能。但同时也存在一些挑战,而且挑战还不少。啊,对于这种模型,我可以用一种通用的方式来解决。它们非常固定,非常僵硬。基于规则的方法并不理解上下文。它缺乏上下文理解。因此,你只能得到边界框,可以检测到一个事物或另一个事物。然后,如果你需要其他分析,你将不得不构建一个特殊的规则引擎,但这并不能解决问题。很多时候,在解决问题的过程中,应用程序会变得非常复杂。因此,我们觉得这就是生成式AI可以发挥作用的地方,帮助你从问题中获得最后的理解。

想象一下,你部署了摄像头,还部署了无人机,但在99.9%的时间里,并没有发生什么有趣的事情,它们只是静静地待在那里。现在,操作员需要查看发生了什么,而有了生成式I,我们实际上可以使用自然语言来告诉它:“嘿,有事情发生了”或者“如果你看到任何有趣的东西,向我展示异常”。如果它看到异常,你可以基于此做出反应,采取行动。因此,你可以使用自然语言来构建和提出问题。

为什么生成式I如此重要?以火灾应用场景为例,你首先需要一个模型来检测火灾。你可能还需要一个模型来检测人,因为你会问是否有平民或消防员在场。你可能还需要一些规则和规则引擎来定义什么是火灾,消防员看起来是什么样子,人类或平民看起来是什么样子。然后还需要一个自然语言模型,但这只能适用于火灾这一应用场景。但有了生成式AI,你就可以获得零样本学习的能力,因为这个模型经过大量数据训练,包括大量互联网级别的数据。它了解许多日常生活中的事物,知道火灾是什么样子,消防员看起来是什么样子,消防车是什么样子。它可以根据上下文理解来推断出,这些人可能正在灭火,那里发生了大火。你可以与它进行交互,提出问题,这就是使用生成式AI的真正价值所在。

这是一个名为VILa,也叫视觉语言模型的模型。我们已经针对Jetson Orin优化了这个模型,它运行在一个130亿参数的模型上,但核心思想与大语言模型LLM类似。该模型将视频、图像或帧作为输入,同时也接受文本作为输入,这些文本是你的问题和提示。在这个案例中,输出是文本,这个模型可以在Jetson Orin上运行,我们将其量化为8位,使用MLC运行时调用进行量化,这确实可以为你提供实时性。我们能够获得大约每秒20个标记的速率。标记基本上是它生成的输出。因此,根据你提出的问题,如果你提出一个问题,比如描述场景,它可能会基于这个问题生成60个标记。所需的时间取决于标记数量。所以,使用130亿参数的模型,我们每秒可以获得大约20个标记。而且,生成第一个标记大约需要一秒钟,所以有一些延迟。再次强调,对于Orin来说,这是一个相当大的模型。但尽管如此,我们仍然能够在Orin的内存占用和计算能力范围内运行它。

不仅如此。在生成式AI方面,我们实际上有很多不同的模型,你可以尝试。这些都可作为我们Jetson AI Playground的一部分来使用。如果你还没有看过,我强烈建议你查看一下我们的Jetson AI Playground

再次强调,为什么Jetson Orin上的生成式AI如此重要,其中一个主要原因就是性能。正如你所看到的,虽然有很多这样的模型,但我们几乎可以在Orin上实时运行所有这些模型,甚至比实时还要快。因此,性能非常高,吞吐量也非常大。

Jetson Services

现在我们来谈谈如何构建它。我们发布了一个名为jetson services或metropolis microservices的东西,你可能听说过另一个名字。我们的想法是通过提供这些微服务来简化应用程序的构建。我们试图解决的问题是,我们的开发者和客户在构建可部署的应用程序时遇到的困难。虽然你可以在PC上完成一些工作,但当你准备构建应用程序时,从构建模型、构建管道、优化它,到将所有东西整合在一起,这需要相当长的时间。如果它是一个生产应用程序,你还需要考虑安全管理等问题。通过一系列的jetson services,我们试图简化这一过程。我们试图加速你的上市时间,让你不必构建所有这些组件。你可以利用我接下来要告诉你的一些组件,但你也可以使用你自己的组件,还可以进行自定义。

我们提供的微服务核心是一系列云原生微服务的集合。我们的想法是将在云中构建的经验带到边缘端,那里的所有事物都是解耦的、基于API驱动的微服务。这意味着您会发现API使您的微服务更加便捷。您还可以构建自己的服务,提供API,并与我们的API网关连接。这些服务都是容器化的、可定制的,并允许您引入自己的自定义服务。此外,我们还为视频存储和管理等事物提供了一组预构建的服务,例如VST。我们有感知服务,因此生成式AI的应用程序会使用其中一种感知服务来构建生成式AI和VM。我们还有一些其他的感知服务,以及许多核心平台级别的服务。比如,几乎每个人都需要的监控功能,您希望能够监控应用程序的性能,并获得警报等更多信息。最后,对于生成式AI,我们认为这种架构非常适合构建、扩展和缩放通用AI。

让我们通过一个用例来具体说明微服务级别应用可能是什么样的。假设你的视频是通过RTSP传入的,比如说你的实时视频流或RTSP会进入VST,这是我们用于视频存储的微服务。这是一个功能丰富的服务,你可以进行传感器发现、相机管理、存储等操作,所有这些都通过API进行。我们提供了REST API,以便能够进行所有操作。这个服务的输出会进入某种感知服务。在这个例子中,你想要进行推理,假设你正在构建一个AI和VR应用,你可能有一个用于人员检测的推理模型和跟踪器。我们有一个微服务可以完成所有这些操作。整个应用都是使用Nvidia的Deepstream SDK构建的,用于构建高性能流媒体视频分析应用。

其中一部分会产生一些元数据,所有微服务架构都需要某种消息总线,以便能够在所有不同的服务之间异步通信。在我们的例子中,我们使用Redis作为消息总线,它会在所有不同的服务之间共享。而BT(可能是指某个特定的服务或组件)将写入Redis,分析服务读取元数据,生成时间序列洞察,并将其存储在数据存储中,所有这些都通过API连接。

因此,我们可以使用AI服务。我们有AI来获取API,该API将请求从你的云端发送到任何下游服务。再次强调,所有这些服务都在Jetson Orin平台上运行,在云端我们也有服务可以将这些应用部署在任何时钟上,并连接到用户部署在公共或私有云上的服务,你可以连接自己的身份提供商进行身份验证和授权等操作。

首先,所有这些服务都将作为JetPack的一部分提供。我们将提供我前面提到的所有服务。它们都将与我们的JetPack 6一起提供。事实上,我们让所有的开发者都能非常轻松地访问这些服务。就像你目前获取JetPack的方式一样,从5月开始,你将能够通过JetPack和SDK管理器获取所有这些服务。我前面提到的所有内容,包括WIT网关,一直到你的基于AI的服务,都将可用。

这张表格列出了我们提供的所有不同微服务,包括平台级别的服务以及我们这里拥有的所有不同参考工作流。我们有几个参考工作流,包括几个生成式工作流,其中一个用于进行零样本检测。这是我们几个月前发布的功能,你可以提供提示来检测任何你想检测的对象,这在你不知道模型训练了什么内容时非常有用。你不需要一个特殊的模型来检测对象A或对象B,你可以说“嘿,检测一下”,例如检测笔记本电脑或检查包,它可以很好地完成这些任务。

新的VLM警报系统工作流是我们即将发布的新功能,预计将在大约一个月后发布。我前面展示的参考应用是一个从视频输入到AI分析的综合应用,它支持创建虚拟边界、自动设置感兴趣区域线、创建虚拟线以生成时间序列洞察等功能。此外,我们还有一个移动应用来展示如何整合这个应用。我们的想法是简化这些过程,所以我们提供了这个应用,让开发者们可以基于此构建他们的最终产品。

如何与生成式AI集成

让我们来谈谈生成式AI应用是如何与各种平台服务集成的。

这是一个警报应用,所以我们称之为VLM或视觉语言模型警报系统。想法是,你可以构建这个微服务,所以我们并没有创建任何新东西,这是我之前展示过的现有架构。我们唯一做的事情是用我们拥有的生成式AI微服务替换感知服务,稍后我会向你展示那是什么。但除此之外,其他一切保持不变。就这么简单,所以你可以快速构建新的应用,构建新的服务,并直接将其插入。实际上,这并不是一个非此即彼的选择,你不需要使用整个堆栈或整套服务。你可以说,你只关心视频管理或传感器管理和存储,你可以选择VST;你也可以说,我更关心监控,我想查看jetson指标的情况,并基于这些生成一些警报,我们为此提供了一个监控服务。所以,这个架构非常模块化,并不是非此即彼的,你可以根据需要使用任何你需要的服务来构建你的应用。

让我们双击进入生成式AI微服务。我们所做的是,这实际上是一个基于Python的应用,我们从我们的Jet AI实验室中取得,并将其制作为了一个微服务。这里有一些我们需要做的事情,我不会一一介绍,但首先你需要将其制作成一个API,以便你可以使用REST API来调用它,并能够添加或删除流,因为你可能有不同的需求,这是一个需要动态配置的,你也需要能够动态地提供提示。所以,我在应用中提供的问题和询问的问题都是通过API提供的。

此外,我们添加的另一个功能是,当发生某些事情时,这个警报系统会起作用。比如说,如果VLM的输出为true,我们希望能够创建一个警报。你可能会说:“那边有火。”所以我们做的事情是,将元数据写入我们的监控服务中。我们添加了一些用于创建监控指标的代码,这是通过Prometheus实现的。我们使用的是Prometheus,一个用于监控和警报的开源工具。

然后,AI的第五个部分,这实际上是我们的推理模型所在。所以,它在读取输入,读取图像输入或视频输入。它读取通过API提供的文本,然后生成一些输出,这里的输出基本上是回复。

最后,我们还将所有输出、所有元数据都存储在Redis中。在这种情况下,你希望能够回溯并查看不同的警报、不同的元数据以及生成的内容,你也可以在这里做到。

再次强调,这个六步流程,你可以在自己的感知服务上完成。这不仅仅是一个选项,我们提供了一个配方,你可能已经有了自己的AI,你可以很容易地将其整合进去。

我之前展示给你的另一件事是这是一个提示系统。你可以提供自然语言提示。我们实现警报的方式是提供提示。正如你回忆视频中的内容,我说过“有火吗?”“有烟吗?”所以,这里有一个系统提示的调用,这是我们为所有警报提供的提示,在这个案例中,它表示用户将提供一系列规则,评估这些规则,并以json格式回答是或否。然后,这些是用户提供的规则。所以你获取所有这些,提供你的视频帧,然后将其发送给你的实时模型和输出模型,输出将是一些json,它会说是或否,以及规则的数量。这也是完全可配置的。你可能会有五十条规则,然后它只会打印出基于评估结果的所有不同规则的json。

监控服务实际上就是生成警报的服务。它的工作原理是这样的:监控微服务,正如我前面提到的,它使用的是Prometheus。它的工作原理首先是抓取这些指标,你可以在底部右侧或底部左侧配置它,抓取间隔为1秒。因此,它每秒抓取一次,每秒尝试拉取这些指标。然后在中间部分,是生成警报的部分。这是生成警报的规则。你想用它做什么?你需要采取什么行动。最后一个是通知,你想将通知发送到哪里。在这种情况下,我们将它发送到Amazon SNS,但这可以是任何通知服务。所以获取指标或获取输出,创建警报,采取行动,然后将其发送到其中一个下游服务。

接下来我想谈谈的是这个REST API。我之前提到过,我们为几乎所有的微服务都创建了REST API。从我们的VST视频存储工具包开始,我们有一系列丰富的API,用于执行添加传感器等操作,以及用于检索已添加的传感器列表等操作。你还可以自动扫描传感器。如果你有摄像头,你可以自动扫描传感器,并能够将其流式传输出去或进行WebRTC处理,这非常强大,可以在你的网页浏览器中播放,就像我们在演示中展示的那样,你可以将其流式传输到WebRTC,甚至可以说播放实时视频,或者展示从时间t0到t1的来自传感器1的视频,并可以在WebRTC上进行回放。在生成器方面,我们有提示来更新。如果你在做零样本检测模型,你可以更新要检测的对象是什么,设置阈值,甚至可以说你想要执行哪些警报。查询方面,你还可以提供API请求来生成或使用不同的摄像头流。最后,在分析方面,我还没有谈到我们的分析功能,但分析是我们非常丰富的微服务之一,提供了许多现成的时间序列洞察,比如能够计数对象,能够计数视野中的人数,或者你可以创建虚拟边界,允许你绘制多边形,并计算从时间t0到t1的感兴趣区域内的对象数量,或者你也可以创建一条线,用于测量流入、流出、进入和离开的数据,比如进入的人数、进入的对象数等。所有这些都通过API完成,这就是它的强大之处,使得构建应用程序变得非常容易。

接下来我要简要谈谈使用LLM(语言模型)的概念。我们有一个VL系统,可以在实时视频流上提问,比如发生了什么事情、这个事件是什么时候发生的、有没有火灾等等。但还有一个概念,就是你可能已经收集了大量的数据,并希望用自然语言来提问,比如“这些数据是关于什么的”、“这些箱子里有多少个”等等。为此,我们正在连接一个新的微服务,这个服务可以在Jetson上运行,但也可能在数据中心或云端运行。它的功能是从用户那里获取自然语言提示,并将其转换为API调用,然后发送到我们的API网关。所以,它接收自然语言并将其转换为API调用。我们使用的是rag(retrieve augment generate)模型。在这个案例中,我们提供了一组API,用于将自然语言提示映射到一系列API调用和LLM(大型语言模型)。这基本上就是在向OpenAI或其他任何LLM发起一个API调用。但关键是,这给了你与你的数据进行交流的能力,与你收集的数据进行交互。

假设你提了一个问题,比如“你能总结一下过去三小时内检测到的所有物体吗?”在这个案例中,假设你正在做检测,并将数据存储在你的数据仓库中,你可能已经有一些API来做这件事,但你想要能够对其进行总结。你可以写十个不同的API调用来完成这个任务。但在这个案例中,你只需要写一个问题,它就会为你总结并提供一个非常详细的列表。比如,“这些箱子一直存在”,“叉车”、“托盘”、“人”等。这为你提供了一个高级别的概况,告诉你正在发生什么。你可以说,“嘿,告诉我更多关于托盘的信息,过去三小时内检测到了多少个托盘?”然后它会查询并仅获取托盘的信息。好的,它甚至为你提供了更详细的总结,告诉你所有不同的托盘是在何时被检测到的,或者托盘被检测到的次数。你还可以更具体一些,比如“告诉我这个特定区域的托盘信息”。如果你为特定区域创建了传感器,你可以这样问,或者你也可以提供时间信息。比如,“哪里箱子最多?”也许你想知道什么时候你的某个地方箱子最多。我知道你可以获取你指定区域的信息。告诉我这个区域内,我的分析情况如何?那么,哪个区域的空箱子最多呢?这个想法非常强大,可以解锁很多新的潜力。你实际上不需要编写所有不同的API,甚至不需要知道所有的API调用。它可以自动处理这些。你只需用自然语言提出问题,它就会用自然语言为你提供总结。

总结一下。我们刚才讨论了生成式AI,以及它在视觉领域如何创建强大的应用。生成式AI能够接收视觉信息,接收文本,并生成大量洞见。它使用生成式AI生成丰富的上下文。如果我回到火灾的例子,你不再需要创建四个模型来做一件事,而只需要一个模型。你也不再需要所有这些自定义规则引擎,你甚至都不需要规则引擎了。那么,我们如何实现这一点呢?嗯,我们有微服务。我们创建了云原生、基于微服务的架构,它为你提供了模块化,让你能够快速地构建应用。你可以使用我们提供的一些组件,比如我们之前讨论过的感知服务,但你也可以引入你自己的服务。我们为你提供了指南,教你如何将你自己的微服务插入并使用API。我们相信这将极大地推动你的应用开发。如果你打算构建应用,打算研究生成式AI,我强烈建议你看看我们的微服务或Jetson服务,这些服务将在大约一个月内推出。

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

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

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

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Jetson Services
  • 如何与生成式AI集成
相关产品与服务
云数据库 Redis
腾讯云数据库 Redis(TencentDB for Redis)是腾讯云打造的兼容 Redis 协议的缓存和存储服务。丰富的数据结构能帮助您完成不同类型的业务场景开发。支持主从热备,提供自动容灾切换、数据备份、故障迁移、实例监控、在线扩容、数据回档等全套的数据库服务。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
http://www.vxiaotou.com