FedTree is a federated learning system for tree-based models. It is designed to be highly efficient, effective, and secure. It has the following features currently.
- Federated training of gradient boosting decision trees.
- Parallel computing on multi-core CPUs and GPUs.
- Supporting homomorphic encryption, secure aggregation and differential privacy.
- Supporting classification and regression.
The overall architecture of FedTree is shown below. FedTree_archi
You can refer to our primary documentation here.
You can follow the following commands to install NTL library.
wget https://libntl.org/ntl-11.4.4.tar.gz
tar -xvf ntl-11.4.4.tar.gz
cd ntl-11.4.4/src
./configure SHARED=on
make
make check
sudo make install
If you install the NTL library at another location, please pass the location to the NTL_PATH when building the library (e.g., cmake .. -DNTL_PATH="PATH_TO_NTL").
git clone https://github.com/Xtra-Computing/FedTree.git
cd FedTree
git submodule init
git submodule update
# under the directory of FedTree mkdir build && cd build cmake .. make -j
You need to install libomp for MacOS.
brew install libomp
Install FedTree:
# under the directory of FedTree mkdir build cd build cmake -DOpenMP_C_FLAGS="-Xpreprocessor -fopenmp -I/usr/local/opt/libomp/include" \ -DOpenMP_C_LIB_NAMES=omp \ -DOpenMP_CXX_FLAGS="-Xpreprocessor -fopenmp -I/usr/local/opt/libomp/include" \ -DOpenMP_CXX_LIB_NAMES=omp \ -DOpenMP_omp_LIBRARY=/usr/local/opt/libomp/lib/libomp.dylib \ .. make -j
# under 'FedTree' directory
./build/bin/FedTree-train ./examples/vertical_example.confFor each machine that participates in FL, it needs to build the library first.
mkdir build && cd build cmake .. -DDISTRIBUTED=ON make -j
Then, write your configuration file where you should specify the ip address of the server machine (ip_address=xxx). Run FedTree-distributed-server in the server machine and run FedTree-distributed-party in the party machines.
Here are two examples for horizontal FedTree and vertical FedTree.
# under 'FedTree' directory # under server machine ./build/bin/FedTree-distributed-server ./examples/adult/a9a_horizontal_server.conf # under party machine 0 ./build/bin/FedTree-distributed-party ./examples/adult/a9a_horizontal_p0.conf 0 # under party machine 1 ./build/bin/FedTree-distributed-party ./examples/adult/a9a_horizontal_p1.conf 1
# under 'FedTree' directory # under server (i.e., the party with label) machine 0 ./build/bin/FedTree-distributed-server ./examples/credit/credit_vertical_p0_withlabel.conf # open a new terminal ./build/bin/FedTree-distributed-party ./examples/credit/credit_vertical_p0_withlabel.conf 0 # Under party machine 1 ./build/bin/FedTree-distributed-party ./examples/credit/credit_vertical_p1.conf 1
FedTree is built based on ThunderGBM, which is a fast GBDTs and Radom Forests training system on GPUs.
Please cite our paper if you use FedTree in your work.
@misc{fedtree,
title = {FedTree: A Fast, Effective, and Secure Tree-based Federated Learning System},
author={Li, Qinbin and Cai, Yanzheng and Han, Yuxuan and Yung, Ching Man and Fu, Tianyuan and He, Bingsheng},
howpublished = {\url{https://github.com/Xtra-Computing/FedTree/blob/main/FedTree_draft_paper.pdf}},
year={2022}
}