Homomorphically Encrypted Deep Learning Library
The goal of this library is to give the user the ability to efficiently train Deep Learning models in a homomorphically encrypted state, without needing to be an expert in either. Furthermore, by understanding the characteristics of both Deep Learning and Homomorphic Encryption, we hope to find a very performant combinations of the two. See the notebooks folder for tutorials on how to use the library. Also, check the main demonstration from the Sonar project.
The fastest way to get started is to use the pre-assembled Docker image (works on all major operating systems). Alternatively, one can manually set up all the dependencies and develop locally.
Install Docker following the instructions on the website.
For macOS users with Homebrew installed, use:
brew cask install docker
open -a docker
You can ensure that Docker is properly installed and running by checking: docker --version
.
First, clone this repository and navigate into its folder:
git clone https://github.com/OpenMined/PySyft.git
cd PySyft
Now, start a container based on openmined/pysyft:
make docker-build
make docker-run
In this container you'll be able to open a Python shell, import the library and develop with it.
However, if you want to use Jupyter, try the provided notebooks, and make changes to the source, you should create your personal development image:
make docker-build-dev
make docker-run image=openmined/pysyft-dev:local
Inside the container you can run any make targets such as test
or notebook
.
- Make sure Python 3.5+ in installed on your machine by checking
python3 --version
- Install the base libraries listed here
- Set up a virtual environment for the Python libraries (optional, recommended)
- None if you are using anaconda
The Python dependencies are listed in requirements.txt
and can be installed through
pip3 install -r requirements.txt
Additional test and development dependencies such as scikit-learn and Jupyter are
listed in dev-requirements.txt
:
pip3 install -r dev-requirements.txt
If you simply want to to use PySyft, it is enough to install the library with:
python3 setup.py install
Instead, if you want to make changes to the source, fix bugs, add features etc., it's recommended to install PySyft in development mode:
python3 setup.py develop
Set up a new virutal environment (here called openmind), the former for user, the latter for developers.
install_for_anaconda_users.bat openmined install
install_for_anaconda_users.sh openmined develop
Run below, where "mode" is either "install" or "develop"
conda install -c conda-forge gmpy2
pip install -r requirements.txt
python setup.py mode
The make target notebook
will launch a Jupyter server (either locally or in the container).
make notebook
The make target test
will run all tests with pytest
and flake8
(either locally or in the container).
make test
python setup.py test
If you are interested in contributing to Syft, first check out our Contributor Quickstart Guide and then sign into our Slack Team channel #team_pysyft to let us know which projects sound interesting to you! (or propose your own!).
As both Homomorphic Encryption and Deep Learning are still somewhat sparsely known, below is a curated list of relevant reading materials to bring you up to speed with the major concepts and themes of these exciting fields.
- How to build a fully encrypted AI model (trained on unencrypted data)
- Simple secure protocol for federated machine learning (using a python-paillier library)
- Prototype for using encrypted AI to preserve user privacy (in python)
- Manual for Using Homomorphic Encryption for Bioinformatics (paper)
- A Comparison of the Homomorphic Encryption Schemes
- Homomorphic Encryption API Software Library
- Faster Homomorphic Function Evaluation using Non-Integral Base Encoding
- Encrypted accelerated least squares regression
- PSML 2017 - Abstracts
- Encrypted statistical machine learning: new privacy preserving methods
- A review of homomorphic encryption and software tools for encrypted statistical machine learning
- Privacy-Preserving Distributed Linear Regression on High-Dimensional Data
- Secure Computation With Fixed-Point Numbers
- Scalable and secure logistic regression via homomorphic encryption
- ML Confidential: Machine Learning on Encrypted Data
- CryptoNets: Applying Neural Networks to Encrypted Data with High Throughput and Accuracy
- Privacy-Preserving Visual Learning Using Doubly Permuted Homomorphic Encryption
- HomomorphicEncryption - An R package for fully homomorphic encryption
- A Secure Multiparty Computation (MPC) protocol for computing linear regression on vertically distributed datasets
- Dask Tutorial
- Charm-crypto
- Private Deep Learning with MPC - A Simple Tutorial from Scratch
- Secret Sharing, Part 1 - Distributing Trust and Work
- Secret Sharing, Part 2 - Efficient Sharing with the Fast Fourier Transform
- Distributed machine learning and partially homomorphic encryption (Part 1)
- Distributed machine learning and partially homomorphic encryption (Part 2)
- Tutorial: How to verify crowdsourced training data using a Known Answer Review Policy
Apache-2.0 by OpenMined contributors