GXF App Python API#
节点#
图#
- 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) – 图的新名称。
- 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#
图是否为子图。
- 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_filenames 和 manifest_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#
实体的唯一标识符。
- name: str#
实体的名称。
- qualified_name: str#
实体的限定名称,包括图的名称。
- is_system_entity: bool#
实体是否为系统实体。
- set_system_entity_flag(is_system_entity)#
为实体设置系统实体标志。
- 参数:
is_system_entity (bool) – 实体是否为系统实体。
- activate()#
激活实体及其组件。
- set_params()#
设置实体的组件的参数。
组件#
- 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#
组件的类型。
- params: dict#
组件的参数。
- tid: int#
组件的类型标识符。
- cid: int#
组件的唯一标识符。
- context: int#
与组件的实体关联的上下文。
- validate_params(params)#
验证组件的参数。
- 参数:
params (dict) – 要验证的参数。
- Returns:
如果参数有效,则为 True,否则为 False。
- Return type:
bool
- set_param(param, value)#
设置组件的参数。
- 参数:
param (str) – 要设置的参数。
value – 要为参数设置的值。
- Raises:
ValueError – 如果未找到参数。
- get_param(param)#
获取组件参数的值。
- 参数:
param (str) – 要获取的参数。
- Returns:
参数的值。
- Raises:
ValueError – 如果未找到参数。
- set_params()#
设置组件的参数。
实体组#
ComputeEntity#
- class ComputeEntity(Entity)#
Compute Entity 在图中添加一个实体,其中包含基本的调度术语。可以添加代码小组件以插入自定义用户代码。
- __init__(
- self,
- name: str = '',
- count: int = -1,
- recess_period: int = 0,
- **kwargs,
初始化 ComputeEntity 对象。
如果
count >= 0
,添加带有参数count
的 CountSchedulingTerm;如果
recess_period > 0
,添加带有参数recess_period
的 PeriodicSchedulingTerm;- 参数:
name (str) – 计算实体的名称。
count (int) – PeriodicSchedulingTerm 的
count
参数。值为 -1 表示实体可以无限期执行。recess_period (int) – PeriodicSchedulingTerm 的
recess_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,
向计算实体添加一个 codelet;
如果 codelet 参数具有
nvidia::gxf::Transmitter
,则自动添加 Transmitter 队列 DoubleBufferTransmitter 和 DownstreamReceptiveSchedulingTerm;如果 codelet 参数具有
nvidia::gxf::Receiver
,则自动添加 Receiver 队列 DoubleBufferReceiver 和 MessageAvailableSchedulingTerm。- 参数:
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:
PyComputeEntity#
- class PyComputeEntity(Entity)#
包含以 Python 实现的 codelet 的计算实体。它在图中添加一个具有基本调度项的实体。可以添加以 Python 实现的 codelet。
- __init__(
- self,
- name: str = '',
- count: int = 100,
- recess_period: int = 0,
- **kwargs,
初始化 PyComputeEntity 对象。
如果
count >= 0
,添加带有参数count
的 CountSchedulingTerm;如果
recess_period > 0
,添加带有参数recess_period
的 PeriodicSchedulingTerm;- 参数:
name (str) – 实体的名称。
count (int) – PeriodicSchedulingTerm 的
count
参数。值为 -1 表示实体可以无限期执行。recess_period (int) – PeriodicSchedulingTerm 的
recess_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,
向 Python 计算实体添加以 Python 实现的 codelet;
如果 codelet 参数具有
nvidia::gxf::Transmitter
,则自动添加 Transmitter 队列 DoubleBufferTransmitter 和 DownstreamReceptiveSchedulingTerm;如果 codelet 参数具有
nvidia::gxf::Receiver
,则自动添加 Receiver 队列 DoubleBufferReceiver 和 MessageAvailableSchedulingTerm。- 参数:
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:
standard_methods#
- connect(src: Component, target: Component, graph: Graph = None)#
- 模块:
gxf.std.standard_methods
连接图中的两个队列组件。
- enable_job_statistics(
- g: Graph,
- name: str = '__job_stats',
- **kwargs,
- 模块:
gxf.std.standard_methods
向图中添加 JobStatistics。
- 参数:
g (Graph) – 要启用作业统计信息的图。
name (str) – JobStatistics 的名称。
**kwargs – 要传递给 JobStatistics 的其他关键字参数。
- Returns:
添加的 JobStatistics。
- Return type:
- set_scheduler(g: Graph, sch: Component) Component #
- 模块:
gxf.std.standard_methods
将 Scheduler 组件设置为图。
- set_clock(g: Graph, clock: Component) Component #
- 模块:
gxf.std.standard_methods
将时钟组件设置为图,以便图中需要时钟的组件可以使用该时钟。
- 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:
从各种其他深度学习框架创建新的 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:
从支持 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)#
- static get_from_entity(entity, name=None)#
- 参数:
entity – 要从中检索 Tensor 的 Entity。
name (str, optional) – Entity 中 Tensor 组件的名称。
- Returns:
从 Entity 检索的 Tensor 实例。
- Return type:
从 Entity 获取 Tensor。