概述#

Graph Composer 是一个工具套件,旨在帮助用户构建和部署从边缘到云的高性能和低延迟 AI 应用程序。这些应用程序可以使用丰富的 C++ 或 Python API 以及 GUI 环境创建。这些 API 和工具基于 GXF GXF (Graph eXecution Format) 的核心原则,为开发人员轻松创建和部署 AI 应用程序提供了完整的生态系统。

GXF Stack

概念#

GXF (Graph eXecution Format)#

GXF 规范遵循实体-组件设计模式,实现“组合优于继承”的范例。实体本身只是一个拥有组件的轻量级对象。组件定义了实体如何与应用程序的其余部分交互。

GXF 规范包含五个方面

  • 使用可扩展的实体-组件架构计算图的定义

  • 允许开发人员将代码和数据附加到计算图的 API 定义

  • 调度规则以及源和接收器之间的数据流规范

  • 用于将计算图存储在文件中的文件格式描述

  • 运行时生成的分析、监控和调试信息列表

GXF 框架通过以下方式简化应用程序开发流程

  • 通过最小的集成开销实现开发人员之间的代码重用

  • 建立具有自定义挂钩/接口的通用流媒体数据类型

  • 一个丰富的工具套件,可帮助分析、调试、优化和部署高性能 AI 应用程序

GXF Overview

#

图是 AI 应用程序的数据驱动表示。使用编程代码创建和链接对象来实现应用程序会导致程序变得单体且难以维护。相反,使用图对象来构建应用程序。可以使用专用工具创建图,并且可以对其进行分析以识别潜在问题或性能瓶颈。图由 GXF 运行时加载以执行。

图的功能块由图拥有的节点集定义。可以使用特定的查询函数通过图查询节点。例如,可以按名称搜索节点。

节点#

GXF 对节点使用实体-组件设计原则,GXF 计算节点是一个 GXF 实体。这意味着节点是一个轻量级对象,其主要目的是拥有组件。节点是组件的组合。组件是定义节点方面和行为的“事物”。为了自定义 GXF 节点,开发人员不是从节点派生作为基类,而是从组件中组合对象。组件可用于为节点以及应用程序提供丰富的功能集。

图中的每个节点都是唯一可识别的,如有关对象标识的部分中更详细的描述。

组件#

组件是应用程序的主要功能块。GXF 提供了一些标准组件,例如发射器、接收器、代码小部件、子图。GXF 还允许开发人员通过注入具有自定义功能的自定义组件来扩展 GXF 运行时,以适应特定的用例。

代码小部件#

最常见的组件是代码小部件,它用于数据处理和代码执行。为了实现自定义代码小部件,开发人员需要实现一组特定的函数,例如 start 和 stop。一个名为调度器的特殊系统 - The GXF Scheduler - 将在开发人员指定的时间调用这些函数。触发代码执行的典型示例包括:从另一个节点接收新消息,或根据时间触发器按计划执行工作。

子图#

子图允许节点包装整个图,并将其视为子处理单元。这样的子图极大地帮助提高了应用程序的模块化,并允许跨应用程序重用计算图。子图的内部结构对外界是不透明的,并且它可以采用自己的调度器。

系统#

系统用于创建、管理和销毁组件。GXF 提供的标准系统示例包括:贪婪调度器、多线程调度器、基于事件的调度器、GraphWorker、GraphDriver。

边/连接#

GXF 数据流边是 GXF 实体。因此,边是 (edge) 组件的轻量级、唯一可识别的容器。默认情况下,每个边都有一个 DirectedEdge 组件,用于存储源和目标。默认情况下,计算图的所有边都由 MessageRouter 管理。开发人员可以将自定义 (edge) 组件和 (edge) 系统注入到 GXE 中。

消息#

GXF 消息是一个实体。因此,消息是 (message) 组件的轻量级、唯一可识别的容器。标准消息组件包括:Header、Checksum、GPU Buffer、CPU Buffer。典型的消息系统是处理缓冲区分配的数据池。GXE 提供的标准消息系统包括:GPU Buffer Pool、CPU Buffer Pool。开发人员可以将自定义 (message) 组件和 (message) 系统注入到 GXE 中。

扩展#

扩展是组件类型定义及其实现以及组件执行所需的任何其他资产文件的逻辑组的编译共享库。资产文件的一些示例包括模型文件、扩展库链接到的共享库(因此需要运行)、头文件和开发文件(用于开发使用扩展组件的其他组件和扩展)。

扩展库是一个运行时可加载模块,它使用标准格式的组件信息进行编译,允许图运行时加载扩展并从中检索更多信息以

  • 允许运行时使用扩展中的组件类型创建组件。

  • 查询有关扩展中组件类型的信息

    • 组件类型名称

    • 组件的基本类型

    • 组件的字符串描述

    • 组件参数的信息 – 参数名称、类型、描述等。

  • 查询有关扩展本身的信息 - 扩展的名称、版本、许可证、作者和扩展的字符串描述。

扩展开发工作流程 部分更多地讨论了这一点,重点是开发扩展和组件。

图执行引擎 (GXE)#

GXE 接受一个应用程序文件,其中列出了 GXF 组件,以及一个包含依赖扩展的清单文件。GXE 加载图和依赖扩展,并激活应用程序文件中定义的所有实体。以下是描述 GXE 功能的步骤。

  • 创建 GXF 上下文

  • 加载包含 GXF 扩展的清单文件

  • 加载包含 GXF 实体及其连接的应用程序文件

  • 激活实体

  • 等待图完成

  • 销毁 GXF 上下文

工具#

Graph Composer#

Composer 是一款 GUI 应用程序,旨在通过易于使用的图形界面创建 AI 应用程序管道,从而显着降低应用程序开发的复杂性,并缩短上市时间。

Composer 基于 https://docs.omniverse.nvidia.com/ Kit,该工具包提供高度响应的硬件加速 GUI。

Graph Composer Launch Window

Registry#

Registry 是 Graph Composer 生态系统不可或缺的一部分,负责在扩展和工具之间提供统一的接口。可以使用 registry CLI 访问 Registry 服务。

Container Builder#

Container Builder (CB) 用于为使用 Composer 创建的 AI 应用程序图构建 Docker 镜像。除了 Docker 镜像外,它还可以将最终镜像推送到云端进行部署。

Container Builder 与 Registry 交互以:

  • 将扩展和其他相关文件下载到本地系统。

  • 复制配置文件中指定的其他必需文件,以生成中间工作文件夹和优化的 Dockerfile。

  • 将存档/软件包依赖项和指令转换为 Docker,并尝试构建最小尺寸的本地镜像。为了进行优化,您可以轻松配置 Container Builder 以支持多阶段 Docker 构建。

Container Builder

Container Builder 支持在 x86 Ubuntu 系统上安装图和构建容器镜像。它还可以从 x86_64 平台构建 arm64 镜像 - 为此,您需要安装 QEMU 和 bintutils。此外,CB 工具现在可以构建多架构镜像,前提是用户需要指定一个远程 Docker 仓库,以便可以将镜像推送到该仓库。

GXF 服务器#

GXF 服务器是一个 grpc 服务器,它集成了多个工具,包括 registry 和 container builder,并为各种命令行工具(如 container builder cli 和 graph composer)提供服务。

gxf 服务器在安装 graph composer debian 时自动启动。服务器启动时使用 50051 作为默认端口。用户可以在运行服务器之前通过设置环境变量 GXF_SERVER_PORT 来更改此端口。

GXF CLI#

GXF CLI 工具用于远程连接 GXF 运行时,以进行监控或配置任务。

工作流程#

Graph Composer 工作流程支持使用来自不同贡献者的扩展以及自定义扩展开发来开发 AI 应用程序。它们使 AI 应用程序开发人员能够使用基于 GUI 的工具创建应用程序,并使用 Container Builder 工具部署它们,而无需开发任何代码。它为不同的硬件平台提供了 NVIDIA 优化扩展的中央存储库。

Graph Composer overview