GXF App Python API#

节点#

class Node(ABC)#

Graph、Entity、EntityGroup 的抽象基类

abstract activate()#

激活节点及其组件。

abstract set_params()#

设置节点及其组件的参数。

#

class Graph(Node)#

包装 nvidia::gxf::Graph 的 Python 类。

__init__(name: str = '')#

初始化 Graph 对象。

参数:

name (str) – 图的名称。

context: int#

与图关联的上下文。如果图是子图,则返回父级的上下文。

name: str#

图的名称。

qualified_name: str#

图的限定名称,包括父级的名称(如果图是子图)。

set_name(value)#

设置图的名称。

参数:

value (str) – 图的新名称。

parent: Graph#

父图,如果当前图是子图。

set_parent(value)#

设置父图,使当前图成为子图。

参数:

value (Graph) – 父图。

aliases: dict#

图中组件别名的字典。

update_alias(alias, value)#

更新别名的值。

参数:
  • alias (str) – 要更新的别名。

  • value – 别名的新值。

Raises:

ValueError – 如果未设置别名。

set_params()#

设置图的参数。

get(alias)#

获取别名的值。

参数:

alias (str) – 要检索的别名。

Returns:

与别名关联的值。

Raises:

ValueError – 如果别名未标记为可见。

make_visible(alias, component)#

将组件标记为可见并使用别名。

参数:
  • alias (str) – 要与组件关联的别名。

  • component – 要使其可见的组件。

Raises:

RuntimeError – 如果别名已存在。

is_subgraph: bool#

图是否为子图。

as_subgraph_of(parent)#

使当前图成为给定父图的子图。

参数:

parent (Graph) – 父图。

activate()#

激活图及其组件。

add(node)#

将节点(Entity、EntityGroup 或 Graph)添加到图中。

参数:

node (Entity, EntityGroup, 或 Graph) – 要添加的节点。

Returns:

添加的节点。

Raises:

RuntimeError – 如果不支持节点类型。

load_extensions(
extension_filenames=None,
manifest_files=None,
workspace='',
)#

为图加载 GXF 扩展。

  • 使用环境变量 GXF_WORKSPACE 作为 workspace

  • 如果未传递 extension_filenamesmanifest_files,则根据图中使用的扩展生成 extension_filenames

参数:
  • extension_filenames (list, optional) – 扩展库文件路径列表(.so 文件)

  • manifest_files (list, optional) – Manifest 文件路径列表。

  • workspace (str, optional) – 扩展和 Manifest 的基本目录。

set_severity(log_level=logging.INFO)#

设置 GXF 日志记录的严重级别。

参数:

log_level (optional, int来自 python logging 包的以上枚举) –

要设置的日志记录级别。可以是以下之一

  • logging.NOTSET (0): 无日志记录。

  • logging.ERROR (40): 仅记录错误消息。

  • logging.WARN (30): 记录警告和错误消息。

  • logging.INFO (20): 记录信息、警告和错误消息。

  • logging.DEBUG (10): 记录调试、信息、警告和错误消息。

  • "VERBOSE" (5): 记录所有消息,包括详细调试消息。

Raises:

RuntimeError – 如果提供了不正确的日志级别。

run()#

运行图。

run_async()#

异步运行图。

interrupt()#

中断图。

wait()#

等待图完成。

destroy()#

销毁图及其上下文。

save(filename)#

将图保存到文件。

参数:

filename (str) – 保存图文件的路径。

实体#

class Entity(Node)#

包装 nvidia::gxf::Entity 的实体类。

__init__(name: str = '', is_system_entity: bool = False)#

初始化 Entity 对象。

参数:
  • name (str) – 实体的名称。

  • is_system_entity (bool) – 实体是否为系统实体。

context: int#

与实体的图关联的上下文。

components: list#

与实体关联的组件列表。

named_components: dict#

与实体关联的命名组件字典。

eid: int#

实体的唯一标识符。

set_graph(value)#

设置与实体关联的图。

参数:

value (Graph) – 图。

name: str#

实体的名称。

qualified_name: str#

实体的限定名称,包括图的名称。

is_system_entity: bool#

实体是否为系统实体。

set_system_entity_flag(is_system_entity)#

为实体设置系统实体标志。

参数:

is_system_entity (bool) – 实体是否为系统实体。

activate()#

激活实体及其组件。

set_params()#

设置实体的组件的参数。

add(component, visible_as=None)#

向实体添加组件。

参数:
  • component (Component) – 要添加的组件。

  • visible_as (str, optional) – 使组件在图中可见的别名。

Returns:

添加的组件。

Raises:

Exception – 如果输入不是 Component 对象。

组件#

class Component#

组件的基类。来自不同扩展的每个组件都继承此类,并覆盖

  • gxf_native_type 为其完全限定的 C++ 类型名称

  • _validation_info_parameters 为其参数信息

gxf_native_type: str#

要由子完全限定的 C++ 类型名称覆盖的基类变量。

_validation_info_parameters: dict#

要由子参数信息覆盖的基类变量。

__init__(type, name, **params)#

初始化 Component 对象。

参数:
  • type (str) – 组件的类型。

  • name (str) – 组件的名称。

  • params (dict) – 组件的参数。

classmethod get_gxf_type()#

获取组件的本机 GXF 类型。

Returns:

本机 GXF 类型。

Return type:

str

name: str#

组件的名称。

type: str#

组件的类型。

entity: Entity#

与组件关联的实体。

params: dict#

组件的参数。

tid: int#

组件的类型标识符。

cid: int#

组件的唯一标识符。

context: int#

与组件的实体关联的上下文。

add_to(entity)#

将组件添加到实体。

参数:

entity (Entity) – 要将组件添加到的实体。

validate_params(params)#

验证组件的参数。

参数:

params (dict) – 要验证的参数。

Returns:

如果参数有效,则为 True,否则为 False。

Return type:

bool

set_entity(entity)#

设置与组件关联的实体。

参数:

entity (Entity) – 要与组件关联的实体。

Raises:

RuntimeError – 如果组件已与实体关联。

set_param(param, value)#

设置组件的参数。

参数:
  • param (str) – 要设置的参数。

  • value – 要为参数设置的值。

Raises:

ValueError – 如果未找到参数。

get_param(param)#

获取组件参数的值。

参数:

param (str) – 要获取的参数。

Returns:

参数的值。

Raises:

ValueError – 如果未找到参数。

set_params()#

设置组件的参数。

实体组#

class EntityGroup(Node)#

包装 nvidia::gxf::Entity 的实体组类。

__init__(name: str = '')#

初始化 EntityGroup 对象。

参数:

name (str) – 实体组的名称。

graph: Graph#

与实体组关联的图。

set_graph(value)#

设置与实体组关联的图。

参数:

value (Graph) – 图。

context: int#

与实体组的图关联的上下文。

name: str#

实体组的名称。

qualified_name: str#

实体组的限定名称,包括图的名称。

add(entities)#

向组添加实体。

参数:

entities (EntityEntities 的可迭代对象) – 要添加的实体。

activate()#

激活实体组及其实体。

set_params()#

设置实体组的参数。

ComputeEntity#

class ComputeEntity(Entity)#

Compute Entity 在图中添加一个实体,其中包含基本的调度术语。可以添加代码小组件以插入自定义用户代码。

__init__(
self,
name: str = '',
count: int = -1,
recess_period: int = 0,
**kwargs,
)#

初始化 ComputeEntity 对象。

如果 count >= 0,添加带有参数 countCountSchedulingTerm

如果 recess_period > 0,添加带有参数 recess_periodPeriodicSchedulingTerm

参数:
  • name (str) – 计算实体的名称。

  • count (int) – PeriodicSchedulingTermcount 参数。值为 -1 表示实体可以无限期执行。

  • recess_period (int) – PeriodicSchedulingTermrecess_period 参数。实体被允许执行前的纳秒持续时间。

  • **kwargs – 要传递给实体的其他关键字参数。

_recess_period: int#
_count: int#
_kwargs: dict#
add_codelet(
self,
codelet,
min_message_available=1,
min_message_reception=1,
rx_capacity: int = 1,
tx_capacity: int = 1,
) Component#

向计算实体添加一个 codelet;

如果 codelet 参数具有 nvidia::gxf::Transmitter,则自动添加 Transmitter 队列 DoubleBufferTransmitterDownstreamReceptiveSchedulingTerm

如果 codelet 参数具有 nvidia::gxf::Receiver,则自动添加 Receiver 队列 DoubleBufferReceiverMessageAvailableSchedulingTerm

参数:
  • codelet (Component) – 要添加到计算实体的 codelet。

  • min_message_available (int) – 接收器队列接收到的最少消息数,只有这样才允许 codelet 执行。如果 codelet 没有接收器参数,则跳过。

  • min_message_reception (int) – 发射器队列可以发送到下游的最少消息数,只有这样才允许 codelet 执行。如果 codelet 没有发射器参数,则跳过。

  • rx_capacity (int) – 接收器队列中允许的最大消息数。如果 codelet 没有接收器参数,则跳过。

  • tx_capacity (int) – 发射器队列中允许的最大消息数。如果 codelet 没有发射器参数,则跳过。

Returns:

添加的 codelet。

Return type:

Component

PyComputeEntity#

class PyComputeEntity(Entity)#

包含以 Python 实现的 codelet 的计算实体。它在图中添加一个具有基本调度项的实体。可以添加以 Python 实现的 codelet。

__init__(
self,
name: str = '',
count: int = 100,
recess_period: int = 0,
**kwargs,
)#

初始化 PyComputeEntity 对象。

如果 count >= 0,添加带有参数 countCountSchedulingTerm

如果 recess_period > 0,添加带有参数 recess_periodPeriodicSchedulingTerm

参数:
  • name (str) – 实体的名称。

  • count (int) – PeriodicSchedulingTermcount 参数。值为 -1 表示实体可以无限期执行。

  • recess_period (int) – PeriodicSchedulingTermrecess_period 参数。实体被允许执行前的纳秒持续时间。

  • **kwargs – 要传递给实体的其他关键字参数。

_recess_period: int#
_count: int#
_kwargs: dict#
add_codelet(
self,
name,
codelet,
min_message_available=1,
min_message_reception=1,
rx_capacity: int = 1,
tx_capacity: int = 1,
**params,
) Component#

向 Python 计算实体添加以 Python 实现的 codelet;

如果 codelet 参数具有 nvidia::gxf::Transmitter,则自动添加 Transmitter 队列 DoubleBufferTransmitterDownstreamReceptiveSchedulingTerm

如果 codelet 参数具有 nvidia::gxf::Receiver,则自动添加 Receiver 队列 DoubleBufferReceiverMessageAvailableSchedulingTerm

参数:
  • name (str) – Python codelet 的名称。

  • codelet (Component) – 要添加到计算实体的 Python codelet。

  • min_message_available (int) – 接收器队列接收到的最少消息数,只有这样才允许 codelet 执行。如果 codelet 没有接收器参数,则跳过。

  • min_message_reception (int) – 发射器队列可以发送到下游的最少消息数,只有这样才允许 codelet 执行。如果 codelet 没有发射器参数,则跳过。

  • rx_capacity (int) – 接收器队列中允许的最大消息数。如果 codelet 没有接收器参数,则跳过。

  • tx_capacity (int) – 发射器队列中允许的最大消息数。如果 codelet 没有发射器参数,则跳过。

Returns:

添加的 Python codelet。

Return type:

Component

standard_methods#

connect(src: Component, target: Component, graph: Graph = None)#
模块:

gxf.std.standard_methods

连接图中的两个队列组件。

参数:
  • src (Component) – 源队列组件。

  • src – 目标队列组件。

  • graph (Graph) – 包含上述两个组件的图。

enable_job_statistics(
g: Graph,
name: str = '__job_stats',
**kwargs,
) Component#
模块:

gxf.std.standard_methods

向图中添加 JobStatistics

参数:
  • g (Graph) – 要启用作业统计信息的图。

  • name (str) – JobStatistics 的名称。

  • **kwargs – 要传递给 JobStatistics 的其他关键字参数。

Returns:

添加的 JobStatistics

Return type:

Component

set_scheduler(g: Graph, sch: Component) Component#
模块:

gxf.std.standard_methods

Scheduler 组件设置为图。

参数:
Returns:

添加的 Scheduler

Return type:

Component

set_clock(g: Graph, clock: Component) Component#
模块:

gxf.std.standard_methods

将时钟组件设置为图,以便图中需要时钟的组件可以使用该时钟。

参数:
  • g (Graph) – 要设置时钟的图。

  • clock (Component) – 要设置到图的时钟。

Returns:

添加的时钟。

Return type:

Component

GXF_NAME_EXTRA_LENGTH = 7
模块:

gxf.std.standard_methods

_generate_name(base_name, extra_length=GXF_NAME_EXTRA_LENGTH)#
模块:

gxf.std.standard_methods

生成一个随机名称,以 base_name 为前缀,{base_name}_*

参数:
  • base_name (str) – 名称前缀。

  • extra_length (int) – 后缀的长度。

Returns:

生成的随机名称。

Return type:

str

class Tensor#

Tensor 类表示相同数据类型元素的多维数组。

已实现的协议:* DLPack * array_interface 和 cuda_array_interface

__init__()#

构造一个新的空 Tensor

static as_tensor(obj)#
参数:

obj (object) – 要转换为 GXF Tensor 的输入对象。

Returns:

一个新的 Tensor 实例,使用来自输入对象的数据初始化,零拷贝。

Return type:

Tensor

从各种其他深度学习框架创建新的 GXF Tensor 实例,如果 Tensor 对象支持 DLPack 协议、NumPy 的数组接口协议或 CUDA 数组接口协议,则进行数据零拷贝。

示例

>>> import numpy as np
>>> arr = np.random.rand(3, 4)
>>> from gxf.std import Tensor
>>> tensor = Tensor.as_tensor(arr)
static from_dlpack(obj)#
参数:

obj (object) – 支持 DLPack 协议的对象。

Returns:

一个新的 Tensor 实例,使用来自输入 DLPack 对象的数据初始化,零拷贝。

Return type:

Tensor

从支持 DLPack 协议的对象创建一个新的 Tensor 实例。

示例

>>> import numpy as np
>>> arr = np.random.rand(3, 4)
>>> from gxf.std import Tensor
>>> tensor = Tensor.from_dlpack(arr)
__dlpack__(stream=None)#
参数:

stream (object) – 用于 DLPack 协议的可选流对象,封装 CUDA 流。

Returns:

一个 PyCapsule 对象,封装 Tensor 的 DLPack 表示。

__dlpack_device__()#
Returns:

一个 PyCapsule 对象,封装 Tensor 的 DLPack 设备表示。

get_tensor_info()#
Returns:

一个元组,包含有关 Tensor 的信息(指针、大小、数据类型、秩、维度和步幅)。

以元组格式获取有关 Tensor 的详细信息。

shape()#
Returns:

Tensor 的形状。

Return type:

形状

获取 Tensor 的形状。

element_type()#
Returns:

Tensor 的元素数据类型。

Return type:

PrimitiveType

获取 Tensor 的元素数据类型。

storage_type()#
Returns:

Tensor 的存储类型(kHost 或 kDevice 或 kSystem)。

Return type:

MemoryStorageType

获取 Tensor 的存储类型。

reshape(tensor_description, allocator)#
参数:
  • tensor_description (gxf.std.TensorDescription) – 一个 TensorDescription 对象,描述新的形状和数据类型。

  • allocator (Allocator) – 用于内存分配的 Allocator 实例。

根据提供的 TensorDescription 重塑 Tensor

reshape_custom(
shape,
element_type,
bytes_per_element,
strides,
storage_type,
allocator,
)#
参数:
  • shape (gxf.std.Shape) – Tensor 的新形状。

  • element_type (gxf.std.PrimitiveType) – Tensor 的新元素数据类型。

  • bytes_per_element (int) – 新数据类型中每个元素的字节数。

  • strides (list[int]) – 新形状的步幅。

  • storage_type (gxf.std.MemoryStorageType) – Tensor 的新存储类型(主机或设备)。

  • allocator (Allocator) – 用于内存分配的 Allocator 实例。

使用自定义参数重塑 Tensor

get_tensor_description()#
Returns:

一个 TensorDescription 对象,描述当前的 Tensor

Return type:

gxf.std.TensorDescription

获取一个 TensorDescription 对象,描述当前的 Tensor

static add_to_entity(entity, tensor=None, name=None)#
参数:
  • entity – 应该向其添加 TensorEntity

  • tensor (Tensor, optional) – 要添加到 Entity 的可选 Tensor 实例。如果未提供,将创建一个新的空 Tensor

  • name (str, optional) – EntityTensor 组件的可选名称。

Returns:

添加到 EntityTensor 实例。

Return type:

Tensor

static get_from_entity(entity, name=None)#
参数:
  • entity – 要从中检索 TensorEntity

  • name (str, optional) – EntityTensor 组件的名称。

Returns:

Entity 检索的 Tensor 实例。

Return type:

Tensor

Entity 获取 Tensor

find_all_from_entity(entity)#
参数:

entity – 要从中检索所有 Tensor 实例的 Entity

Returns:

Entity 检索的 Tensor 实例列表。

Return type:

list[Tensor]

查找 Entity 中的所有 Tensor 实例。