SwinGNN: Rethinking Permutation Invariance in Diffusion Models for Graph Generation
This repository contains the official implementation of the SwinGNN model in PyTorch. The SwinGNN paper was accepted at TMLR 2024/06.
Sampling processes of learned models on grid, protein and molecule datasets
Get started
Install dependencies
# option 1: python 3.8 venv python -m venv venvscorenet source venvscorenet/bin/activate pip install -U pip pip install cython==0.29.32 pip install pomegranate pip install -r setup/requirements.txt # option 2: conda conda create -n scorenet python=3.8 conda activate scorenet pip install -U pip pip install cython==0.29.32 pip install pomegranate pip install -r setup/requirements.txt # compile ORCA for orbit statistics evaluation export PROJ_DIR=$(pwd) cd evaluation/orca && g++ -O2 -std=c++11 -o orca orca.cpp && cd $PROJ_DIR
Please be aware that it may be crucial to first do pip install cython==0.29.32 and pip install pomegranate to prevent potential issues when installing the molsets (moses) package, which is necessary for calculating molecule metrics. Unfortunately, the original molsets (moses) package at https://github.com/molecularsets/moses is no longer actively maintained.
It's important to install these dependencies in the correct order to avoid potential installation errors.
Setup datasets
# prepare datasets python setup/gen_graph_data.py # prepare various synthetic and real-world graph datasets python setup/mol_preprocess.py --dataset ZINC250k # prepare ZINC250k dataset python setup/mol_preprocess.py --dataset QM9 # prepare QM9 dataset
Training command
Below we provide the training commands for SwinGNN on graph datasets and molecule datasets.
Please refer to config/edm_swin_gnn for more training configurations.
# training cmds on graph dataset (without node/edge attributes), e.g., to train on grid dataset python train.py -c config/edm_swin_gnn/grid_edm_swin_gnn_80.yaml --batch_size 10 -m=grid # our code also supports DDP training export NUM_GPUS=4 torchrun --nproc_per_node=$NUM_GPUS train.py -c config/edm_swin_gnn/grid_edm_swin_gnn_80.yaml --batch_size 40 --ddp -m=grid_ddp # training cmds on molecule dataset (with node/edge attributes), e.g., to train on QM9 dataset torchrun --nproc_per_node=$NUM_GPUS train.py -c config/edm_swin_gnn/qm9_edm_swin_gnn.yaml --feature_dims 60 --node_encoding one_hot --edge_encoding one_hot --batch_size 10240 --ddp -m qm9
Testing command
We release the checkpoints at Google Drive and oneDrive. Below we provide the sampling commands for SwinGNN on graph datasets and molecule datasets.
# ego-small python eval.py -p swinGNN-checkpoints/ego_small/ego_small_dim_60/ego_small_dim_60.pth --use_ema 0.9 -m eval_ego_small python eval.py -p swinGNN-checkpoints/ego_small/ego_small_dim_96/ego_small_dim_96.pth --use_ema 0.99 -m eval_ego_small # community-small python eval.py -p swinGNN-checkpoints/com_small/community_small_dim_60/community_small_dim_60.pth --use_ema 0.99 -m eval_com_small python eval.py -p swinGNN-checkpoints/com_small/community_small_dim_96/community_small_dim_96.pth --use_ema 0.95 -m eval_com_small # grid python eval.py -p swinGNN-checkpoints/grid/grid_dim_60/grid_dim_60.pth --use_ema 0.99 -m eval_grid python eval.py -p swinGNN-checkpoints/grid/grid_dim_96/grid_dim_96.pth --use_ema 0.95 -m eval_grid # dd-protein python eval.py -p swinGNN-checkpoints/dd_protein/dd_dim_60/dd_dim_60.pth --use_ema 0.9999 -m eval_dd_protein python eval.py -p swinGNN-checkpoints/dd_protein/dd_dim_96/dd_dim_96.pth --use_ema 0.9999 -m eval_dd_protein # qm9 python eval.py -p swinGNN-checkpoints/qm9/qm9_scalar_dim_60/qm9_scalar_dim_60.pth --use_ema 0.9999 -m eval_qm9 python eval.py -p swinGNN-checkpoints/qm9/qm9_scalar_dim_96/qm9_scalar_dim_96.pth --use_ema 0.9999 -m eval_qm9 # zinc250k python eval.py -p swinGNN-checkpoints/zinc250k/zinc250k_scalar_dim_60/zinc250k_scalar_dim_60.pth --use_ema 0.9999 -m eval_zinc250k python eval.py -p swinGNN-checkpoints/zinc250k/zinc250k_scalar_dim_96/zinc250k_scalar_dim_96.pth --use_ema 0.9999 -m eval_zinc250k
Due to the randomness in the sampling process or difference in hardware, the results may be slightly different from the reported results in the paper.
Citation and Acknowledgements
Bibtex.
If you find our code useful for your research, please cite the paper:
@article{yan2023swingnn, title={SwinGNN: Rethinking Permutation Invariance in Diffusion Models for Graph Generation}, author={Yan, Qi and Liang, Zhengyang and Song, Yang and Liao, Renjie and Wang, Lele}, journal={arXiv preprint arXiv:2307.01646}, year={2023} }
Acknowledgments and Disclosure of Funding.
This work was funded, in part, by NSERC DG Grants (No. RGPIN-2022-04636 and No. RGPIN-2019-05448), the NSERC Collaborative Research and Development Grant (No. CRDPJ 543676-19), the Vector Institute for AI, Canada CIFAR AI Chair, and Oracle Cloud credits.
Resources used in preparing this research were provided, in part, by the Province of Ontario, the Government of Canada through the Digital Research Alliance of Canada alliance.can.ca, and companies sponsoring the Vector Institute www.vectorinstitute.ai/#partners, Advanced Research Computing at the University of British Columbia, and the Oracle for Research program.
Additional hardware support was provided by John R. Evans Leaders Fund CFI grant and the Digital Research Alliance of Canada under the Resource Allocation Competition award.
Contact
Please submit a Github issue or contact qi.yan@ece.ubc.ca if you have any questions or find any bugs.


