Skip to content
A ledger for private and secure peer to peer machine learning
Go Python Shell
Branch: master
Clone or download
Latest commit aabdd75 Apr 25, 2019
Type Name Latest commit message Commit time
Failed to load latest commit information.
CentralBlockML Added non-networking blockchain code in python with inversion Jun 13, 2018
FedSys Random sample - Final changes Feb 15, 2019
LocalPerfTest change x-axis of graph to go up to 14,000 Jan 28, 2019
ML Small change Feb 11, 2019
azure-deploy Add DistML repo to install script and delete redundant scripts Jan 17, 2019
azure azure readme update Apr 25, 2019
data A single-node BlockChain Apr 19, 2018
eval_FT Merge eval_vrf and FT Mar 8, 2019
eval_noise_krum Random sample - Final changes Feb 15, 2019
eval_poison_nsamples Random sample - Final changes Feb 15, 2019
eval_privacy_utility_krum Privacy update Feb 15, 2019
eval_vrf Merge eval_vrf and FT Mar 8, 2019
global-deploy-eval graph and logs for baseline results in global deploy Jan 30, 2019
keyGeneration Azure setup automation scripts + runBiscotti restructure Dec 25, 2018
nsdi-eval Merge with krum Mar 9, 2019
usenix-eval Merge eval_vrf and FT Mar 8, 2019
vrf-reference Update vrf subdirectory README Jun 12, 2018
.gitignore change x-axis of graph to go up to 14,000 Jan 28, 2019
Biscotti KRUM barebones - Timeout bug still there Jan 28, 2019
vrf_main.go add miners and noisers to vrf output. still need noise to use secret key Aug 22, 2018

Biscotti: machine learning on the blockchain

Biscotti is a fully decentralized peer-to-peer system for multi-party machine learning (ML). Peers participate in the learning process by contributing (possibly private) datasets and coordinating in training a global model of the union of their datasets. Biscotti uses blockchain primitives for coordination between peers and relies on differential privacy and cryptography techniques to provide privacy and security guarantees to peers. For more details about Biscotti's design, see our Arxiv paper.


We use the the go-python library for interfacing between the distributed system code in Go and the ML logic in Python. Unfortunately, Go-python doesn't support Python versions > 2.7.12. Please ensure that your default OS Python version is 2.7.12.

Setting up the environment

Inside azure/azure-setup, there is an install script called Run this script to install Go and all the related dependencies. The script also clones this repo for you.

Running Biscotti

Local deployment

Go to the DistSys folder. Run the script with:

bash <numNodes> <dataset>

For example

bash 10 creditcard

Non-local deployment

  1. You must create a file in azure/azure-conf containing the list of all IPs of the peer nodes.

  2. To deploy Biscotti on different machines, you need to have set up ssh-access to all other machines from your local machine using your public key.

  3. On each machine, install all the dependencies using the script above.

  4. Deploy Biscotti on your machines by running the runBiscotti script in azure/azure-run.

bash <nodesInEachVM> <totalNodes> <hostFileName> <dataset>

For example, if you want to deploy 100 nodes across 20 machines using the mnist dataset, then run the script as follows:

bash 5 100 hostFile mnist

You can’t perform that action at this time.