Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
PaddlePaddle
PGL
提交
8469366b
P
PGL
项目概览
PaddlePaddle
/
PGL
通知
76
Star
4
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
11
列表
看板
标记
里程碑
合并请求
1
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
P
PGL
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
11
Issue
11
列表
看板
标记
里程碑
合并请求
1
合并请求
1
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
提交
8469366b
编写于
6月 24, 2019
作者:
Y
yelrose
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Add chinese readme
上级
8a9b0692
变更
2
隐藏空白更改
内联
并排
Showing
2 changed file
with
76 addition
and
1 deletion
+76
-1
README.md
README.md
+1
-1
README.zh.md
README.zh.md
+75
-0
未找到文件。
README.md
浏览文件 @
8469366b
# Paddle Graph Learning (PGL)
# Paddle Graph Learning (PGL)
[
DOC
](
https://pgl.readthedocs.io/en/latest/
)
|
[
Quick Start
](
https://pgl.readthedocs.io/en/latest/instruction.html
)
[
DOC
](
https://pgl.readthedocs.io/en/latest/
)
|
[
Quick Start
](
https://pgl.readthedocs.io/en/latest/instruction.html
)
|
[
中文
](
./README.zh.md
)
Paddle Graph Learning (PGL) is an efficient and flexible graph learning framework based on
[
PaddlePaddle
](
https://github.com/PaddlePaddle/Paddle
)
.
Paddle Graph Learning (PGL) is an efficient and flexible graph learning framework based on
[
PaddlePaddle
](
https://github.com/PaddlePaddle/Paddle
)
.
...
...
README.zh.md
0 → 100644
浏览文件 @
8469366b
# Paddle Graph Learning (PGL)
[
文档
](
https://pgl.readthedocs.io/en/latest/
)
|
[
快速开始
](
https://pgl.readthedocs.io/en/latest/instruction.html
)
Paddle Graph Learning (PGL)是一个基于
[
PaddlePaddle
](
https://github.com/PaddlePaddle/Paddle
)
的高效易用的图学习框架
<img
src=
"./docs/source/_static/framework_of_pgl.png"
alt=
"The Framework of Paddle Graph Learning (PGL)"
width=
"800"
>
我们提供一系列的Python接口用于存储/读取/查询图数据结构,并且提供基于游走(Walk Based)以及消息传递(Message Passing)两种计算范式的计算接口(见上图)。利用这些接口,我们就能够轻松的搭建最前沿的图学习算法。结合PaddlePaddle深度学习框架,我们的框架基本能够覆盖大部分的图网络应用,包括图表示学习以及图神经网络。
## 特色:高效灵活的消息传递范式
对比于一般的模型,图神经网络模型最大的优势在于它利用了节点与节点之间连接的信息。但是,如何通过代码来实现建模这些节点连接十分的麻烦。PGL采用与
[
DGL
](
https://github.com/dmlc/dgl
)
相似的
**消息传递范式**
用于作为构建图神经网络的接口。用于只需要简单的编写
```send```
还有
```recv```
函数就能够轻松的实现一个简单的GCN网络。如下图所示,首先,send函数被定义在节点之间的边上,用户自定义send函数!
[](
http://latex.codecogs.com/gif.latex?\\phi^e}
)
会把消息从源点发送到目标节点。然后,recv函数!
[](
http://latex.codecogs.com/gif.latex?\\phi^v}
)
负责将这些消息用汇聚函数 !
[](
http://latex.codecogs.com/gif.latex?\\oplus}
)
汇聚起来。
<img
src=
"./docs/source/_static/message_passing_paradigm.png"
alt=
"The basic idea of message passing paradigm"
width=
"800"
>
如下面左图所示,为了去适配用户定义的汇聚函数,DGL使用了Degree Bucketing来将相同度的节点组合在一个块,然后将汇聚函数!
[](
http://latex.codecogs.com/gif.latex?\\oplus}
)
作用在每个块之上。而对于PGL的用户定义汇聚函数,我们则将消息以PaddlePaddle的
[
LodTensor
](
http://www.paddlepaddle.org/documentation/docs/en/1.4/user_guides/howto/basic_concept/lod_tensor_en.html
)
的形式处理,将若干消息看作一组变长的序列,然后利用
**LodTensor在PaddlePaddle的特性进行快速平行的消息聚合**
。
<img
src=
"./docs/source/_static/parallel_degree_bucketing.png"
alt=
"The parallel degree bucketing of PGL"
width=
"800"
>
用户只需要简单的调用PaddlePaddle序列相关的函数
```sequence_ops```
就可以实现高效的消息聚合了。举个例子,下面就是简单的利用
```sequence_pool```
来做邻居消息求和。
```
python
import
paddle.fluid
as
fluid
def
recv
(
msg
):
return
fluid
.
layers
.
sequence_pool
(
msg
,
"sum"
)
```
尽管PGL用了一些内核融合(kernel fusion)的方法来将常用的sum,max等聚合函数用scatter-gather进行优化。但是对于
**复杂的用户定义函数**
,他们使用的Degree Bucketing算法,仅仅使用串行的方案来处理不同的分块,并不同充分利用GPU进行加速。然而,在PGL中我们使用基于LodTensor的消息传递能够充分地利用GPU的并行优化,即使不使用scatter-gather的优化,PGL仍然有高效的性能表现。当然,我们也是提供了scatter优化的聚合函数。
## 性能测试
我们用Tesla V100-SXM2-16G测试了下列所有的GNN算法,每一个算法跑了200个Epoch来计算平均速度。准确率是在测试集上计算出来的,并且我们没有使用Early-stopping策略。
| 数据集 | 模型 | PGL准确率 | PGL速度 (epoch) | DGL速度 (epoch) |
| -------- | ----- | ----------------- | ------------ | ------------------------------------ |
| 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依赖于:
*
paddle >= 1.5
*
networkx
*
cython
PGL supports both Python 2 & 3
## 安装
当前,PGL的版本是0.1.0.beta。你可以简单的用pip进行安装。
```
sh
pip
install
pgl
```
## 团队
PGL由百度的NLP以及Paddle团队共同开发以及维护。
## License
PGL uses Apache License 2.0.
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录