未验证 提交 868d1fcd 编写于 作者: H Huang Zhengjie 提交者: GitHub

Update README.md

上级 dad7ec3a
# PGL ReadMe
# PGL README.md
# Paddle Graph Learning (PGL) # Paddle Graph Learning (PGL)
[API](https://xx) | [Tutorials](https://xx) [API](https://xx) | [Tutorials](https://xx)
...@@ -8,7 +5,7 @@ ...@@ -8,7 +5,7 @@
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).
<div> <div>
<div align=center><img src="framework_of_pgl.png" width="700"> <div align=center><img src="https://github.com/PaddlePaddle/PGL/blob/master/docs/source/_static/framework_of_pgl.png" width="700">
<center>The Framework of Paddle Graph Learning (PGL) </center> <center>The Framework of Paddle Graph Learning (PGL) </center>
<div> <div>
...@@ -20,7 +17,7 @@ We provide python interfaces for storing/reading/querying graph structured data ...@@ -20,7 +17,7 @@ We provide python interfaces for storing/reading/querying graph structured data
One of the most important benefits of graph neural networks compared to other models is the ability to use node-to-node connectivity information, but coding the communication between nodes is very cumbersome. At PGL we adopt **Message Passing Paradigm** similar to [DGL](https://github.com/dmlc/dgl) to help to build a customize graph neural network easily. Users only need to write ```send``` and ```recv``` functions to easily implement a simple GCN. As shown in the following figure, for the first step the send function is defined on the edges of the graph, and the user can customize the send function $\phi^e$ to send the message from the source to the target node. For the second step, the recv function $\phi^v$ is responsible for aggregating $\oplus$ messages together from different sources. One of the most important benefits of graph neural networks compared to other models is the ability to use node-to-node connectivity information, but coding the communication between nodes is very cumbersome. At PGL we adopt **Message Passing Paradigm** similar to [DGL](https://github.com/dmlc/dgl) to help to build a customize graph neural network easily. Users only need to write ```send``` and ```recv``` functions to easily implement a simple GCN. As shown in the following figure, for the first step the send function is defined on the edges of the graph, and the user can customize the send function $\phi^e$ to send the message from the source to the target node. For the second step, the recv function $\phi^v$ is responsible for aggregating $\oplus$ messages together from different sources.
<div> <div>
<div align=center><img src="MPP.png" width="700"> <div align=center><img src="https://github.com/PaddlePaddle/PGL/blob/master/docs/source/_static/message_passing_paradigm.png" width="700">
<center>The basic idea of message passing paradigm</center> <center>The basic idea of message passing paradigm</center>
<div> <div>
...@@ -28,7 +25,7 @@ One of the most important benefits of graph neural networks compared to other mo ...@@ -28,7 +25,7 @@ One of the most important benefits of graph neural networks compared to other mo
As shown in the left of the following figure, to adapt general user-defined message aggregate functions, DGL uses the degree bucketing method to combine nodes with the same degree into a batch and then apply an aggregate function $\oplus$ on each batch serially. For our PGL UDF aggregate function, we organize the message as a [LodTensor](http://www.paddlepaddle.org/documentation/docs/en/1.4/user_guides/howto/basic_concept/lod_tensor_en.html) in [PaddlePaddle](https://github.com/PaddlePaddle/Paddle) taking the message as variable length sequences. And we **utilize the features of LodTensor in Paddle to obtain fast parallel aggregation**. As shown in the left of the following figure, to adapt general user-defined message aggregate functions, DGL uses the degree bucketing method to combine nodes with the same degree into a batch and then apply an aggregate function $\oplus$ on each batch serially. For our PGL UDF aggregate function, we organize the message as a [LodTensor](http://www.paddlepaddle.org/documentation/docs/en/1.4/user_guides/howto/basic_concept/lod_tensor_en.html) in [PaddlePaddle](https://github.com/PaddlePaddle/Paddle) taking the message as variable length sequences. And we **utilize the features of LodTensor in Paddle to obtain fast parallel aggregation**.
<div> <div>
<div align=center><img src="parallel_degree_bucketing.png" width="750"> <div align=center><img src="https://github.com/PaddlePaddle/PGL/blob/master/docs/source/_static/parallel_degree_bucketing.png" width="750">
<center>The parallel degree bucketing of PGL<center> <center>The parallel degree bucketing of PGL<center>
<div> <div>
...@@ -45,6 +42,7 @@ Although DGL does some kernel fusion optimization for general sum, max and other ...@@ -45,6 +42,7 @@ Although DGL does some kernel fusion optimization for general sum, max and other
## Performance ## Performance
We test all the GNN algorithms with Tesla V100-SXM2-16G running for 200 epochs to get average speeds. And we report the accuracy on test dataset without early stoppping. We test all the GNN algorithms with Tesla V100-SXM2-16G running for 200 epochs to get average speeds. And we report the accuracy on test dataset without early stoppping.
| Dataset | Model | PGL Accuracy | PGL speed (epoch time) | DGL speed (epoch time) | | Dataset | Model | PGL Accuracy | PGL speed (epoch time) | DGL speed (epoch time) |
| -------- | ----- | ----------------- | ------------ | ------------------------------------ | | -------- | ----- | ----------------- | ------------ | ------------------------------------ |
| Cora | GCN |81.75% | 0.0047s | **0.0045s** | | Cora | GCN |81.75% | 0.0047s | **0.0045s** |
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册