桨叶图学习
pgl的Python项目详细描述
桨叶图学习(PGL)
桨图学习(PGL)是一种基于^ {A3}的高效灵活的图形学习框架。
我们提供了用于存储/读取/查询图形结构数据的python接口和两个基本的计算接口,这两个接口分别是基于行走的和基于消息传递的,如上述pgl框架所示,用于构建尖端的图形学习算法。结合桨叶深度学习框架,我们能够同时支持图表示学习模型和图神经网络,因此我们的框架具有广泛的基于图的应用。
H2>亮点:高效灵活的消息传递范式与其他模型相比,图神经网络最重要的优点之一是能够使用节点间的连接信息,但是对节点间的通信进行编码是非常麻烦的。在pgl中,我们采用类似于DGL的消息传递范式来帮助轻松地构建定制图神经网络。用户只需编写send
和recv
函数就可以轻松实现一个简单的gcn。如下图所示,第一步在图的边缘定义send函数,用户可以自定义send函数$\phi^e$将消息从源节点发送到目标节点。第二步,recv函数$\phi^v$负责将来自不同来源的$\oplus$消息聚合在一起。
如下图左侧所示,为了适应一般用户定义的消息聚合函数,DGL使用degree bucketing方法将具有相同degree的节点组合到一个批中,然后对每个批依次应用聚合函数$\oplus$。对于pgl udf聚合函数,我们将消息组织为PaddlePaddle中的LodTensor,将消息作为可变长度序列。我们利用桨叶中lodtensor的特性获得快速的并行聚集。
用户只需调用paddle提供的sequence_ops
函数就可以轻松实现高效的消息聚合。例如,使用sequence_pool
对邻居消息求和。
importpaddle.fluidasfluiddefrecv(msg):returnfluid.layers.sequence_pool(msg,"sum")
虽然dgl对一般和函数、max函数和其他具有散点集的聚合函数进行了核融合优化。对于复杂的用户定义函数使用度桶算法,每个度桶的串行执行不能充分利用gpu提供的性能改进。然而,基于pgl lodtensor的消息操作是并行执行的,这可以充分利用gpu并行优化。即使没有散射道集优化,pgl仍然具有优异的性能。当然,我们仍然提供内置的分散优化消息聚合功能。
性能
我们用tesla v100-sxm2-16g对所有gnn算法进行了200个阶段的测试,得到了平均速度。在不提前停止的情况下,我们报告了测试数据集的准确性。
Dataset | Model | PGL Accuracy | PGL speed (epoch time) | DGL speed (epoch time) |
---|---|---|---|---|
Cora | GCN | 81.75% | 0.0047s | 0.0045s |
Cora | GAT | 83.5% | 0.0119s | 0.0141s |
Pubmed | GCN | 79.2% | 0.0049s | 0.0051s |
Pubmed | GAT | 77% | 0.0193s | 0.0144s |
Citeseer | GCN | 70.2% | 0.0045 | 0.0046s |
Citeseer | GAT | 68.8% | 0.0124s | 0.0139s |
系统要求
PGL要求:
- 桨>;=1.5
- 网络x
pgl同时支持python 2&3
安装
pip安装pgl
团队
pgl是由百度的nlp和paddle团队开发和维护的
许可证
pgl使用apache许可证2.0。