pylibcugraphops - GPU图神经网络操作
项目描述
pylibcugraphops
pylibcugraphops 是对 cugraph-ops 的封装,并为 cugraph-ops 的自定义图操作提供框架无关和轻量级的 Python 绑定。有关实现的详细功能信息,请查阅相应的文档。
结构
在结构方面,这些绑定在一定程度上遵循 cugraph-ops 的指南。主要区别在于 pylibcugraphops 更加专注于提供合理的子模块,因此整体结构相对平坦。核心功能放置在 pylibcugraphops.operators
下,类似于 C++ API 中的 <cugraph-ops/operators>
命名空间。这包括基本的聚合操作员(例如用于 GraphSAGE),专用操作员(例如用于 RGCN),以及执行类似于池操作的运算符(例如从图到标量的聚合操作)。虽然 C++ API 在消息流图和其他可以通过 CSC 表示的图类型之间有进一步的区分,但 pylibcugraphops.operators
保持为扁平的子模块,函数名称进行区分。
命名约定
公开操作符和相应文件的名称应易于理解,以便提供所有相关特征的简单概述。因此,我们采用以下操作符命名约定。
<operator family>_<graph type>_<"direction">_(<operator specification>_)<[fwd|bwd|bwd_rev|...]
示例
agg_simple_csc_bwd
pool_csc_n2s_bwd
agg_hg_basis_mfg_n2n_post_bwd
通过重载支持不同的数据类型,因此通常不是操作符名称的显式部分。
各个部分的说明
<operator family>
表示底层操作符,我们目前有agg_simple
:执行指定集合的平均/总和/最小/最大减少的基本聚合器agg_concat
:类似于agg_simple
,但还额外连接每个集合成员的自我表示agg_dmpnn
:实现了 DMPNN 边到边的聚合pool
:求和/平均值/最小值/最大值池化,例如节点到标量的读出hg_basis
:使用不同边类型进行异构聚合,可能使用基分解mha_gat
:多头注意力聚合,在这种情况下是 GAT 作为特定变体
<graph type>
:操作符预期的图类型csc
:图的简单 CSC 表示bipartite
:二分图的简单 CSC 表示mfg
:消息流图
<"direction">
:为了更容易了解我们已有的操作符,多个方向通过下划线组合和分隔(例如e2n_n2n
)n2n
:节点到节点(基本聚合)e2n
:边到节点e2e
:边到边n2s
:节点到标量
<operator specification>
:一些操作符定义了不同的“风味”,例如hg_basis
操作符的“前”和“后”变体
函数签名
应使用以下模式
func(output_vector_arg_0, ..., output_vector_arg_n,
input_vector_arg_0, ..., input_vector_arg_n,
graph_structure_arg_0, ..., graph_structure_arg_n,
*args,
**kwargs,
cuda_stream=None)
*args
:对func
必要的参数,但既不是缓冲区也不是图结构**kwargs
:可选参数或具有默认值的参数- 如果适用且默认,则
cuda_stream
应为绑定中的最后一个参数
RGCN(hg_basis_pre)的示例
def agg_hg_basis_mfg_n2n_pre_bwd(output_gradient,
input_gradient,
input_embedding,
message_flow_graph_hg_csc_int32 graph,
output_weight_gradient=None,
weights_combination=None,
concat_own=False,
norm_by_degree=False,
cuda_stream=None):