Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Binary file added .DS_Store
Binary file not shown.
32,563 changes: 32,563 additions & 0 deletions ADULT.csv

Large diffs are not rendered by default.

141 changes: 138 additions & 3 deletions FL_client.ipynb
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
"cells": [
{
"cell_type": "code",
"execution_count": 35,
"execution_count": 1,
"id": "66e82ae0",
"metadata": {},
"outputs": [
Expand Down Expand Up @@ -102,6 +102,141 @@
"\n",
"sy.networks"
]
},
{
"attachments": {},
"cell_type": "markdown",
"id": "2fce24ea",
"metadata": {},
"source": [
"VFL Concpet overview"
]
},
{
"cell_type": "code",
"execution_count": 3,
"id": "b67b50a0",
"metadata": {},
"outputs": [],
"source": [
"class SplitNN:\n",
" def __init__(self, models, optimizers):\n",
" self.models = models\n",
" self.optimizers = optimizers\n",
"\n",
" self.data = []\n",
" self.remote_tensors = []\n",
"\n",
" def forward(self, x):\n",
" data = []\n",
" remote_tensors = []\n",
"\n",
" data.append(self.models[0](x))\n",
"\n",
" if data[-1].location == self.models[1].location:\n",
" remote_tensors.append(data[-1].detach().requires_grad_())\n",
" else:\n",
" remote_tensors.append(\n",
" data[-1].detach().move(self.models[1].location).requires_grad_()\n",
" )\n",
"\n",
" i = 1\n",
" while i < (len(models) - 1):\n",
" data.append(self.models[i](remote_tensors[-1]))\n",
"\n",
" if data[-1].location == self.models[i + 1].location:\n",
" remote_tensors.append(data[-1].detach().requires_grad_())\n",
" else:\n",
" remote_tensors.append(\n",
" data[-1].detach().move(self.models[i + 1].location).requires_grad_()\n",
" )\n",
"\n",
" i += 1\n",
"\n",
" data.append(self.models[i](remote_tensors[-1]))\n",
"\n",
" self.data = data\n",
" self.remote_tensors = remote_tensors\n",
"\n",
" return data[-1]\n",
"\n",
" def backward(self):\n",
" for i in range(len(models) - 2, -1, -1):\n",
" if self.remote_tensors[i].location == self.data[i].location:\n",
" grads = self.remote_tensors[i].grad.copy()\n",
" else:\n",
" grads = self.remote_tensors[i].grad.copy().move(self.data[i].location)\n",
" \n",
" self.data[i].backward(grads)\n",
"\n",
" def zero_grads(self):\n",
" for opt in self.optimizers:\n",
" opt.zero_grad()\n",
"\n",
" def step(self):\n",
" for opt in self.optimizers:\n",
" opt.step()"
]
},
{
"cell_type": "code",
"execution_count": 7,
"id": "43782bee",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Defaulting to user installation because normal site-packages is not writeable\n",
"Requirement already satisfied: torchvision in /home/vscode/.local/lib/python3.9/site-packages (0.14.1)\n",
"Requirement already satisfied: requests in /home/vscode/.local/lib/python3.9/site-packages (from torchvision) (2.26.0)\n",
"Requirement already satisfied: pillow!=8.3.*,>=5.3.0 in /home/vscode/.local/lib/python3.9/site-packages (from torchvision) (9.4.0)\n",
"Requirement already satisfied: torch in /home/vscode/.local/lib/python3.9/site-packages (from torchvision) (1.10.0)\n",
"Requirement already satisfied: typing-extensions in /home/vscode/.local/lib/python3.9/site-packages (from torchvision) (4.0.0)\n",
"Requirement already satisfied: numpy in /home/vscode/.local/lib/python3.9/site-packages (from torchvision) (1.21.4)\n",
"Requirement already satisfied: charset-normalizer~=2.0.0 in /home/vscode/.local/lib/python3.9/site-packages (from requests->torchvision) (2.0.12)\n",
"Requirement already satisfied: certifi>=2017.4.17 in /home/vscode/.local/lib/python3.9/site-packages (from requests->torchvision) (2022.12.7)\n",
"Requirement already satisfied: urllib3<1.27,>=1.21.1 in /home/vscode/.local/lib/python3.9/site-packages (from requests->torchvision) (1.26.13)\n",
"Requirement already satisfied: idna<4,>=2.5 in /home/vscode/.local/lib/python3.9/site-packages (from requests->torchvision) (3.4)\n"
]
},
{
"ename": "ImportError",
"evalue": "cannot import name 'QuantStub' from 'torch.ao.quantization' (/home/vscode/.local/lib/python3.9/site-packages/torch/ao/quantization/__init__.py)",
"output_type": "error",
"traceback": [
"\u001b[0;31m---------------------------------------------------------------------------\u001b[0m",
"\u001b[0;31mImportError\u001b[0m Traceback (most recent call last)",
"Cell \u001b[0;32mIn[7], line 6\u001b[0m\n\u001b[1;32m 3\u001b[0m sys\u001b[39m.\u001b[39mpath\u001b[39m.\u001b[39mappend(\u001b[39m'\u001b[39m\u001b[39m../\u001b[39m\u001b[39m'\u001b[39m)\n\u001b[1;32m 5\u001b[0m \u001b[39mimport\u001b[39;00m \u001b[39mtorch\u001b[39;00m\n\u001b[0;32m----> 6\u001b[0m \u001b[39mfrom\u001b[39;00m \u001b[39mtorchvision\u001b[39;00m \u001b[39mimport\u001b[39;00m datasets, transforms\n\u001b[1;32m 7\u001b[0m \u001b[39mfrom\u001b[39;00m \u001b[39mtorch\u001b[39;00m \u001b[39mimport\u001b[39;00m nn, optim\n\u001b[1;32m 8\u001b[0m \u001b[39mfrom\u001b[39;00m \u001b[39mtorchvision\u001b[39;00m\u001b[39m.\u001b[39;00m\u001b[39mdatasets\u001b[39;00m \u001b[39mimport\u001b[39;00m MNIST\n",
"File \u001b[0;32m~/.local/lib/python3.9/site-packages/torchvision/__init__.py:5\u001b[0m\n\u001b[1;32m 2\u001b[0m \u001b[39mimport\u001b[39;00m \u001b[39mwarnings\u001b[39;00m\n\u001b[1;32m 4\u001b[0m \u001b[39mimport\u001b[39;00m \u001b[39mtorch\u001b[39;00m\n\u001b[0;32m----> 5\u001b[0m \u001b[39mfrom\u001b[39;00m \u001b[39mtorchvision\u001b[39;00m \u001b[39mimport\u001b[39;00m datasets, io, models, ops, transforms, utils\n\u001b[1;32m 7\u001b[0m \u001b[39mfrom\u001b[39;00m \u001b[39m.\u001b[39;00m\u001b[39mextension\u001b[39;00m \u001b[39mimport\u001b[39;00m _HAS_OPS\n\u001b[1;32m 9\u001b[0m \u001b[39mtry\u001b[39;00m:\n",
"File \u001b[0;32m~/.local/lib/python3.9/site-packages/torchvision/models/__init__.py:17\u001b[0m\n\u001b[1;32m 15\u001b[0m \u001b[39mfrom\u001b[39;00m \u001b[39m.\u001b[39;00m\u001b[39mswin_transformer\u001b[39;00m \u001b[39mimport\u001b[39;00m \u001b[39m*\u001b[39m\n\u001b[1;32m 16\u001b[0m \u001b[39mfrom\u001b[39;00m \u001b[39m.\u001b[39;00m\u001b[39mmaxvit\u001b[39;00m \u001b[39mimport\u001b[39;00m \u001b[39m*\u001b[39m\n\u001b[0;32m---> 17\u001b[0m \u001b[39mfrom\u001b[39;00m \u001b[39m.\u001b[39;00m \u001b[39mimport\u001b[39;00m detection, optical_flow, quantization, segmentation, video\n\u001b[1;32m 18\u001b[0m \u001b[39mfrom\u001b[39;00m \u001b[39m.\u001b[39;00m\u001b[39m_api\u001b[39;00m \u001b[39mimport\u001b[39;00m get_model, get_model_builder, get_model_weights, get_weight, list_models\n",
"File \u001b[0;32m~/.local/lib/python3.9/site-packages/torchvision/models/quantization/__init__.py:3\u001b[0m\n\u001b[1;32m 1\u001b[0m \u001b[39mfrom\u001b[39;00m \u001b[39m.\u001b[39;00m\u001b[39mgooglenet\u001b[39;00m \u001b[39mimport\u001b[39;00m \u001b[39m*\u001b[39m\n\u001b[1;32m 2\u001b[0m \u001b[39mfrom\u001b[39;00m \u001b[39m.\u001b[39;00m\u001b[39minception\u001b[39;00m \u001b[39mimport\u001b[39;00m \u001b[39m*\u001b[39m\n\u001b[0;32m----> 3\u001b[0m \u001b[39mfrom\u001b[39;00m \u001b[39m.\u001b[39;00m\u001b[39mmobilenet\u001b[39;00m \u001b[39mimport\u001b[39;00m \u001b[39m*\u001b[39m\n\u001b[1;32m 4\u001b[0m \u001b[39mfrom\u001b[39;00m \u001b[39m.\u001b[39;00m\u001b[39mresnet\u001b[39;00m \u001b[39mimport\u001b[39;00m \u001b[39m*\u001b[39m\n\u001b[1;32m 5\u001b[0m \u001b[39mfrom\u001b[39;00m \u001b[39m.\u001b[39;00m\u001b[39mshufflenetv2\u001b[39;00m \u001b[39mimport\u001b[39;00m \u001b[39m*\u001b[39m\n",
"File \u001b[0;32m~/.local/lib/python3.9/site-packages/torchvision/models/quantization/mobilenet.py:1\u001b[0m\n\u001b[0;32m----> 1\u001b[0m \u001b[39mfrom\u001b[39;00m \u001b[39m.\u001b[39;00m\u001b[39mmobilenetv2\u001b[39;00m \u001b[39mimport\u001b[39;00m \u001b[39m*\u001b[39m \u001b[39m# noqa: F401, F403\u001b[39;00m\n\u001b[1;32m 2\u001b[0m \u001b[39mfrom\u001b[39;00m \u001b[39m.\u001b[39;00m\u001b[39mmobilenetv3\u001b[39;00m \u001b[39mimport\u001b[39;00m \u001b[39m*\u001b[39m \u001b[39m# noqa: F401, F403\u001b[39;00m\n\u001b[1;32m 3\u001b[0m \u001b[39mfrom\u001b[39;00m \u001b[39m.\u001b[39;00m\u001b[39mmobilenetv2\u001b[39;00m \u001b[39mimport\u001b[39;00m __all__ \u001b[39mas\u001b[39;00m mv2_all\n",
"File \u001b[0;32m~/.local/lib/python3.9/site-packages/torchvision/models/quantization/mobilenetv2.py:5\u001b[0m\n\u001b[1;32m 2\u001b[0m \u001b[39mfrom\u001b[39;00m \u001b[39mtyping\u001b[39;00m \u001b[39mimport\u001b[39;00m Any, Optional, Union\n\u001b[1;32m 4\u001b[0m \u001b[39mfrom\u001b[39;00m \u001b[39mtorch\u001b[39;00m \u001b[39mimport\u001b[39;00m nn, Tensor\n\u001b[0;32m----> 5\u001b[0m \u001b[39mfrom\u001b[39;00m \u001b[39mtorch\u001b[39;00m\u001b[39m.\u001b[39;00m\u001b[39mao\u001b[39;00m\u001b[39m.\u001b[39;00m\u001b[39mquantization\u001b[39;00m \u001b[39mimport\u001b[39;00m DeQuantStub, QuantStub\n\u001b[1;32m 6\u001b[0m \u001b[39mfrom\u001b[39;00m \u001b[39mtorchvision\u001b[39;00m\u001b[39m.\u001b[39;00m\u001b[39mmodels\u001b[39;00m\u001b[39m.\u001b[39;00m\u001b[39mmobilenetv2\u001b[39;00m \u001b[39mimport\u001b[39;00m InvertedResidual, MobileNet_V2_Weights, MobileNetV2\n\u001b[1;32m 8\u001b[0m \u001b[39mfrom\u001b[39;00m \u001b[39m.\u001b[39;00m\u001b[39m.\u001b[39;00m\u001b[39m.\u001b[39;00m\u001b[39mops\u001b[39;00m\u001b[39m.\u001b[39;00m\u001b[39mmisc\u001b[39;00m \u001b[39mimport\u001b[39;00m Conv2dNormActivation\n",
"\u001b[0;31mImportError\u001b[0m: cannot import name 'QuantStub' from 'torch.ao.quantization' (/home/vscode/.local/lib/python3.9/site-packages/torch/ao/quantization/__init__.py)"
]
}
],
"source": [
"!pip3 install torchvision\n",
"import sys\n",
"sys.path.append('../')\n",
"\n",
"import torch\n",
"from torchvision import datasets, transforms\n",
"from torch import nn, optim\n",
"from torchvision.datasets import MNIST\n",
"from torchvision.transforms import ToTensor\n",
"\n",
"import syft as sy\n",
"\n",
"from src.dataloader import VerticalDataLoader\n",
"from src.psi.util import Client, Server\n",
"from src.utils import add_ids\n",
"\n",
"hook = sy.TorchHook(torch)"
]
}
],
"metadata": {
Expand All @@ -120,11 +255,11 @@
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.8.9 (default, Apr 13 2022, 08:48:06) \n[Clang 13.1.6 (clang-1316.0.21.2.5)]"
"version": "3.9.2 (default, Feb 28 2021, 17:03:44) \n[GCC 10.2.1 20210110]"
},
"vscode": {
"interpreter": {
"hash": "31f2aee4e71d21fbe5cf8b01ff0e069b9275f58929596ceb00d14d90e3e16cd6"
"hash": "eb4a0ac80907d7f44e1a5e88d3d3381b33e3dbedd3a24d113e876f30a0c46bee"
}
}
},
Expand Down
1 change: 1 addition & 0 deletions FL_workflow.drawio
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
<mxfile host="app.diagrams.net" modified="2023-01-17T21:08:20.869Z" agent="5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/108.0.0.0 Safari/537.36" version="20.8.3" etag="Mcn6eRSBAAneujkiZRi3" type="device"><diagram id="3lp8bSQzVlJqxHswagng" name="第 1 页">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</diagram></mxfile>
Binary file modified FL_workflow.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
94 changes: 94 additions & 0 deletions Pipfile
Original file line number Diff line number Diff line change
@@ -0,0 +1,94 @@
[[source]]
url = "https://pypi.org/simple"
verify_ssl = true
name = "pypi"

[packages]
ascii-magic = "==1.6"
asttokens = "==2.2.1"
attrs = "==22.2.0"
autodp = "==0.2"
backcall = "==0.2.0"
bcrypt = "==3.2.0"
cachetools = "==4.2.4"
certifi = "==2022.12.7"
cffi = "==1.15.1"
charset-normalizer = "==2.0.12"
colorama = "==0.4.6"
comm = "==0.1.2"
debugpy = "==1.6.5"
decorator = "==5.1.1"
dnspython = "==2.2.1"
email-validator = "==1.3.0"
entrypoints = "==0.4"
exceptiongroup = "==1.1.0"
executing = "==1.2.0"
forbiddenfruit = "==0.1.4"
gevent = "==21.8.0"
greenlet = "==1.1.3.post0"
idna = "==3.4"
importlib-metadata = "==4.8.2"
iniconfig = "==2.0.0"
ipykernel = "==6.19.4"
ipython = "==8.8.0"
jedi = "==0.18.2"
jupyter-client = "==7.4.8"
jupyter-core = "==5.1.2"
loguru = "==0.5.3"
matplotlib-inline = "==0.1.6"
mercurial = "==5.6.1"
mpmath = "==1.2.1"
names = "==0.3.0"
nest-asyncio = "==1.5.6"
numpy = "==1.21.4"
packaging = "==21.2"
pandas = "==1.3.4"
parso = "==0.8.3"
pexpect = "==4.8.0"
pickleshare = "==0.7.5"
pillow = "==9.4.0"
platformdirs = "==2.6.2"
pluggy = "==1.0.0"
prompt-toolkit = "==3.0.36"
protobuf = "==3.19.1"
psutil = "==5.9.4"
ptyprocess = "==0.7.0"
pure-eval = "==0.2.2"
pyarrow = "==6.0.0"
pycparser = "==2.21"
pydantic = "==1.8.2"
pygments = "==2.14.0"
pyjwt = "==2.3.0"
pymbolic = "==2021.1"
pynacl = "==1.4.0"
pyparsing = "==2.4.7"
pytest = "==7.2.0"
python-dateutil = "==2.8.2"
pytools = "==2022.1.14"
pytz = "==2022.7"
pyzmq = "==24.0.1"
requests = "==2.26.0"
requests-toolbelt = "==0.9.1"
scipy = "==1.10.0"
six = "==1.16.0"
sqlalchemy = "==1.4.27"
stack-data = "==0.6.2"
syft = "==0.6.0"
sympy = "==1.9"
tomli = "==2.0.1"
torch = "==1.10.0"
tornado = "==6.2"
tqdm = "==4.62.3"
traitlets = "==5.8.0"
typing-extensions = "==4.0.0"
urllib3 = "==1.26.13"
wcwidth = "==0.2.5"
werkzeug = "==2.0.2"
zipp = "==3.11.0"
"zope.event" = "==4.6"
"zope.interface" = "==5.5.2"

[dev-packages]

[requires]
python_version = "3.8"
Loading