This is the Pytorch implementation of the paper "Towards Fair Graph Federated Learning via Incentive Mechanisms" accepted by AAAI-2024. Our work aims to build a fair graph federated learning framework, which could motivate the participants of graph federated learning to actively contribute to the whole federation.
The script has been tested running under Python 3.6.5, with the following packages installed (along with their dependencies):
pytorch == 1.8.0
pytorch-cluster == 1.5.9
pytorch-geometric == 2.0.4
pytorch-scatter == 2.0.9
pytorch-sparse == 0.6.12
networkx == 2.8.7
scikit-learn == 1.1.2
Or, you can install the dependency packages with the following command:
conda env create -f environment.yml -n myenv
For the graph classiciation datasets, directly run our code and a file folder data
would be automatically set up, then the data would be downloaded into it. If you want to change the name of the folder, you could change the name of the data path in --datapath
setting in main_oneDS.py
. Or, you could put your own data in the data
folder. The dataset used in our paper is mainly downloaded from (https://chrsmrrs.github.io/datasets/).
client.py
: the functions of the agents, such as updating the model locally and uploading the prototypes.
server.py
: the functions of the server, such as aggregating the prototypes the contribution of the agents.
models.py
: the backbone graph models on the agents.
setupGC.py
: the initial setting of the data and model distribution.
training.py
: the training code of different federated learning frameworks.
main_oneDS.py
: the initial start of the whole program.
python main_oneDS.py --repeat {index of the repeat}
--data_group {dataset}
--num_clients {num of clients}
--seed {random seed}
--lambda {coefficient of regularization term}
--alpha {size of motif vocabulary}
--overlap {whether clients have overlapped data}
--datapath {name of the data folder}
--outbase {name of the output folder}
--hidden {the size of the prototype}
Usage:
--repeat: int, the number to conduct the experiments
--data_group: str, the name of the dataset
--num_clients: int, the number of clients
--seed: int, random seed of the experiments
--lamb: float, the coefficient of the regularization term
--beta: float, the ratio of the motif vocabulary size in the entire motif vocabulary
--overlap: bool, whether clients have overlapped data, default = False
--datapath: str, the file path of the downloaded data, default = './data'
--outbase: str, the file path of the result of the programme, default = './outputs'
--hidden: int, the size of the graph embeddings, default = 64
python main_oneDS.py --data_group PROTEINS --num_clients 10 --lamb 0.1 --beta 0.9 --seed 1
After running the programme, the results are stored in the ./outputs
folder. Or you could modify it in the --outbase
option.
Some of the implementation is adopted from Federated Graph Classification over Non-IID Graphs.
If you have any questions, feel free to contact me through email (chenglupan@zju.edu.cn).
If you find this work helpful, please cite
@inproceedings{Pan2023TowardsFG,
title={Towards Fair Graph Federated Learning via Incentive Mechanisms},
author={Chenglu Pan and Jiarong Xu and Yue Yu and Ziqi Yang and Qingbiao Wu and Chunping Wang and Lei Chen and Yang Yang},
year={2024},
booktitle={AAAI},
number={13},
pages={14499-14507},
volume={38},
}