请问pgl支持paddle2.0吗?
看了一下paddle2.0的介绍,弱化了lodtensor的概念,相关的一些api比如sequence_pool也不能使用了,升级到2.0后要怎么使用pgl呢?
目前pgl已经支持paddle2.0了,可以看分支 pgl-2.0.0a 后续会合入主干,或者pip install pgl==2.0.0a。 目前还是试验性阶段,我们sequence_pool已经用segment系列op代替了。
我们的图卷积操作等,也基本全部动态化了。
引用网络GCN/GAT/APPNP/GCNII/SGC 例子可以看
https://github.com/PaddlePaddle/PGL/tree/pgl-2.0.0a/examples/citation_benchmark
pgl2.0的主要改动如下:
- 因为是Paddle2.0是动态图了,为了进一步简化使用,我们将GraphWrapper的概念去掉了,目前可以直接在Graph上进行Send/Recv。
- 在pgl 2.0的recv函数的输入将会是一个Message类来代替原来的LodTensor,一个简单的例子如下
import pgl
import paddle
def send_func(src_feat, dst_feat, edge_feat):
return { "h": src_feat["h"] }
def recv_func(msg):
return msg.reduce_sum(msg["h"])
edges = ...
node_feat = ...
num_nodes = ...
graph = pgl.Graph(num_nodes=num_nodes,
edges=edges,
node_feat = { "h": node_feat} )
graph.tensor()
msg = graph.send(send_func, src_feat={ "h" : graph.node_feat["h"]})
output = graph.recv(recv_func, msg)
pgl2.0的主要改动如下:
- 因为是Paddle2.0是动态图了,为了进一步简化使用,我们将GraphWrapper的概念去掉了,目前可以直接在Graph上进行Send/Recv。
- 在pgl 2.0的recv函数的输入将会是一个Message类来代替原来的LodTensor,一个简单的例子如下
import pgl import paddle def send_func(src_feat, dst_feat, edge_feat): return { "h": src_feat["h"] } def recv_func(msg): return msg.reduce_sum(msg["h"]) edges = ... node_feat = ... num_nodes = ... graph = pgl.Graph(num_nodes=num_nodes, edges=edges, node_feat = { "h": node_feat} ) graph.tensor() msg = graph.send(send_func, src_feat={ "h" : graph.node_feat["h"]}) output = graph.recv(recv_func, msg)
谢谢,请问这个message类和原来的LodTensor的性能对比如何呢?
我们在GCN/GAT/APPNP 这些模型都测过,基本持平。在动态图上面,少了一些显存交换,跑起来速度甚至更快。
我们在GCN/GAT/APPNP 这些模型都测过,基本持平。在动态图上面,少了一些显存交换,跑起来速度甚至更快。
emm,那请问在2.0版本里,面对复杂的用户自定义函数,pgl仍然能能够达到DGL的13倍的运行速度吗?
这个可能暂时不行,2.0版本现在还没完善。
不知道动态图支持的pgl2版本的文档何时能够更新
https://pgl.readthedocs.io/en/latest/api/heter_graph.html#
现在latest底下已经是pgl 2.0的文档了。