GithubHelp home page GithubHelp logo

cyqclark / fedlearn-algo Goto Github PK

View Code? Open in Web Editor NEW
92.0 92.0 41.0 39.18 MB

Fedlearn支持前沿算法研发的Python工具库 | Fedlearn algorithm toolkit for researchers

License: Apache License 2.0

Python 96.77% Shell 2.10% Dockerfile 1.13%

fedlearn-algo's Introduction

FedLearn-algo

Installation

Development Environment Checklist

python3 (3.6 or 3.7) is required. To configure and check the development environment is correct, a checklist file is provided: environment_checklist.sh. Under the path of FedLearn-algo, please run:

sh environment_checklist.sh

Recommended Python Package

Package License Version Github
datasets MIT 1.8.0 https://github.com/huggingface/datasets
gmpy2 LGPL 3.0 2.0.8 https://github.com/BrianGladman/gmpy2
grpc Apache 2.0 1.38.0 https://github.com/grpc/grpc
numpy BSD 3 1.19.2 https://github.com/numpy/numpy
omegaconf BSD 3 2.1.0 https://github.com/omry/omegaconf
oneflow Apache 2.0 0.4.0 https://github.com/Oneflow-Inc/oneflow
orjson Apache 2.0 3.5.2 https://github.com/ijl/orjson
pandas BSD 3 1.2.4 https://github.com/pandas-dev/pandas
phe LGPL 3.0 1.4.0 https://github.com/data61/python-paillier
sklearn BSD 3 0.24.2 https://github.com/scikit-learn/scikit-learn
tensorflow Apache 2.0 2.4.1 https://github.com/tensorflow/tensorflow
torch BSD 1.9 https://github.com/pytorch/pytorch
tornado Apache 2.0 6.1 https://github.com/tornadoweb/tornado
transformers Apache 2.0 4.7.0 https://github.com/huggingface/transformers
protobuf 3-Clause BSD 3.12.2 https://github.com/protocolbuffers/protobuf

Device Deployment

The device deployment is a centralized distributed topology, as shown in the above figure. The server terminal controls the training loop, and the N client terminals operate independent algorithm computation, respectively. For non-deep learning algorithms, each client terminal depends on CPU-based computation, otherwise GPU (e.g., NVIDIA series) should be configured to guarantee training speed.

Optional Text

Run an Example

An algorithm flow example is provided to demonstrate a customized algorithm development (one server terminal with three client terminals). Server should communicate with each client. The server and three clients could be sited on different machines or started by command line terminal in one machine.

First, users should set the IP, port, and token. In client terminals, run the following commands, respectively.

python demos/custom_alg_demo/custom_client.py -I 127.0.0.1 -P 8891 -T client_1
python demos/custom_alg_demo/custom_client.py -I 127.0.0.1 -P 8892 -T client_2
python demos/custom_alg_demo/custom_client.py -I 127.0.0.1 -P 8893 -T client_3

Second, in the server terminal, run the following to start the server and complete a simulated training pipeline.

python demos/custom_alg_demo/custom_server.py

Architecture Design

FedLearn-algo is an open source framework in the research environment to promote the study of novel federated learning algorithms. FedLearn-algo proposes a distributed machine learning architecture enabling both vertical and horizontal federated learning (FL) development. This architecture supports flexible module configurations for each particular algorithm design, and can be extended to build state-of-the-art algorithms and systems. FedLearn-algo also provides comprehensive examples, including FL-based kernel methods, random forest, and neural networks. At last, the horizontal FL extension in FedLearn-algo is compatible with popular deep learning frameworks, e.g., PyTorch, OneFlow.

Optional Text

The above figure shows the proposed FL framework. It has one server and multiple clients to complete the multi-party joint modeling in the federated learning procedure. The server is located at the centre of architecture topology, and it coordinates the training pipeline. Clients operate modeling computation independently in local terminals without sharing data, and thus could protect data privacy and data security.

Demonstration Algorithms

According to the data partition differences, existing FL algorithms can be mainly categorized into horizontal FL algorithms and vertical FL algorithms. Horizontal FL refers to the setting that samples on the involved machines share the same feature space while the machines have different sample ID space. Vertical FL means all machines share the same sample ID space while each machine has a unique feature space.

Vertical Federated Learning

  • Federated Kernel Learning. Kernel method is a nonlinear machine learning algorithm to handle linearly non-separable data.

  • Federated Random Forest. Random forest is an ensemble machine learning method for classification and regression by building a multitude of decision trees in model training.

Horizontal Federated Learning

  • Federated HFL. An extension framework in FedLearn-algo designed to provide flexible and easy-to-use algorithms in Horizontal Federated scenarios.

Documentation

License

The distribution of FedLearn-algo in this repository is under Apache 2.0 license.

Citation

Please cite FedLearn-algo in your publications if it makes some contributions to your research/development:

@article{liu2021fedlearn,
  title={Fedlearn-Algo: A flexible open-source privacy-preserving machine learning platform},
  author={Liu, Bo and Tan, Chaowei and Wang, Jiazhou and Zeng, Tao and Shan, Huasong and Yao, Houpu and Heng, Huang and Dai, Peng and Bo, Liefeng and Chen, Yanqing},
  journal={arXiv preprint arXiv:2107.04129},
  url={https://arxiv.org/abs/2107.04129},
  year={2021}
}

Contact us

Please contact us at [email protected] if you have any questions.

fedlearn-algo's People

Contributors

cyqclark avatar fedlearnjdt avatar guabao avatar monadyn avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

fedlearn-algo's Issues

咨询random_forest demo的Prediction结果

冒昧求教:框架中的random_forest demo处理的是一个二分类问题,
1、为什么Prediction的结果是一个有9个元素的数组?我猜测预测的是不是inference数据集中9位uid得糖尿病的概率?如果是这样的话如何去检查预测的准确度呢?
2、为什么每次运行Prediction的结果都是不同的?

how the complete tree form in random forest demo_local,py

0: {0: {'processed': True}, 1: {'processed': True}, 2: {'processed': True}, 3: {'processed': True, 'is_leaf': True}, 4: {'processed': True}, 5: {'processed': True, 'is_leaf': True}, 6: {'processed': True}, 9: {'processed': True, 'is_leaf': True}, 10: {'processed': True}, 13: {'processed': True, 'is_leaf': True}, 14: {'processed': True}, 21: {'processed': True, 'is_leaf': True}, 22: {'processed': True, 'is_leaf': True}, 29: {'processed': True, 'is_leaf': True}, 30: {'processed': True, 'is_leaf': True}}}
how with this information we can analyse the tree,which one is root which one is leaf

请问纵向逻辑回归怎么用fedlearn实现呢?

Is your feature request related to a problem? Please describe.
A clear and concise description of what the problem is. Ex. I'm always frustrated when [...]

Describe the solution you'd like
A clear and concise description of what you want to happen.

Describe alternatives you've considered
A clear and concise description of any alternative solutions or features you've considered.

Additional context
Add any other context or screenshots about the feature request here.

Need fix for core.encrypt.RandomizedIterativeAffine module for combinatory operations

I found one problem of core.encrypt.RandomizedIterativeAffine module.
When combinatory scalar products and additions are applied to the encrypted objects, the result may turn wrong.
For example, with the inputs below,

p1= 4592.146866155027
p2= 532.2228109095383
k1= 872.0311515320057
k2= -1033.819189454349

the decrypted result of ([p1]*k1)*k2+[p2] is -532.2228107452393
I also tried with other inputs. It seems that the decryption of ([p1]*k1)*k2+[p2] generally gives me the value of -p2

Failure to set up the local environment by running environment_checklist.sh

Below is the error message that I got when I tried to set up the local envrionment by running environment_checklist.sh. Some of the dependency failed to be installed.

(py36) * xuebin.wang$ sh environment_checklist.sh 

Run the checklist...

environment_checklist.sh: line 6: yum: command not found

1. check development env...

environment_checklist.sh: line 11: yum: command not found

environment_checklist.sh: line 12: yum: command not found

Development env checking finished.

2. check python 3.6 env...

environment_checklist.sh: line 20: yum: command not found

Python 3.6 checking finished.

3. check paillier packages...

environment_checklist.sh: line 28: yum: command not found

Collecting gmpy2

  Using cached gmpy2-2.0.8.zip (280 kB)

Collecting phe

  Using cached phe-1.4.0.tar.gz (35 kB)

Building wheels for collected packages: gmpy2, phe

  Building wheel for gmpy2 (setup.py) ... error

  ERROR: Command errored out with exit status 1:

   command: /Users/xuebin.wang/opt/anaconda3/envs/py36/bin/python3 -u -c 'import io, os, sys, setuptools, tokenize; sys.argv[0] = '"'"'/private/var/folders/v6/bhhlhsqs21x3rlqfctn9tbr80000gp/T/pip-install-tus8ysrk/gmpy2_804b98d559b94d669dd65ed828081209/setup.py'"'"'; __file__='"'"'/private/var/folders/v6/bhhlhsqs21x3rlqfctn9tbr80000gp/T/pip-install-tus8ysrk/gmpy2_804b98d559b94d669dd65ed828081209/setup.py'"'"';f = getattr(tokenize, '"'"'open'"'"', open)(__file__) if os.path.exists(__file__) else io.StringIO('"'"'from setuptools import setup; setup()'"'"');code = f.read().replace('"'"'\r\n'"'"', '"'"'\n'"'"');f.close();exec(compile(code, __file__, '"'"'exec'"'"'))' bdist_wheel -d /private/var/folders/v6/bhhlhsqs21x3rlqfctn9tbr80000gp/T/pip-wheel-qxmh5v9h

       cwd: /private/var/folders/v6/bhhlhsqs21x3rlqfctn9tbr80000gp/T/pip-install-tus8ysrk/gmpy2_804b98d559b94d669dd65ed828081209/

  Complete output (14 lines):

  running bdist_wheel

  running build

  running build_ext

  building 'gmpy2' extension

  creating build

  creating build/temp.macosx-10.9-x86_64-3.6

  creating build/temp.macosx-10.9-x86_64-3.6/src

  gcc -Wno-unused-result -Wsign-compare -Wunreachable-code -DNDEBUG -g -fwrapv -O3 -Wall -Wstrict-prototypes -I/Users/xuebin.wang/opt/anaconda3/envs/py36/include -arch x86_64 -I/Users/xuebin.wang/opt/anaconda3/envs/py36/include -arch x86_64 -DWITHMPFR -DWITHMPC -I/Users/xuebin.wang/opt/anaconda3/envs/py36/include/python3.6m -c src/gmpy2.c -o build/temp.macosx-10.9-x86_64-3.6/src/gmpy2.o

  In file included from src/gmpy2.c:426:

  src/gmpy.h:106:12: fatal error: 'gmp.h' file not found

  #  include "gmp.h"

             ^~~~~~~

  1 error generated.

  error: command 'gcc' failed with exit status 1

  ----------------------------------------

  ERROR: Failed building wheel for gmpy2

  Running setup.py clean for gmpy2

  Building wheel for phe (setup.py) ... done

  Created wheel for phe: filename=phe-1.4.0-py2.py3-none-any.whl size=37362 sha256=1b08747fb6775a103f53ac225fefc0e13206acabbdeeff65bd15bec56a809975

  Stored in directory: /Users/xuebin.wang/Library/Caches/pip/wheels/61/2c/64/036a5dd340f2608a6d3c7cb8e88333a841d7ad3457ca9fd7f9

Successfully built phe

Failed to build gmpy2

Installing collected packages: phe, gmpy2

    Running setup.py install for gmpy2 ... error

    ERROR: Command errored out with exit status 1:

     command: /Users/xuebin.wang/opt/anaconda3/envs/py36/bin/python3 -u -c 'import io, os, sys, setuptools, tokenize; sys.argv[0] = '"'"'/private/var/folders/v6/bhhlhsqs21x3rlqfctn9tbr80000gp/T/pip-install-tus8ysrk/gmpy2_804b98d559b94d669dd65ed828081209/setup.py'"'"'; __file__='"'"'/private/var/folders/v6/bhhlhsqs21x3rlqfctn9tbr80000gp/T/pip-install-tus8ysrk/gmpy2_804b98d559b94d669dd65ed828081209/setup.py'"'"';f = getattr(tokenize, '"'"'open'"'"', open)(__file__) if os.path.exists(__file__) else io.StringIO('"'"'from setuptools import setup; setup()'"'"');code = f.read().replace('"'"'\r\n'"'"', '"'"'\n'"'"');f.close();exec(compile(code, __file__, '"'"'exec'"'"'))' install --record /private/var/folders/v6/bhhlhsqs21x3rlqfctn9tbr80000gp/T/pip-record-o053dhrt/install-record.txt --single-version-externally-managed --compile --install-headers /Users/xuebin.wang/opt/anaconda3/envs/py36/include/python3.6m/gmpy2

         cwd: /private/var/folders/v6/bhhlhsqs21x3rlqfctn9tbr80000gp/T/pip-install-tus8ysrk/gmpy2_804b98d559b94d669dd65ed828081209/

    Complete output (14 lines):

    running install

    running build

    running build_ext

    building 'gmpy2' extension

    creating build

    creating build/temp.macosx-10.9-x86_64-3.6

    creating build/temp.macosx-10.9-x86_64-3.6/src

    gcc -Wno-unused-result -Wsign-compare -Wunreachable-code -DNDEBUG -g -fwrapv -O3 -Wall -Wstrict-prototypes -I/Users/xuebin.wang/opt/anaconda3/envs/py36/include -arch x86_64 -I/Users/xuebin.wang/opt/anaconda3/envs/py36/include -arch x86_64 -DWITHMPFR -DWITHMPC -I/Users/xuebin.wang/opt/anaconda3/envs/py36/include/python3.6m -c src/gmpy2.c -o build/temp.macosx-10.9-x86_64-3.6/src/gmpy2.o

    In file included from src/gmpy2.c:426:

    src/gmpy.h:106:12: fatal error: 'gmp.h' file not found

    ```#  include "gmp.h"```

               ^~~~~~~

    1 error generated.

    error: command 'gcc' failed with exit status 1

    ----------------------------------------

ERROR: Command errored out with exit status 1: /Users/xuebin.wang/opt/anaconda3/envs/py36/bin/python3 -u -c 'import io, os, sys, setuptools, tokenize; sys.argv[0] = '"'"'/private/var/folders/v6/bhhlhsqs21x3rlqfctn9tbr80000gp/T/pip-install-tus8ysrk/gmpy2_804b98d559b94d669dd65ed828081209/setup.py'"'"'; __file__='"'"'/private/var/folders/v6/bhhlhsqs21x3rlqfctn9tbr80000gp/T/pip-install-tus8ysrk/gmpy2_804b98d559b94d669dd65ed828081209/setup.py'"'"';f = getattr(tokenize, '"'"'open'"'"', open)(__file__) if os.path.exists(__file__) else io.StringIO('"'"'from setuptools import setup; setup()'"'"');code = f.read().replace('"'"'\r\n'"'"', '"'"'\n'"'"');f.close();exec(compile(code, __file__, '"'"'exec'"'"'))' install --record /private/var/folders/v6/bhhlhsqs21x3rlqfctn9tbr80000gp/T/pip-record-o053dhrt/install-record.txt --single-version-externally-managed --compile --install-headers /Users/xuebin.wang/opt/anaconda3/envs/py36/include/python3.6m/gmpy2 Check the logs for full command output.

Paillier packages checking finished.

4. check numpy/scipy related...

Collecting intel-numpy

  Downloading intel_numpy-1.15.1-cp36-cp36m-macosx_10_12_intel.macosx_10_12_x86_64.whl (6.0 MB)

     |████████████████████████████████| 6.0 MB 3.3 MB/s 

Collecting intel-scipy

  Downloading intel_scipy-1.1.0-cp36-cp36m-macosx_10_12_intel.macosx_10_12_x86_64.whl (28.2 MB)

     |████████████████████████████████| 28.2 MB 18.4 MB/s 

Collecting icc-rt

  Downloading icc_rt-2019.0-py2.py3-none-macosx_10_12_intel.macosx_10_12_x86_64.whl (9.5 MB)

     |████████████████████████████████| 9.5 MB 34.1 MB/s 

Collecting mkl-fft

  Downloading mkl_fft-1.0.6-cp36-cp36m-macosx_10_12_intel.macosx_10_12_x86_64.whl (232 kB)

     |████████████████████████████████| 232 kB 29.0 MB/s 

Collecting mkl

  Downloading mkl-2019.0-py2.py3-none-macosx_10_12_intel.macosx_10_12_x86_64.whl (193.8 MB)

     |████████████████████████████████| 193.8 MB 28.7 MB/s 

Collecting tbb4py

  Downloading tbb4py-2019.0-cp36-cp36m-macosx_10_12_intel.macosx_10_12_x86_64.whl (47 kB)

     |████████████████████████████████| 47 kB 13.7 MB/s 

Collecting mkl-random

  Downloading mkl_random-1.0.1.1-cp36-cp36m-macosx_10_12_intel.macosx_10_12_x86_64.whl (393 kB)

     |████████████████████████████████| 393 kB 43.2 MB/s 

Collecting intel-openmp

  Downloading intel_openmp-2019.0-py2.py3-none-macosx_10_12_intel.macosx_10_12_x86_64.whl (1.1 MB)

     |████████████████████████████████| 1.1 MB 22.5 MB/s 

Collecting tbb==2019.*

  Downloading tbb-2019.0-py2.py3-none-macosx_10_12_intel.macosx_10_12_x86_64.whl (565 kB)

     |████████████████████████████████| 565 kB 21.6 MB/s 

Installing collected packages: tbb, intel-openmp, tbb4py, mkl-random, mkl-fft, mkl, icc-rt, intel-numpy, intel-scipy

Successfully installed icc-rt-2019.0 intel-numpy-1.15.1 intel-openmp-2019.0 intel-scipy-1.1.0 mkl-2019.0 mkl-fft-1.0.6 mkl-random-1.0.1.1 tbb-2019.0 tbb4py-2019.0

Collecting grpcio

  Downloading grpcio-1.39.0-cp36-cp36m-macosx_10_10_x86_64.whl (3.9 MB)

     |████████████████████████████████| 3.9 MB 4.0 MB/s 

Collecting grpcio-tools

  Downloading grpcio_tools-1.39.0-cp36-cp36m-macosx_10_10_x86_64.whl (2.0 MB)

     |████████████████████████████████| 2.0 MB 19.1 MB/s 

Collecting six>=1.5.2

  Using cached six-1.16.0-py2.py3-none-any.whl (11 kB)

Requirement already satisfied: setuptools in /Users/xuebin.wang/opt/anaconda3/envs/py36/lib/python3.6/site-packages (from grpcio-tools) (52.0.0.post20210125)

Collecting protobuf<4.0dev,>=3.5.0.post1

  Downloading protobuf-3.17.3-cp36-cp36m-macosx_10_9_x86_64.whl (1.0 MB)

     |████████████████████████████████| 1.0 MB 25.4 MB/s 

Installing collected packages: six, protobuf, grpcio, grpcio-tools

Successfully installed grpcio-1.39.0 grpcio-tools-1.39.0 protobuf-3.17.3 six-1.16.0

Incompatible package version in `environment_checklist.sh`

Problem:
The intel-numpy package is incompatible with pandas package which are installed by running the file environment_checklist.sh

Details:
The version of the installed intel-numpy is 1.15.1. The version of the installed pandas package is incompatible with numpy < 1.15.4

Reproduce the error:

  1. Under the environment of Python 3.6.13
  2. Go to the root repository of fedlearn-algo
  3. Install the python packages by running ./environment_checklist.sh
  4. See this error when running command python demos/random_forest/client.py -I 0 -C demos/random_forest/config.py

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.