• Stars
    star
    174
  • Rank 212,184 (Top 5 %)
  • Language
    Python
  • License
    Apache License 2.0
  • Created over 2 years ago
  • Updated 2 months ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

A multi-backend graph learning library.

Gamma Graph Library(GammaGL)

GitHub release (latest by date) Documentation Status GitHub visitors GitHub all releases Total lines

Documentation |启智社区

GammaGL is a multi-backend graph learning library based on TensorLayerX, which supports TensorFlow, PyTorch, PaddlePaddle, MindSpore as the backends.

We give a development tutorial in Chinese on wiki.

Highlighted Features

Multi-backend

GammaGL supports multiple deep learning backends, such as TensorFlow, PyTorch, Paddle and MindSpore. Different from DGL, the GammaGL's examples are implemented with the same code on different backend. It allows users to run the same code on different hardwares like Nvidia-GPU and Huawei-Ascend. Besides, users could use a particular framework API based on preferences for different frameworks.

PyG-Like

Following PyTorch Geometric(PyG), GammaGL utilizes a tensor-centric API. If you are familiar with PyG, it will be friendly and maybe a TensorFlow Geometric, Paddle Geometric, or MindSpore Geometric to you.

News

2023-04-01 paper accepted

Our paper GammaGL: A Multi-Backend Library for Graph Neural Networks is accpeted at SIGIR 2023 resource paper track.

2023-02-24 启智社区优秀孵化项目奖

GammaGL荣获启智社区优秀孵化项⽬奖!详细链接:https://mp.weixin.qq.com/s/PpbwEdP0-8wG9dsvRvRDaA

2023-02-21 中国电子学会科技进步一等奖

算法库支撑了北邮牵头,蚂蚁、中移动、海致科技等参与的“大规模复杂异质图数据智能分析技术与规模化应用”项目。该项目获得了2022年电子学会科技进步一等奖。

2023-01-17 release v0.2
We release the latest version v0.2.
  • 40 GNN models
  • 20 datasets
  • Efficient message passing operators and fused operator
  • GPU sampling and heterogeneous graphs samplers.
2022-06-20 release v0.1
We release the latest version v0.1.
  • Framework-agnostic design
  • PyG-like
  • Graph data structures, message passing module and sampling module
  • 20+ GNN models

Quick Tour for New Users

In this quick tour, we highlight the ease of creating and training a GNN model with only a few lines of code.

Train your own GNN model

In the first glimpse of GammaGL, we implement the training of a GNN for classifying papers in a citation graph. For this, we load the Cora dataset, and create a simple 2-layer GCN model using the pre-defined GCNConv:

import tensorlayerx as tlx
from gammagl.layers.conv import GCNConv
from gammagl.datasets import Planetoid

dataset = Planetoid(root='.', name='Cora')

class GCN(tlx.nn.Module):
    def __init__(self, in_channels, hidden_channels, out_channels):
        super().__init__()
        self.conv1 = GCNConv(in_channels, hidden_channels)
        self.conv2 = GCNConv(hidden_channels, out_channels)
        self.relu = tlx.ReLU()

    def forward(self, x, edge_index):
        # x: Node feature matrix of shape [num_nodes, in_channels]
        # edge_index: Graph connectivity matrix of shape [2, num_edges]
        x = self.conv1(x, edge_index)
        x = self.relu(x)
        x = self.conv2(x, edge_index)
        return x

model = GCN(dataset.num_features, 16, dataset.num_classes)
We can now optimize the model in a training loop, similar to the standard TensorLayerX training procedure.
import tensorlayerx as tlx
data = dataset[0]
loss_fn = tlx.losses.softmax_cross_entropy_with_logits
optimizer = tlx.optimizers.Adam(learning_rate=1e-3)
net_with_loss = tlx.model.WithLoss(model, loss_fn)
train_one_step = tlx.model.TrainOneStep(net_with_loss, optimizer, train_weights)

for epoch in range(200):
    loss = train_one_step(data.x, data.y)
We can now optimize the model in a training loop, similar to the standard PyTorch training procedure.
import torch.nn.functional as F

data = dataset[0]
optimizer = torch.optim.Adam(model.parameters(), lr=0.01)

for epoch in range(200):
    pred = model(data.x, data.edge_index)
    loss = F.cross_entropy(pred[data.train_mask], data.y[data.train_mask])

    # Backpropagation
    optimizer.zero_grad()
    loss.backward()
    optimizer.step()
We can now optimize the model in a training loop, similar to the standard TensorFlow training procedure.
import tensorflow as tf

optimizer = tf.keras.optimizers.Adam()
loss_fn = tf.keras.losses.SparseCategoricalCrossentropy(from_logits=True)
for epoch in range(200):
    with tf.GradientTape() as tape:
        predictions = model(images, training=True)
        loss = loss_fn(labels, predictions)
    gradients = tape.gradient(loss, model.trainable_variables)
    optimizer.apply_gradients(zip(gradients, model.trainable_variables))
We can now optimize the model in a training loop, similar to the standard PaddlePaddle training procedure.
import paddle

data = dataset[0]
optim = paddle.optimizer.Adam(parameters=model.parameters())
loss_fn = paddle.nn.CrossEntropyLoss()

model.train()
for epoch in range(200):
    predicts = model(data.x, data.edge_index)
    loss = loss_fn(predicts, y_data)

    # Backpropagation
    loss.backward()
    optim.step()
    optim.clear_grad()
We can now optimize the model in a training loop, similar to the standard MindSpore training procedure.
# 1. Generate training dataset
train_dataset = create_dataset(num_data=160, batch_size=16)

# 2.Build a model and define the loss function
net = LinearNet()
loss = nn.MSELoss()

# 3.Connect the network with loss function, and define the optimizer
net_with_loss = nn.WithLossCell(net, loss)
opt = nn.Momentum(net.trainable_params(), learning_rate=0.005, momentum=0.9)

# 4.Define the training network
train_net = nn.TrainOneStepCell(net_with_loss, opt)

# 5.Set the model as training mode
train_net.set_train()

# 6.Training procedure
for epoch in range(200):
    for d in train_dataset.create_dict_iterator():
        result = train_net(d['data'], d['label'])
        print(f"Epoch: [{epoch} / {epochs}], "
              f"step: [{step} / {steps}], "
              f"loss: {result}")
        step = step + 1

More information about evaluating final model performance can be found in the corresponding example.

Create your own GNN layer

In addition to the easy application of existing GNNs, GammaGL makes it simple to implement custom Graph Neural Networks (see here for the accompanying tutorial). For example, this is all it takes to implement the edge convolutional layer from Wang et al.:

$$x_i^{\prime} ~ = ~ \max_{j \in \mathcal{N}(i)} ~ \textrm{MLP}_{\theta} \left( [ ~ x_i, ~ x_j - x_i ~ ] \right)$$

import tensorlayerx as tlx
from tensorlayerx.nn import Sequential as Seq, Linear, ReLU
from gammagl.layers import MessagePassing

class EdgeConv(MessagePassing):
    def __init__(self, in_channels, out_channels):
        super().__init__()
        self.mlp = Seq(Linear(2 * in_channels, out_channels),
                       ReLU(),
                       Linear(out_channels, out_channels))

    def forward(self, x, edge_index):
        # x has shape [N, in_channels]
        # edge_index has shape [2, E]

        return self.propagate(x=x, edge_index,aggr_type='max')

    def message(self, x_i, x_j):
        # x_i has shape [E, in_channels]
        # x_j has shape [E, in_channels]

        tmp = tlx.concat([x_i, x_j - x_i], axis=1)  # tmp has shape [E, 2 * in_channels]
        return self.mlp(tmp)

Get Started

  1. Python environment (Optional): We recommend using Conda package manager

    $ conda create -n ggl python=3.8
    $ source activate ggl
    
  2. Install Backend

    # For tensorflow
    $ pip install tensorflow-gpu # GPU version
    $ pip install tensorflow # CPU version
    
    # For torch, version 1.10
    # https://pytorch.org/get-started/locally/
    $ pip install torch==1.10.1+cu111 torchvision==0.11.2+cu111 torchaudio==0.10.1 -f https://download.pytorch.org/whl/cu111/torch_stable.html
    
    # For paddle, any latest stable version
    # https://www.paddlepaddle.org.cn/
    $ python -m pip install paddlepaddle-gpu
    
    # For mindspore, GammaGL only supports version 1.8.1, GPU-CUDA 11.1
    # https://www.mindspore.cn/install
    $ pip install https://ms-release.obs.cn-north-4.myhuaweicloud.com/1.8.1/MindSpore/gpu/x86_64/cuda-11.1/mindspore_gpu-1.8.1-cp37-cp37m-linux_x86_64.whl --trusted-host ms-release.obs.cn-north-4.myhuaweicloud.com -i https://pypi.tuna.tsinghua.edu.cn/simple
    

    For other backend with specific version, please check whether TLX supports.

    Install TensorLayerX

    pip install git+https://github.com/tensorlayer/tensorlayerx.git 
    

    大陆用户如果遇到网络问题,推荐从启智社区安装

    Try to git clone from OpenI

    pip install git+https://git.openi.org.cn/OpenI/TensorLayerX.git

    Note:

    • TensorFlow is necessary when installing TensorLayerX.
    • The version of protobuf should be 3.19.6, remember to re-install it after you install TensorLayerX.
  3. Download GammaGL

    $ git clone --recursive https://github.com/BUPT-GAMMA/GammaGL.git
    $ pip install pybind11 pyparsing
    $ python setup.py install
    

    大陆用户如果遇到网络问题,推荐从启智社区安装

    Try to git clone from OpenI

    git clone --recursive https://git.openi.org.cn/GAMMALab/GammaGL.git

    Note:

    "--recursive" is necessary, if you forgot, you can run command below in GammaGL root dir:

    git submodule update --init

How to Run

Take GCN as an example:

# cd ./examples/gcn
# set parameters if necessary
python gcn_trainer.py --dataset cora --lr 0.01

If you want to use specific backend or GPU, just set environment variable like:

CUDA_VISIBLE_DEVICES="1" TL_BACKEND="paddle" python gcn_trainer.py

Note

The DEFAULT backend is tensorflow and GPU is 0. The backend TensorFlow will take up all GPU left memory by default.

The CANDIDATE backends are tensorflow, paddle, torch and mindspore.

Set CUDA_VISIBLE_DEVICES=" " if you want to run it in CPU.

Supported Models

TensorFlow PyTorch Paddle MindSpore
GCN [ICLR 2017] ✔️ ✔️ ✔️ ✔️
GAT [ICLR 2018] ✔️ ✔️ ✔️ ✔️
GraphSAGE [NeurIPS 2017] ✔️ ✔️ ✔️ ✔️
ChebNet [NeurIPS 2016] ✔️ ✔️ ✔️
GCNII [ICLR 2017] ✔️ ✔️ ✔️
JKNet [ICML 2018] ✔️ ✔️ ✔️
DiffPool [NeurIPS 2018]
SGC [ICML 2019] ✔️ ✔️ ✔️ ✔️
GIN [ICLR 2019] ✔️ ✔️ ✔️
APPNP [ICLR 2019] ✔️ ✔️ ✔️ ✔️
AGNN [arxiv] ✔️ ✔️ ✔️ ✔️
SIGN [ICML 2020 Workshop] ✔️ ✔️ ✔️
DropEdge [ICLR 2020] ✔️ ✔️ ✔️ ✔️
GPRGNN [ICLR 2021] ✔️
GNN-FiLM [ICML 2020] ✔️ ✔️ ✔️
GraphGAN [AAAI 2018] ✔️ ✔️ ✔️
HardGAT [KDD 2019] ✔️ ✔️ ✔️
MixHop [ICML 2019] ✔️ ✔️ ✔️ ✔️
PNA [NeurIPS 2020] ✔️ ✔️ ✔️
FAGCN [AAAI 2021] ✔️ ✔️ ✔️
GATv2 [ICLR 2021] ✔️ ✔️ ✔️
GEN [WWW 2021] ✔️ ✔️
GAE [NeurIPS 2016] ✔️ ✔️ ✔️
VGAE [NeurIPS 2016] ✔️ ✔️ ✔️
HCHA [PR 2021] ✔️ ✔️ ✔️
Node2Vec [KDD 2016] ✔️ ✔️ ✔️
DeepWalk [KDD 2014] ✔️ ✔️ ✔️
DGCNN [ACM T GRAPHIC 2019] ✔️ ✔️
GaAN [UAI 2018] ✔️ ✔️ ✔️
GRADE [NeurIPS 2022] ✔️ ✔️ ✔️
GMM [CVPR 2017] ✔️ ✔️ ✔️ ✔️
TADW [IJCAI 2015] ✔️ ✔️ ✔️ ✔️
MGNNI [NeurIPS 2022] ✔️ ✔️ ✔️
MAGCL [AAAI 2023] ✔️ ✔️ ✔️
CAGCN [NeurIPS 2021] ✔️ ✔️ ✔️
Contrastive Learning TensorFlow PyTorch Paddle MindSpore
DGI [ICLR 2019] ✔️ ✔️ ✔️
GRACE [ICML 2020 Workshop] ✔️ ✔️ ✔️
MVGRL [ICML 2020] ✔️ ✔️ ✔️
InfoGraph [ICLR 2020] ✔️ ✔️ ✔️
MERIT [IJCAI 2021] ✔️ ✔️
Heterogeneous Graph Learning TensorFlow PyTorch Paddle MindSpore
RGCN [ESWC 2018] ✔️ ✔️ ✔️
HAN [WWW 2019] ✔️ ✔️ ✔️ ✔️
HGT [WWW 2020] ✔️ ✔️ ✔️
SimpleHGN [KDD 2021] ✔️
CompGCN [ICLR 2020] ✔️ ✔️
HPN [TKDE 2021] ✔️ ✔️ ✔️ ✔️
ieHGCN [TKDE 2021] ✔️ ✔️ ✔️
MetaPath2Vec [KDD 2017] ✔️ ✔️ ✔️
HERec [TKDE 2018] ✔️ ✔️ ✔️

Note

The models can be run in mindspore backend. Howerver, the results of experiments are not satisfying due to training component issue, which will be fixed in future.

Contributors

GammaGL Team[GAMMA LAB] and Peng Cheng Laboratory.

See more in CONTRIBUTING.

Contribution is always welcomed. Please feel free to open an issue or email to [email protected].

Cite GammaGL

If you use GammaGL in a scientific publication, we would appreciate citations to the following paper:

@inproceedings{Liu2023gammagl,
  title={GammaGL: A Multi-Backend Library for Graph Neural Networks},
  author={Yaoqi Liu, Cheng Yang, Tianyu Zhao, Hui Han, Siyuan Zhang, Jing Wu, Guangyu Zhou, Hai Huang, Hui Wang, Chuan Shi},
  booktitle={SIGIR},
  year={2023}
}

More Repositories

1

OpenHGNN

This is an open-source toolkit for Heterogeneous Graph Neural Network(OpenHGNN) based on DGL.
Python
772
star
2

OpenHINE

An Open-Source Toolkit for Heterogeneous Information Network Embedding (HINE)
Python
282
star
3

HGAT

Heterogeneous graph attention network for semi-supervised short text classification (EMNLP 2019, TOIS 2021)
Python
234
star
4

GFMPapers

Must-read papers on graph foundation models (GFMs)
176
star
5

CompareNet_FakeNewsDetection

Compare to The Knowledge: Graph Neural Fake News Detection with External Knowledge (ACL 2021)
Python
86
star
6

CPF

The official code of WWW2021 paper: Extract the Knowledge of Graph Neural Networks and Go Beyond it: An Effective Knowledge Distillation Framework
Python
63
star
7

Multi-Component-Graph-Convolutional-Collaborative-Filtering

Source code for AAAI 2020 paper "Multi-Component Graph Convolutional Collaborative Filtering"
Python
60
star
8

Graph-Structure-Estimation-Neural-Networks

Source code for WWW 2021 paper "Graph Structure Estimation Neural Networks"
Python
53
star
9

Uncovering-the-Structural-Fairness-in-Graph-Contrastive-Learning

Source code for NeurIPS 2022 paper "Uncovering the Structural Fairness in Graph Contrastive Learning"
Python
24
star
10

CIAH

Co-clustering Interactions via Attentive Hypergraph Neural Network (SIGIR 2022)
Python
24
star
11

HeCo

This repo is for source code of KDD 2021 paper "Self-supervised Heterogeneous Graph Neural Network with Co-contrastive Learning".
Python
23
star
12

Space4HGNN

Space4HGNN: A Novel, Modularized and Reproducible Platform to Evaluate Heterogeneous Graph Neural Network
Python
22
star
13

PTHGNN

source code of KDD 2021 paper "Pre-training on Large-Scale Heterogeneous Graph".
Python
21
star
14

CuCo

source code of IJCAI 2021 paper "Graph Representation with Curriculum Contrastive Learning"
Python
20
star
15

MetaDyGNN

Python
19
star
16

RoHe

Python
15
star
17

THIGE

The source will be uploaded recently
Python
14
star
18

LafAK

The code of paper "Adversarial Label-Flipping Attack and Defense for Graph Neural Networks" (ICDM 2020)
Python
13
star
19

CaGCN

This repo is for source code of NeurIPS 2021 paper "Be Confident! Towards Trustworthy Graph Neural Networks via Confidence Calibration".
Python
12
star
20

GCIL

Code for AAAI-2024 paper: Graph Contrastive Invariant Learning from the Causal Perspective
Python
12
star
21

SCCAIN

The source will be uploaded recently
Python
11
star
22

IGM

source code of AAAI 2024 paper "Graph Invariant Learning with Subgraph Co-mixup for Out-Of-Distribution Generalization".
Python
9
star
23

AM-GCN

KDD 2020: AM-GCN: Adaptive Multi-channel Graph Convolutional Networks
Python
8
star
24

Design-Space-for-GNN-based-CF

Python
8
star
25

HPGE

Dynamic Heterogeneous Graph Embedding via Heterogeneous Hawkes Process (ECML-PKDD 2020)
Python
7
star
26

Heterogeneous-Information-Network-Embedding-with-Adversarial-Disentangler

Source code for TKDE 2021 paper "Heterogeneous Information Network Embedding with Adversarial Disentangler"
Python
7
star
27

AAGOD

7
star
28

CITGNN

Python
6
star
29

NASA

Regularizing Graph Neural Networks via Consistency-Diversity Graph Augmentations
Python
6
star
30

CPT-HG

Python
5
star
31

AEHCL

Python
5
star
32

SpCo

Python
5
star
33

HDE

Python
4
star
34

IJCAI2020-DCKM

MATLAB
4
star
35

TAN

source code of CIKM 2021 paper "Neural Information Diffusion Prediction withTopic-Aware Attention Network"
Python
4
star
36

GNN-LF-HF

WWW2021: Interpreting and Unifying Graph Neural Networks with An Optimization Framework
Python
3
star
37

FedHGNN

The source code of FedHGNN
Python
3
star
38

DR-GST

Python
2
star
39

HeteSamp

Python
2
star
40

POT-GCL

Python
1
star
41

HAN

1
star
42

HGSRec

Python
1
star
43

Specformer

Python
1
star
44

LTD

Python
1
star