diff --git a/examples/Part 0 - Introduction to Grid.ipynb b/examples/Part 0 - Introduction to PyGrid.ipynb similarity index 72% rename from examples/Part 0 - Introduction to Grid.ipynb rename to examples/Part 0 - Introduction to PyGrid.ipynb index 73a47cca1..c1ce97667 100644 --- a/examples/Part 0 - Introduction to Grid.ipynb +++ b/examples/Part 0 - Introduction to PyGrid.ipynb @@ -4,14 +4,14 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "# What is Grid?" + "# What is PyGrid?" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "OpenGrid (also known as Grid) is a collaborative network platform for data owners and data scientists who can collectively train and share AI models using the PySyft library, which extends deep learning librairies such as PyTorch.\n" + "PyGrid (also known as Grid) is a collaborative network platform for data owners and data scientists who can collectively train and share AI models using the PySyft library, which extends deep learning libraries such as PyTorch and Tensorflow.\n" ] }, { @@ -30,7 +30,7 @@ "source": [ "### Introduction\n", "\n", - "Grid platform aims to be a secure peer to peer platform used to train, manage and share models. A Grid is a collection of workers that can exchange messages and tensors in a transparent way.\n", + "PyGrid platform aims to be a secure peer to peer platform used to train, manage and share models. A Grid is a collection of workers that can exchange messages and tensors in a transparent way.\n", "\n", "\n", "Grid currently supports:\n", @@ -45,7 +45,7 @@ "* Federated Learning processes with no need to manage distributed workers directly.\n", "\n", "\n", - "[Try our tutorials to learn how to use Grid!](https://github.com/OpenMined/PyGrid/tree/dev/examples)\n" + "[Try our tutorials to learn how to use Grid!](https://github.com/OpenMined/PySyft/tree/master/examples/tutorials/grid)\n" ] }, { @@ -82,22 +82,17 @@ "source": [ "### Implementation\n", "\n", - "The Grid repository consists mainly of 3 folders:\n", - "\n", - "#### grid\n", - "\n", - "`grid` is a python framework that extends PySyft with new workers that are capable of performing remote communication via a Rest API or via websockets. Grid also adds support for deploying these new clients on different plataforms (such as Heroku).\n", - "\n", + "The PyGrid repository consists mainly of 2 folders:\n", "\n", "#### app\n", "\n", - "`apps` are basically regular Flask servers with a postgresql database. We add to these servers the ability to talk to Grid Workers, store tensors and models on the database to ensure fault tolerance.\n", + "`apps` are basically regular Flask servers with a REDIS database. We add to these servers the ability to talk to Grid Workers, store tensors and models on the database to ensure fault tolerance.\n", "\n", "The idea is that Grid Workers are a way to communicate with an app.\n", "\n", - "#### grid_gateway\n", + "#### gateway\n", "\n", - "`grid_gateway` works like a special DNS component but it will route nodes by queries instead of domain names.\n", + "`gateway` works like a special DNS component but it will route nodes by queries instead of domain names.\n", " The Grid Gateway needs to know the addresses and ids of all grid nodes connected on the Grid Network (workers that are all connected to each other).\n", "\n", "A user can talk to a Grid Gateway and seemingless perform operations on multiple remote nodes without even knowing that they exist on the network.\n" diff --git a/examples/Part 1 - Launch a Grid Node Locally.ipynb b/examples/Part 1 - Launch a PyGrid Node Locally.ipynb similarity index 92% rename from examples/Part 1 - Launch a Grid Node Locally.ipynb rename to examples/Part 1 - Launch a PyGrid Node Locally.ipynb index d93062ae8..23d27fb32 100644 --- a/examples/Part 1 - Launch a Grid Node Locally.ipynb +++ b/examples/Part 1 - Launch a PyGrid Node Locally.ipynb @@ -32,16 +32,6 @@ "pip install -r requirements.txt\n", "```\n", "\n", - "### Step 3: Make grid importable\n", - "\n", - "Install grid as a python package\n", - "\n", - "```bash\n", - "cd PyGrid\n", - "python setup.py install (or python setup.py develop)\n", - "```\n", - "\n", - "\n", "### Step 3: Start App\n", "\n", "Then, to start the app, just run the `websocket_app` script.\n", @@ -86,7 +76,7 @@ "# General dependencies\n", "import torch as th\n", "import syft as sy\n", - "import grid as gr\n", + "from syft.workers.node_client import NodeClient\n", "\n", "hook = sy.TorchHook(th)" ] @@ -98,7 +88,7 @@ "outputs": [], "source": [ "# WARNING: We should use the same id and port as the one used to start the app!!!\n", - "worker = gr.WebsocketGridClient(hook, id=\"bob\", address=\"http://localhost:3000\")\n", + "worker = NodeClient(hook, \"ws://localhost:3000\")\n", "\n", "# If you don't connect to the worker you can't send messages to it\n", "worker.connect()" @@ -192,7 +182,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.7.1" + "version": "3.7.3" } }, "nbformat": 4, diff --git a/examples/Part 2 - Launch a Grid Node on Heroku.ipynb b/examples/Part 2 - Launch a Grid Node on Heroku.ipynb deleted file mode 100644 index e4624af82..000000000 --- a/examples/Part 2 - Launch a Grid Node on Heroku.ipynb +++ /dev/null @@ -1,406 +0,0 @@ -{ - "cells": [ - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "# Part 2: Launch an OpenGrid Node On Heroku\n", - "\n", - "OpenGrid (or \"Grid\") is the platform library supporting the deployment of libraries for privacy-preserving artificial intelligence. In this tutorial, you'll learn how to deploy a grid node onto Heroku and then interact with it using PySyft.\n", - "\n", - "_WARNING: Grid nodes publish datasets online and are for EXPERIMENTAL use only. Deploy nodes at your own risk. Do not use OpenGrid with any data/models you wish to keep private._\n", - "\n", - "### Step 1: Setup an account on Heroku.\n", - "\n", - "Go to http://heroku.com and setup a username and password.\n", - "\n", - "### Step 2: Verify your Heroku Account\n", - "\n", - "So while this tutorial will exclusively use FREE nodes, Heroku still requires you to enter in a credit card in order to spin up Redis databases (which we'll need to do). You can do that at https://heroku.com/verify\n", - "\n", - "### Step 3: Install Dependencies\n", - "\n", - "You'll need to have the following dependencies installed:\n", - "\n", - "- Heroku Toolbelt: https://toolbelt.heroku.com/\n", - "- Pip: https://www.makeuseof.com/tag/install-pip-for-python/\n", - "- Git: https://gist.github.com/derhuerst/1b15ff4652a867391f03\n", - "- PySyft: https://github.com/OpenMined/PySyft\n", - "- Grid: https://github.com/OpenMined/PyGrid\n", - "\n", - "### Step 4: Login to Heroku\n", - "\n", - "Run \"heroku login\" from the command line and follow the instructions.\n", - "\n", - "### Step 5: Import Torch, PySyft, and Grid\n", - "\n", - "Now we can import the dependencies we need." - ] - }, - { - "cell_type": "code", - "execution_count": 1, - "metadata": {}, - "outputs": [], - "source": [ - "import syft as sy\n", - "import torch as th\n", - "import grid as gr\n", - "from grid.deploy import HerokuNodeDeployment\n", - "hook = sy.TorchHook(th)" - ] - }, - { - "cell_type": "code", - "execution_count": 2, - "metadata": {}, - "outputs": [], - "source": [ - "worker_id = \"openmined-trask\"\n", - "\n", - "environment = {\n", - " \"ID\": worker_id,\n", - " \"GRID_NETWORK_URL\": \"http://opengridnetwork.herokuapp.com\",\n", - " \"ADDRESS\": \"http://{}.herokuapp.com/\".format(worker_id)\n", - "}\n", - "\n", - "node_component = HerokuNodeDeployment(worker_id, env_vars=environment)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Step 6: Launch and Connect to a Worker\n", - "\n", - "Then you can run the code below - this will run various scripts to launch a node on heroku and then connect to it. If the script errors, just follow the instructions to correct the error and re-run it." - ] - }, - { - "cell_type": "code", - "execution_count": 3, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Step 0: Checking Dependencies\n", - "\tChecking for git dependency...DONE!\n", - "\tChecking for heroku --version dependency...DONE!\n", - "\tChecking for pip dependency...DONE!\n", - "\tChecking to see if heroku is logged in...DONE!\n", - "\n", - "Step 1: Making sure app name 'openmined-trask' is available\n", - "\t['https://openmined-trask.herokuapp.com/ | https://git.heroku.com/openmined-trask.git\\n']\n", - "\n", - "Step 3: Cleaning up heroku/postgres checks...\n", - "\n", - "Step 4: cleaning up git...\n", - "\t\n", - "Step 5: cloning heroku app code from Github...\n", - "\t\n", - "Step 6: copying app code from cloned repo...\n", - "\t\n", - "Step 7: removing the rest of the cloned code...\n", - "\t\n", - "Step 8: Initializing new github (for Heroku)...\n", - "\tInitialized empty Git repository in /Users/atrask/Laboratory/openmined/PyGrid/examples/tmp/.git/\n", - "\t\n", - "Step 9: Adding files to heroku github...\n", - "\t\n", - "Step 10: Committing files to heroku github...\n", - "\t[master (root-commit) 3f662be] init\n", - "\t 31 files changed, 2221 insertions(+)\n", - "\t create mode 100644 Dockerfile\n", - "\t create mode 100644 LICENSE\n", - "\t create mode 100644 Procfile\n", - "\t create mode 100644 README.md\n", - "\t create mode 100644 app/__init__.py\n", - "\t create mode 100644 app/main/__init__.py\n", - "\t create mode 100644 app/main/auth/__init__.py\n", - "\t create mode 100644 app/main/auth/session_repository.py\n", - "\t create mode 100644 app/main/auth/user_session.py\n", - "\t create mode 100644 app/main/events/__init__.py\n", - "\t create mode 100644 app/main/events/control_events.py\n", - "\t create mode 100644 app/main/events/model_events.py\n", - "\t create mode 100644 app/main/events/syft_events.py\n", - "\t create mode 100644 app/main/persistence/__init__.py\n", - "\t create mode 100644 app/main/persistence/model_manager.py\n", - "\t create mode 100644 app/main/persistence/models.py\n", - "\t create mode 100644 app/main/persistence/utils.py\n", - "\t create mode 100644 app/main/routes.py\n", - "\t create mode 100644 app/static/css/template.css\n", - "\t create mode 100644 app/static/favicon.ico\n", - "\t create mode 100644 app/static/images/background-gradient.bd2e1d32.svg\n", - "\t create mode 100644 app/static/images/grid-white.01b839c4.svg\n", - "\t create mode 100644 app/static/images/grid.01b839c4.svg\n", - "\t create mode 100644 app/static/images/mine.63c4a4b6.svg\n", - "\t create mode 100644 app/static/images/torch.logo.svg\n", - "\t create mode 100644 app/static/js/main.js\n", - "\t create mode 100644 app/templates/index.html\n", - "\t create mode 100644 entrypoint.sh\n", - "\t create mode 100644 requirements.txt\n", - "\t create mode 100644 runtime.txt\n", - "\t create mode 100644 websocket_app.py\n", - "\t\n", - "\n", - "Step 11: Pushing code to Heroku (this can take take a few seconds)......\n", - "\thttps://openmined-trask.herokuapp.com/ | https://git.heroku.com/openmined-trask.git\n", - "\t\n", - "Step 12: Creating Postgres database... (this can take a few seconds)...\n", - "\tDatabase has been created and is available\n", - "\t ! This database is empty. If upgrading, you can transfer\n", - "\t ! data from another database with pg:copy\n", - "\tCreated postgresql-infinite-30384 as DATABASE_URL\n", - "\tUse heroku addons:docs heroku-postgresql to view documentation\n", - "\t\n", - "Setting environment variable: ...\n", - "\tID: openmined-trask\n", - "\t\n", - "Setting environment variable: ...\n", - "\tGRID_NETWORK_URL: http://opengridnetwork.herokuapp.com\n", - "\t\n", - "Setting environment variable: ...\n", - "\tADDRESS: http://openmined-trask.herokuapp.com/\n", - "\t\n", - "Step 13: Pushing code to Heroku (this can take take a few minutes - if you're running this in a Jupyter Notebook you can watch progress in the notebook server terminal)......\n", - "\t\n", - "Step 14: Cleaning up!...\n", - "\t\n", - "SUCCESS: You can now connect to your app at https://openmined-trask.herokuapp.com\n" - ] - }, - { - "data": { - "text/plain": [ - "'https://openmined-trask.herokuapp.com'" - ] - }, - "execution_count": 3, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "node_component.deploy()" - ] - }, - { - "cell_type": "code", - "execution_count": 6, - "metadata": {}, - "outputs": [ - { - "ename": "ValueError", - "evalue": "scheme http is invalid", - "output_type": "error", - "traceback": [ - "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", - "\u001b[0;31mValueError\u001b[0m Traceback (most recent call last)", - "\u001b[0;32m\u001b[0m in \u001b[0;36m\u001b[0;34m()\u001b[0m\n\u001b[0;32m----> 1\u001b[0;31m \u001b[0mworker\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mgr\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mWebsocketGridClient\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mhook\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m\"http://\"\u001b[0m\u001b[0;34m+\u001b[0m\u001b[0mworker_id\u001b[0m\u001b[0;34m+\u001b[0m\u001b[0;34m\".herokuapp.com/\"\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0mid\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mworker_id\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 2\u001b[0m \u001b[0mworker\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mconnect\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", - "\u001b[0;32m/Users/atrask/anaconda/lib/python3.6/site-packages/grid/websocket_client.py\u001b[0m in \u001b[0;36m__init__\u001b[0;34m(self, hook, address, id, auth, is_client_worker, log_msgs, verbose, chunk_size)\u001b[0m\n\u001b[1;32m 78\u001b[0m \u001b[0mlog_msgs\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 79\u001b[0m \u001b[0mverbose\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m---> 80\u001b[0;31m \u001b[0;32mNone\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;31m# initial data\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 81\u001b[0m )\n\u001b[1;32m 82\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n", - "\u001b[0;32m/Users/atrask/anaconda/lib/python3.6/site-packages/syft-0.2.1a1-py3.6.egg/syft/workers/websocket_client.py\u001b[0m in \u001b[0;36m__init__\u001b[0;34m(self, hook, host, port, secure, id, is_client_worker, log_msgs, verbose, data)\u001b[0m\n\u001b[1;32m 55\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0msecure\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0msecure\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 56\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mws\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0;32mNone\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m---> 57\u001b[0;31m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mconnect\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 58\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 59\u001b[0m \u001b[0;34m@\u001b[0m\u001b[0mproperty\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", - "\u001b[0;32m/Users/atrask/anaconda/lib/python3.6/site-packages/syft-0.2.1a1-py3.6.egg/syft/workers/websocket_client.py\u001b[0m in \u001b[0;36mconnect\u001b[0;34m(self)\u001b[0m\n\u001b[1;32m 67\u001b[0m \u001b[0margs\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;34m\"sslopt\"\u001b[0m\u001b[0;34m]\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0;34m{\u001b[0m\u001b[0;34m\"cert_reqs\"\u001b[0m\u001b[0;34m:\u001b[0m \u001b[0mssl\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mCERT_NONE\u001b[0m\u001b[0;34m}\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 68\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m---> 69\u001b[0;31m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mws\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mwebsocket\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mcreate_connection\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m**\u001b[0m\u001b[0margs\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 70\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 71\u001b[0m \u001b[0;32mdef\u001b[0m \u001b[0mclose\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", - "\u001b[0;32m/Users/atrask/anaconda/lib/python3.6/site-packages/websocket/_core.py\u001b[0m in \u001b[0;36mcreate_connection\u001b[0;34m(url, timeout, class_, **options)\u001b[0m\n\u001b[1;32m 512\u001b[0m skip_utf8_validation=skip_utf8_validation, **options)\n\u001b[1;32m 513\u001b[0m \u001b[0mwebsock\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0msettimeout\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mtimeout\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0mtimeout\u001b[0m \u001b[0;32mis\u001b[0m \u001b[0;32mnot\u001b[0m \u001b[0;32mNone\u001b[0m \u001b[0;32melse\u001b[0m \u001b[0mgetdefaulttimeout\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 514\u001b[0;31m \u001b[0mwebsock\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mconnect\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0murl\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m**\u001b[0m\u001b[0moptions\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 515\u001b[0m \u001b[0;32mreturn\u001b[0m \u001b[0mwebsock\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", - "\u001b[0;32m/Users/atrask/anaconda/lib/python3.6/site-packages/websocket/_core.py\u001b[0m in \u001b[0;36mconnect\u001b[0;34m(self, url, **options)\u001b[0m\n\u001b[1;32m 221\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0msock_opt\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mtimeout\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0moptions\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mget\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m'timeout'\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0msock_opt\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mtimeout\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 222\u001b[0m self.sock, addrs = connect(url, self.sock_opt, proxy_info(**options),\n\u001b[0;32m--> 223\u001b[0;31m options.pop('socket', None))\n\u001b[0m\u001b[1;32m 224\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 225\u001b[0m \u001b[0;32mtry\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", - "\u001b[0;32m/Users/atrask/anaconda/lib/python3.6/site-packages/websocket/_http.py\u001b[0m in \u001b[0;36mconnect\u001b[0;34m(url, options, proxy, socket)\u001b[0m\n\u001b[1;32m 105\u001b[0m \u001b[0;32mreturn\u001b[0m \u001b[0m_open_proxied_socket\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0murl\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0moptions\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mproxy\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 106\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 107\u001b[0;31m \u001b[0mhostname\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mport\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mresource\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mis_secure\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mparse_url\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0murl\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 108\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 109\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0msocket\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", - "\u001b[0;32m/Users/atrask/anaconda/lib/python3.6/site-packages/websocket/_url.py\u001b[0m in \u001b[0;36mparse_url\u001b[0;34m(url)\u001b[0m\n\u001b[1;32m 61\u001b[0m \u001b[0mport\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0;36m443\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 62\u001b[0m \u001b[0;32melse\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m---> 63\u001b[0;31m \u001b[0;32mraise\u001b[0m \u001b[0mValueError\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m\"scheme %s is invalid\"\u001b[0m \u001b[0;34m%\u001b[0m \u001b[0mscheme\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 64\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 65\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0mparsed\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mpath\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", - "\u001b[0;31mValueError\u001b[0m: scheme http is invalid" - ] - } - ], - "source": [ - "worker = gr.WebsocketGridClient(hook, \"http://\"+worker_id+\".herokuapp.com/\",id=worker_id)\n", - "worker.connect()" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Step 7: Use PySyft Like Normal\n", - "\n", - "Now you can simply use the worker you created like you would any other normal PySyft worker. For more on how PySyft works, please see the PySyft tutorials: https://github.com/OpenMined/PySyft/tree/dev/examples/tutorials" - ] - }, - { - "cell_type": "code", - "execution_count": 5, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "(Wrapper)>[PointerTensor | me:30676586385 -> aicompanynode:74441185726]" - ] - }, - "execution_count": 5, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "x = th.tensor([1,2,3,4]).send(worker)\n", - "x" - ] - }, - { - "cell_type": "code", - "execution_count": 6, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "(Wrapper)>[PointerTensor | me:10627182361 -> aicompanynode:93458874016]" - ] - }, - "execution_count": 6, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "y = x + x\n", - "y" - ] - }, - { - "cell_type": "code", - "execution_count": 7, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "tensor([2, 4, 6, 8])" - ] - }, - "execution_count": 7, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "y.get()" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Step 8: Reconnecting to Same Node\n", - "\n", - "If you run the same connect command that you did before, it will just connect to the existing node instead of launching it." - ] - }, - { - "cell_type": "code", - "execution_count": 8, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Step 0: Checking Dependencies\n", - "\tChecking for git dependency...DONE!\n", - "\tChecking for heroku --version dependency...DONE!\n", - "\tChecking for pip dependency...DONE!\n", - "\tChecking to see if heroku is logged in...DONE!\n", - "\n", - "Step 1: Making sure app name 'aicompanynode' is available\n", - "\t[]\n", - "APP EXISTS: You can already connect to your app at https://aicompanynode.herokuapp.com\n", - "WARNING: Grid nodes publish datasets online and are for EXPERIMENTAL use only.Deploy nodes at your own risk. Do not use OpenGrid with any data/models you wish to keep private.\n", - "\n" - ] - } - ], - "source": [ - "worker.disconnect() # Disconnect from current connection\n", - "\n", - "worker = gr.WebsocketGridClient(hook, addr=node_component.deploy(), id=worker_id)\n", - "worker.connect()" - ] - }, - { - "cell_type": "code", - "execution_count": 9, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "(Wrapper)>[PointerTensor | me:92246761003 -> aicompanynode:9644570165]" - ] - }, - "execution_count": 9, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "x = th.tensor([1,2,3,4]).send(worker)\n", - "x" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "#### Useful Tip\n", - "\n", - "You can set check_deps=False and it'll run a little faster" - ] - }, - { - "cell_type": "code", - "execution_count": 10, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "\n", - "Step 1: Making sure app name 'aicompanynode' is available\n", - "\t[]\n", - "APP EXISTS: You can already connect to your app at https://aicompanynode.herokuapp.com\n", - "WARNING: Grid nodes publish datasets online and are for EXPERIMENTAL use only.Deploy nodes at your own risk. Do not use OpenGrid with any data/models you wish to keep private.\n", - "\n" - ] - } - ], - "source": [ - "worker.disconnect() # Disconnect from current connection\n", - "\n", - "node_component = HerokuNodeDeployment(worker_id, env_vars=environment, check_deps=False)\n", - "worker = gr.WebsocketGridClient(hook, addr=node_component.deploy(), id=worker_id)\n", - "worker.connect()" - ] - } - ], - "metadata": { - "kernelspec": { - "display_name": "Python 3", - "language": "python", - "name": "python3" - }, - "language_info": { - "codemirror_mode": { - "name": "ipython", - "version": 3 - }, - "file_extension": ".py", - "mimetype": "text/x-python", - "name": "python", - "nbconvert_exporter": "python", - "pygments_lexer": "ipython3", - "version": "3.6.1" - } - }, - "nbformat": 4, - "nbformat_minor": 2 -} diff --git a/examples/Part 3 - Launch a Grid Network Locally.ipynb b/examples/Part 2 - Launch a PyGrid Network Locally.ipynb similarity index 90% rename from examples/Part 3 - Launch a Grid Network Locally.ipynb rename to examples/Part 2 - Launch a PyGrid Network Locally.ipynb index d0bb592af..6646d8f5d 100644 --- a/examples/Part 3 - Launch a Grid Network Locally.ipynb +++ b/examples/Part 2 - Launch a PyGrid Network Locally.ipynb @@ -4,7 +4,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "# Part 3: Launch a Grid Network Locally\n", + "# Part 2: Launch a Grid Network Locally\n", "\n", "In this tutorial, you'll learn how to deploy a grid network into a local machine and then interact with it using PySyft.\n", "\n", @@ -34,16 +34,8 @@ "pip install -r requirements.txt\n", "```\n", "\n", - "### Step 3: Make grid importable\n", "\n", - "Install grid as a python package\n", - "\n", - "```bash\n", - "cd PyGrid\n", - "python setup.py install (or python setup.py develop)\n", - "```\n", - "\n", - "### Step 4: Start gateway app\n", + "### Step 3: Start gateway app\n", "\n", "Then to start the app just run the `gateway.py` script. The `--start_local_db` automatically starts a local database so you don't have to configure one yourself.\n", "\n", @@ -69,7 +61,7 @@ "\n", "## Starting the Grid Worker App\n", "\n", - "### Step 5: Starting the Grid Worker app\n", + "### Step 4: Starting the Grid Worker app\n", "\n", "This is the same procedure already described at Part 1. But we add a new argument when starting the app called `--gateway_url` this should equal to the address used by the grid network here it's \"http://localhost:5000\"\n", "\n", @@ -91,7 +83,7 @@ "Great, so if your app started successfully the script should still be running.\n", "\n", "\n", - "### Step 6: Start communication with the Grid Gateway and workers\n", + "### Step 5: Start communication with the Grid Gateway and workers\n", "\n", "Let's start communication with the Gateway and the workers." ] @@ -105,7 +97,7 @@ "# General dependencies\n", "import torch as th\n", "import syft as sy\n", - "import grid as gr\n", + "from syft.grid.public_grid import PublicGridNetwork\n", "\n", "hook = sy.TorchHook(th)" ] @@ -116,7 +108,10 @@ "metadata": {}, "outputs": [], "source": [ - "gateway = gr.GridNetwork(\"http://localhost:5000\")" + "GRID_ADDRESS = 'localhost'\n", + "GRID_PORT = '5000'\n", + "\n", + "gateway = PublicGridNetwork(hook,\"http://\" + GRID_ADDRESS + \":\" + GRID_PORT)" ] }, { @@ -126,12 +121,12 @@ "outputs": [], "source": [ "# WARNING: We should use the same id and port as the one used to start the app!!!\n", - "bob = gr.WebsocketGridClient(hook, id=\"bob\", address=\"http://localhost:3000\")\n", + "bob = NodeClient(hook, \"ws://localhost:3000\")\n", "# If you don't connect to the worker you can't send messages to it\n", "bob.connect()\n", "\n", "# WARNING: We should use the same id and port as the one used to start the app!!!\n", - "alice = gr.WebsocketGridClient(hook, id=\"alice\", address=\"http://localhost:3001\")\n", + "alice = NodeClient(hook, \"ws://localhost:3001\")\n", "# If you don't connect to the worker you can't send messages to it\n", "alice.connect()" ] @@ -140,9 +135,9 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "### Step 7: Use PySyft Like Normal\n", + "### Step 6: Use PySyft Like Normal\n", "\n", - "Now you can simply use the worker you created like you would any other normal PySyft worker. For more on how PySyft works, please see the PySyft tutorials: https://github.com/OpenMined/PySyft/tree/dev/examples/tutorials" + "Now you can simply use the worker you created like you would any other normal PySyft worker. For more on how PySyft works, please see the PySyft tutorials: https://github.com/OpenMined/PySyft/tree/master/examples/tutorials" ] }, { @@ -299,7 +294,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.7.1" + "version": "3.7.3" } }, "nbformat": 4, diff --git a/examples/Part 4 - Launch a Grid Network on Heroku.ipynb b/examples/Part 4 - Launch a Grid Network on Heroku.ipynb deleted file mode 100644 index 99f906b1a..000000000 --- a/examples/Part 4 - Launch a Grid Network on Heroku.ipynb +++ /dev/null @@ -1,534 +0,0 @@ -{ - "cells": [ - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "# Launch Grid Network on Heroku\n", - "In this tutorial, you'll learn how to deploy a grid network on Heroku platform and then interact with it using PySyft.\n", - "\n", - "_WARNING: Grid nodes publish datasets online and are for EXPERIMENTAL use only. Deploy nodes at your own risk. Do not use OpenGrid with any data/models you wish to keep private._\n", - "\n", - "In order to run an grid network remotely you will need to run two different apps: a grid gateway and one or more grid workers. In this tutorial we will use the websocket app available [here](https://github.com/OpenMined/Grid/tree/dev/app/websocket) to start the grid workers.\n", - "\n", - "\n", - "### Step 1: Download the repository\n", - "\n", - "```bash\n", - "git clone https://github.com/OpenMined/PyGrid/\n", - "```\n", - "\n", - "\n", - "### Step 2: Make grid importable\n", - "\n", - "Install grid as a python package\n", - "\n", - "```bash\n", - "cd PyGrid\n", - "python setup.py install (or python setup.py develop)\n", - "```" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Step 3: Use Grid Library to Perform Deployment" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "#### Import dependencies" - ] - }, - { - "cell_type": "code", - "execution_count": 3, - "metadata": {}, - "outputs": [], - "source": [ - "import grid as gr\n", - "import syft as sy\n", - "import torch as th\n", - "import torch.nn.functional as F\n", - "\n", - "\n", - "from grid.deploy import HerokuGatewayDeployment, HerokuNodeDeployment\n", - "hook = sy.TorchHook(th)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "#### Setup gateway's environment deploy configs" - ] - }, - { - "cell_type": "code", - "execution_count": 4, - "metadata": {}, - "outputs": [], - "source": [ - "gateway_url_field = \"opengridgateway\"\n", - "# Set environment variables\n", - "environment = { \"NUM_REPLICAS\" : \"1\",\n", - " \"SECRET_KEY\" : \"secretneededhere\" }\n", - "\n", - "gateway_component = HerokuGatewayDeployment(gateway_url_field,env_vars=environment,branch=\"add_gateway_persistence\")" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "#### Perform gateway deployment" - ] - }, - { - "cell_type": "code", - "execution_count": 4, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Step 0: Checking Dependencies\n", - "\tChecking for git dependency...DONE!\n", - "\tChecking for heroku --version dependency...DONE!\n", - "\tChecking for pip dependency...DONE!\n", - "\tChecking to see if heroku is logged in...DONE!\n", - "\n", - "Step 1: Making sure app name 'opengridgateway' is available\n", - "\t['https://opengridgateway.herokuapp.com/ | https://git.heroku.com/opengridgateway.git\\n']\n", - "\n", - "Step 3: Cleaning up heroku check ...\n", - "\n", - "Step 4: cleaning up git...\n", - "\t\n", - "Step 5: cloning heroku app code from Github...\n", - "\t\n", - "Step 6: copying app code from cloned repo...\n", - "\t\n", - "Step 7: removing the rest of the cloned code...\n", - "\t\n", - "Step 8: Initializing new github (for Heroku)...\n", - "\tInitialized empty Git repository in /home/ionesio/workspace/notebooks/PyGrid/examples/tmp/.git/\n", - "\t\n", - "Step 9: Adding files to heroku github...\n", - "\t\n", - "Step 10: Committing files to heroku github...\n", - "\t[master (root-commit) 7b9f7bd] init\n", - "\t 10 files changed, 438 insertions(+)\n", - "\t create mode 100644 Dockerfile\n", - "\t create mode 100644 Procfile\n", - "\t create mode 100644 app/__init__.py\n", - "\t create mode 100644 app/main/__init__.py\n", - "\t create mode 100644 app/main/persistence/manager.py\n", - "\t create mode 100644 app/main/persistence/models.py\n", - "\t create mode 100644 app/main/routes.py\n", - "\t create mode 100644 app/templates/index.html\n", - "\t create mode 100644 gateway.py\n", - "\t create mode 100644 requirements.txt\n", - "\t\n", - "\n", - "Step 11: Pushing code to Heroku (this can take take a few seconds)......\n", - "\thttps://opengridgateway.herokuapp.com/ | https://git.heroku.com/opengridgateway.git\n", - "\t\n", - "Step 12: Creating Postgres database... (this can take a few seconds)...\n", - "\tDatabase has been created and is available\n", - "\t ! This database is empty. If upgrading, you can transfer\n", - "\t ! data from another database with pg:copy\n", - "\tCreated postgresql-deep-41308 as DATABASE_URL\n", - "\tUse heroku addons:docs heroku-postgresql to view documentation\n", - "\t\n", - "Setting environment variable: ...\n", - "\tNUM_REPLICAS: 1\n", - "\t\n", - "Setting environment variable: ...\n", - "\tSECRET_KEY: secretneededhere\n", - "\t\n", - "Step 13: Pushing code to Heroku (this can take take a few minutes - if you're running this in a Jupyter Notebook you can watch progress in the notebook server terminal)......\n", - "\t\n", - "Step 14: Cleaning up!...\n", - "\t\n", - "SUCCESS: You can now connect to your app at https://opengridgateway.herokuapp.com\n" - ] - }, - { - "data": { - "text/plain": [ - "'https://opengridgateway.herokuapp.com'" - ] - }, - "execution_count": 4, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "gateway_component.deploy()" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "#### Perform nodes deployment" - ] - }, - { - "cell_type": "code", - "execution_count": 11, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Step 0: Checking Dependencies\n", - "\tChecking for git dependency...DONE!\n", - "\tChecking for heroku --version dependency...DONE!\n", - "\tChecking for pip dependency...DONE!\n", - "\tChecking to see if heroku is logged in...DONE!\n", - "\n", - "Step 1: Making sure app name 'labresearchnode' is available\n", - "\t['https://labresearchnode.herokuapp.com/ | https://git.heroku.com/labresearchnode.git\\n']\n", - "\n", - "Step 3: Cleaning up heroku/postgres checks...\n", - "\n", - "Step 4: cleaning up git...\n", - "\t\n", - "Step 5: cloning heroku app code from Github...\n", - "\t\n", - "Step 6: copying app code from cloned repo...\n", - "\t\n", - "Step 7: removing the rest of the cloned code...\n", - "\t\n", - "Step 8: Initializing new github (for Heroku)...\n", - "\tInitialized empty Git repository in /home/ionesio/workspace/notebooks/PyGrid/examples/tmp/.git/\n", - "\t\n", - "Step 9: Adding files to heroku github...\n", - "\t\n", - "Step 10: Committing files to heroku github...\n", - "\t[master (root-commit) 7439262] init\n", - "\t 15 files changed, 1357 insertions(+)\n", - "\t create mode 100644 Dockerfile\n", - "\t create mode 100644 LICENSE\n", - "\t create mode 100644 Procfile\n", - "\t create mode 100644 app/__init__.py\n", - "\t create mode 100644 app/main/__init__.py\n", - "\t create mode 100644 app/main/events.py\n", - "\t create mode 100644 app/main/local_worker_utils.py\n", - "\t create mode 100644 app/main/model_manager.py\n", - "\t create mode 100644 app/main/persistence/__init__.py\n", - "\t create mode 100644 app/main/persistence/models.py\n", - "\t create mode 100644 app/main/persistence/utils.py\n", - "\t create mode 100644 app/main/routes.py\n", - "\t create mode 100644 app/templates/index.html\n", - "\t create mode 100644 requirements.txt\n", - "\t create mode 100644 websocket_app.py\n", - "\t\n", - "\n", - "Step 11: Pushing code to Heroku (this can take take a few seconds)......\n", - "\thttps://labresearchnode.herokuapp.com/ | https://git.heroku.com/labresearchnode.git\n", - "\t\n", - "Step 12: Creating Postgres database... (this can take a few seconds)...\n", - "\tDatabase has been created and is available\n", - "\t ! This database is empty. If upgrading, you can transfer\n", - "\t ! data from another database with pg:copy\n", - "\tCreated postgresql-contoured-45430 as DATABASE_URL\n", - "\tUse heroku addons:docs heroku-postgresql to view documentation\n", - "\t\n", - "Setting environment variable: ...\n", - "\tID: labresearchnode\n", - "\t\n", - "Setting environment variable: ...\n", - "\tGRID_NETWORK_URL: http://opengridgateway.herokuapp.com\n", - "\t\n", - "Setting environment variable: ...\n", - "\tADDRESS: http://labresearchnode.herokuapp.com/\n", - "\t\n", - "Step 13: Pushing code to Heroku (this can take take a few minutes - if you're running this in a Jupyter Notebook you can watch progress in the notebook server terminal)......\n", - "\t\n", - "Step 14: Cleaning up!...\n", - "\t\n", - "SUCCESS: You can now connect to your app at https://labresearchnode.herokuapp.com\n", - "Step 0: Checking Dependencies\n", - "\tChecking for git dependency...DONE!\n", - "\tChecking for heroku --version dependency...DONE!\n", - "\tChecking for pip dependency...DONE!\n", - "\tChecking to see if heroku is logged in...DONE!\n", - "\n", - "Step 1: Making sure app name 'hospitalnode' is available\n", - "\t['https://hospitalnode.herokuapp.com/ | https://git.heroku.com/hospitalnode.git\\n']\n", - "\n", - "Step 3: Cleaning up heroku/postgres checks...\n", - "\n", - "Step 4: cleaning up git...\n", - "\t\n", - "Step 5: cloning heroku app code from Github...\n", - "\t\n", - "Step 6: copying app code from cloned repo...\n", - "\t\n", - "Step 7: removing the rest of the cloned code...\n", - "\t\n", - "Step 8: Initializing new github (for Heroku)...\n", - "\tInitialized empty Git repository in /home/ionesio/workspace/notebooks/PyGrid/examples/tmp/.git/\n", - "\t\n", - "Step 9: Adding files to heroku github...\n", - "\t\n", - "Step 10: Committing files to heroku github...\n", - "\t[master (root-commit) 67583e5] init\n", - "\t 15 files changed, 1357 insertions(+)\n", - "\t create mode 100644 Dockerfile\n", - "\t create mode 100644 LICENSE\n", - "\t create mode 100644 Procfile\n", - "\t create mode 100644 app/__init__.py\n", - "\t create mode 100644 app/main/__init__.py\n", - "\t create mode 100644 app/main/events.py\n", - "\t create mode 100644 app/main/local_worker_utils.py\n", - "\t create mode 100644 app/main/model_manager.py\n", - "\t create mode 100644 app/main/persistence/__init__.py\n", - "\t create mode 100644 app/main/persistence/models.py\n", - "\t create mode 100644 app/main/persistence/utils.py\n", - "\t create mode 100644 app/main/routes.py\n", - "\t create mode 100644 app/templates/index.html\n", - "\t create mode 100644 requirements.txt\n", - "\t create mode 100644 websocket_app.py\n", - "\t\n", - "\n", - "Step 11: Pushing code to Heroku (this can take take a few seconds)......\n", - "\thttps://hospitalnode.herokuapp.com/ | https://git.heroku.com/hospitalnode.git\n", - "\t\n", - "Step 12: Creating Postgres database... (this can take a few seconds)...\n", - "\tDatabase has been created and is available\n", - "\t ! This database is empty. If upgrading, you can transfer\n", - "\t ! data from another database with pg:copy\n", - "\tCreated postgresql-deep-05839 as DATABASE_URL\n", - "\tUse heroku addons:docs heroku-postgresql to view documentation\n", - "\t\n", - "Setting environment variable: ...\n", - "\tID: hospitalnode\n", - "\t\n", - "Setting environment variable: ...\n", - "\tGRID_NETWORK_URL: http://opengridgateway.herokuapp.com\n", - "\t\n", - "Setting environment variable: ...\n", - "\tADDRESS: http://hospitalnode.herokuapp.com/\n", - "\t\n", - "Step 13: Pushing code to Heroku (this can take take a few minutes - if you're running this in a Jupyter Notebook you can watch progress in the notebook server terminal)......\n", - "\t\n", - "Step 14: Cleaning up!...\n", - "\t\n", - "SUCCESS: You can now connect to your app at https://hospitalnode.herokuapp.com\n", - "Step 0: Checking Dependencies\n", - "\tChecking for git dependency...DONE!\n", - "\tChecking for heroku --version dependency...DONE!\n", - "\tChecking for pip dependency...DONE!\n", - "\tChecking to see if heroku is logged in...DONE!\n", - "\n", - "Step 1: Making sure app name 'aicompanynode' is available\n", - "\t['https://aicompanynode.herokuapp.com/ | https://git.heroku.com/aicompanynode.git\\n']\n", - "\n", - "Step 3: Cleaning up heroku/postgres checks...\n", - "\n", - "Step 4: cleaning up git...\n", - "\t\n", - "Step 5: cloning heroku app code from Github...\n", - "\t\n", - "Step 6: copying app code from cloned repo...\n", - "\t\n", - "Step 7: removing the rest of the cloned code...\n", - "\t\n", - "Step 8: Initializing new github (for Heroku)...\n", - "\tInitialized empty Git repository in /home/ionesio/workspace/notebooks/PyGrid/examples/tmp/.git/\n", - "\t\n", - "Step 9: Adding files to heroku github...\n", - "\t\n", - "Step 10: Committing files to heroku github...\n", - "\t[master (root-commit) 5a8c65d] init\n", - "\t 15 files changed, 1357 insertions(+)\n", - "\t create mode 100644 Dockerfile\n", - "\t create mode 100644 LICENSE\n", - "\t create mode 100644 Procfile\n", - "\t create mode 100644 app/__init__.py\n", - "\t create mode 100644 app/main/__init__.py\n", - "\t create mode 100644 app/main/events.py\n", - "\t create mode 100644 app/main/local_worker_utils.py\n", - "\t create mode 100644 app/main/model_manager.py\n", - "\t create mode 100644 app/main/persistence/__init__.py\n", - "\t create mode 100644 app/main/persistence/models.py\n", - "\t create mode 100644 app/main/persistence/utils.py\n", - "\t create mode 100644 app/main/routes.py\n", - "\t create mode 100644 app/templates/index.html\n", - "\t create mode 100644 requirements.txt\n", - "\t create mode 100644 websocket_app.py\n", - "\t\n", - "\n", - "Step 11: Pushing code to Heroku (this can take take a few seconds)......\n", - "\thttps://aicompanynode.herokuapp.com/ | https://git.heroku.com/aicompanynode.git\n", - "\t\n", - "Step 12: Creating Postgres database... (this can take a few seconds)...\n", - "\tDatabase has been created and is available\n", - "\t ! This database is empty. If upgrading, you can transfer\n", - "\t ! data from another database with pg:copy\n", - "\tCreated postgresql-perpendicular-29530 as DATABASE_URL\n", - "\tUse heroku addons:docs heroku-postgresql to view documentation\n", - "\t\n", - "Setting environment variable: ...\n", - "\tID: aicompanynode\n", - "\t\n", - "Setting environment variable: ...\n", - "\tGRID_NETWORK_URL: http://opengridgateway.herokuapp.com\n", - "\t\n", - "Setting environment variable: ...\n", - "\tADDRESS: http://aicompanynode.herokuapp.com/\n", - "\t\n", - "Step 13: Pushing code to Heroku (this can take take a few minutes - if you're running this in a Jupyter Notebook you can watch progress in the notebook server terminal)......\n", - "\t\n", - "Step 14: Cleaning up!...\n", - "\t\n", - "SUCCESS: You can now connect to your app at https://aicompanynode.herokuapp.com\n" - ] - } - ], - "source": [ - "ids = { \"aicompanynode\", \"labresearchnode\", \"hospitalnode\"}\n", - "\n", - "for node_id in ids:\n", - " environment = {\n", - " \"ID\": node_id,\n", - " \"GRID_NETWORK_URL\": \"http://{}.herokuapp.com\".format(gateway_url_field),\n", - " \"ADDRESS\": \"http://{}.herokuapp.com/\".format(node_id)\n", - " }\n", - " node_component = HerokuNodeDeployment(node_id, env_vars=environment)\n", - " node_component.deploy()" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Step 6: Start communication with the Grid Gateway and workers\n", - "\n", - "Let's start communication with the Gateway and the workers." - ] - }, - { - "cell_type": "code", - "execution_count": 5, - "metadata": {}, - "outputs": [], - "source": [ - "gateway_url = \"http://{}.herokuapp.com\".format(gateway_url_field)\n", - "\n", - "my_grid = gr.GridNetwork(gateway_url)" - ] - }, - { - "cell_type": "code", - "execution_count": 13, - "metadata": {}, - "outputs": [], - "source": [ - "# Build Model\n", - "class Net(sy.Plan):\n", - " def __init__(self):\n", - " super(Net, self).__init__()\n", - " self.fc1 = th.nn.Linear(2, 1)\n", - " self.bias = th.tensor([1000.0])\n", - " self.state += [\"fc1\", \"bias\"]\n", - "\n", - " def forward(self, x):\n", - " x = self.fc1(x)\n", - " return F.log_softmax(x, dim=0) + self.bias\n", - "\n", - "model = Net()\n", - "model.build(th.tensor([1.0, 2]))\n" - ] - }, - { - "cell_type": "code", - "execution_count": 14, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "WARNING: Grid nodes publish datasets online and are for EXPERIMENTAL use only.Deploy nodes at your own risk. Do not use OpenGrid with any data/models you wish to keep private.\n", - "\n" - ] - } - ], - "source": [ - "my_grid.serve_model(model, model_id=\"simple_model\",allow_remote_inference=True, allow_download=False)" - ] - }, - { - "cell_type": "code", - "execution_count": 19, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "tensor([1000.])" - ] - }, - "execution_count": 19, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "my_grid.run_remote_inference(model_id=\"simple_model\", data=th.tensor([1.0, 2]))" - ] - }, - { - "cell_type": "code", - "execution_count": 6, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "WARNING: Grid nodes publish datasets online and are for EXPERIMENTAL use only.Deploy nodes at your own risk. Do not use OpenGrid with any data/models you wish to keep private.\n", - "\n", - "This model was hosted at: aicompanynode\n" - ] - } - ], - "source": [ - "worker = my_grid.query_model(model_id=\"simple_model\")\n", - "print(\"This model was hosted at: \", worker.id)" - ] - } - ], - "metadata": { - "kernelspec": { - "display_name": "Python 3", - "language": "python", - "name": "python3" - }, - "language_info": { - "codemirror_mode": { - "name": "ipython", - "version": 3 - }, - "file_extension": ".py", - "mimetype": "text/x-python", - "name": "python", - "nbconvert_exporter": "python", - "pygments_lexer": "ipython3", - "version": "3.6.1" - } - }, - "nbformat": 4, - "nbformat_minor": 2 -} diff --git a/examples/Serving and Querying models on Grid/.gitignore b/examples/Serving and Querying models on Grid/.gitignore deleted file mode 100644 index c3ea51c40..000000000 --- a/examples/Serving and Querying models on Grid/.gitignore +++ /dev/null @@ -1 +0,0 @@ -skin-cancer-mnist-ham10000 \ No newline at end of file diff --git a/examples/Serving and Querying models on Grid/1. Serving a Public Model (GPT-2).ipynb b/examples/Serving and Querying models on Grid/1. Serving a Public Model (GPT-2).ipynb deleted file mode 100644 index 4308ce814..000000000 --- a/examples/Serving and Querying models on Grid/1. Serving a Public Model (GPT-2).ipynb +++ /dev/null @@ -1,51 +0,0 @@ -{ - "cells": [ - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "# 1. Serving a Public Model (GPT-2)\n", - "**Protecting Individual's data privacy**\n", - "\n", - "In this series of tutorials you'll learn how to serve and query a public model on Grid. We use the GPT-2 model as an use case.\n", - "\n", - "\n", - "## Motivation\n", - "\n", - "Some times organizations are not as concerned with malicious use of their models as they are with individual's data privacy. Allowing users to download the model and execute it locally is a way to ensure privacy guarantees to users.\n", - "\n", - "Making models available for download is also extremely beneficial for researchers. It makes easier to experiment and load models, approaches like [Torch Hub](https://pytorch.org/docs/stable/hub.html) are good examples of this trend.\n", - "\n", - "In addition it is easier and cheaper to serve a worker to host a model for download than it is to maintain a server to receive multiple requests simultaneously, which might be a motivation for researchers to use this approach." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [] - } - ], - "metadata": { - "kernelspec": { - "display_name": "Python 3", - "language": "python", - "name": "python3" - }, - "language_info": { - "codemirror_mode": { - "name": "ipython", - "version": 3 - }, - "file_extension": ".py", - "mimetype": "text/x-python", - "name": "python", - "nbconvert_exporter": "python", - "pygments_lexer": "ipython3", - "version": "3.6.7" - } - }, - "nbformat": 4, - "nbformat_minor": 2 -} diff --git a/examples/Serving and Querying models on Grid/1.1. Serving a public model.ipynb b/examples/Serving and Querying models on Grid/1.1. Serving a public model.ipynb deleted file mode 100644 index f1f9cf8e6..000000000 --- a/examples/Serving and Querying models on Grid/1.1. Serving a public model.ipynb +++ /dev/null @@ -1,202 +0,0 @@ -{ - "cells": [ - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "# 1.1 Serving a Public Model (GPT-2)\n", - "**Protecting Individual's data privacy**" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Dependencies\n", - "\n", - "Make you sure you have [pytorch-transformers](https://github.com/huggingface/pytorch-transformers) installed. PyTorch-Transformers can be installed by pip as follows:" - ] - }, - { - "cell_type": "code", - "execution_count": 1, - "metadata": {}, - "outputs": [], - "source": [ - "# !pip install pytorch-transformers" - ] - }, - { - "cell_type": "code", - "execution_count": 3, - "metadata": {}, - "outputs": [], - "source": [ - "import torch as th\n", - "import grid as gr\n", - "from grid import syft as sy\n", - "import gpt2_utils\n", - "# Ignore warnings\n", - "import warnings\n", - "warnings.filterwarnings('ignore')\n", - "\n", - "hook = sy.TorchHook(th)\n", - "\n", - "# GPT-2 model\n", - "from pytorch_transformers import GPT2LMHeadModel" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Connect to a GridWorker\n", - "\n", - "First, start the grid worker by running the following in a terminal:\n", - "\n", - "```bash\n", - "python app/websocket/websocket_app.py --start_local_db --id=app_company --port=3000\n", - "```" - ] - }, - { - "cell_type": "code", - "execution_count": 4, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "WARNING: Grid nodes publish datasets online and are for EXPERIMENTAL use only.Deploy nodes at your own risk. Do not use OpenGrid with any data/models you wish to keep private.\n", - "\n" - ] - } - ], - "source": [ - "app_company = gr.WebsocketGridClient(hook, \"http://localhost:3000/\", id=\"app_company\")\n", - "app_company.connect()" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Model and Data Setup" - ] - }, - { - "cell_type": "code", - "execution_count": 5, - "metadata": {}, - "outputs": [], - "source": [ - "# Load pre-trained model (weights)\n", - "model = GPT2LMHeadModel.from_pretrained('gpt2',torchscript=True)" - ] - }, - { - "cell_type": "code", - "execution_count": 6, - "metadata": {}, - "outputs": [], - "source": [ - "# Encode a text inputs\n", - "text = \"Who was Jim Henson ? Jim Henson was a\"\n", - "tokens_tensor = gpt2_utils.encode_text(text)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "IMPORTANT: if you trace the model with a tensor of size `N` the trace model only expects inputs of size `N`." - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "We need to trace the model in order to make it serializable." - ] - }, - { - "cell_type": "code", - "execution_count": 7, - "metadata": {}, - "outputs": [], - "source": [ - "traced_model = th.jit.trace(model, (tokens_tensor,))" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Hosting a Public Model\n", - "\n", - "The important part is that we set `allow_download=True` so a user can download a copy of the model to run locally." - ] - }, - { - "cell_type": "code", - "execution_count": 8, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "True" - ] - }, - "execution_count": 8, - "metadata": {}, - "output_type": "execute_result" - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "WARNING:engineio.client:WebSocket connection was closed, aborting\n" - ] - } - ], - "source": [ - "app_company.serve_model(traced_model, model_id=\"GPT-2-public\", allow_download=True, allow_remote_inference=False)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Accessing Node's web page \n", - "\n", - "Now, we can see models hosted on this node accessing node's url address.\n", - "

\n", - "\n", - "

" - ] - } - ], - "metadata": { - "kernelspec": { - "display_name": "Python 3", - "language": "python", - "name": "python3" - }, - "language_info": { - "codemirror_mode": { - "name": "ipython", - "version": 3 - }, - "file_extension": ".py", - "mimetype": "text/x-python", - "name": "python", - "nbconvert_exporter": "python", - "pygments_lexer": "ipython3", - "version": "3.7.3" - } - }, - "nbformat": 4, - "nbformat_minor": 2 -} diff --git a/examples/Serving and Querying models on Grid/1.2. Querying a public model.ipynb b/examples/Serving and Querying models on Grid/1.2. Querying a public model.ipynb deleted file mode 100644 index f014fef6b..000000000 --- a/examples/Serving and Querying models on Grid/1.2. Querying a public model.ipynb +++ /dev/null @@ -1,206 +0,0 @@ -{ - "cells": [ - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "# 1.2 Querying a Public Model (GPT-2)\n", - "**Protecting Individual's privacy**" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Dependencies\n", - "\n", - "Make you sure you have [pytorch-transformers](https://github.com/huggingface/pytorch-transformers) installed. PyTorch-Transformers can be installed by pip as follows:" - ] - }, - { - "cell_type": "code", - "execution_count": 1, - "metadata": {}, - "outputs": [], - "source": [ - "# !pip install pytorch-transformers" - ] - }, - { - "cell_type": "code", - "execution_count": 2, - "metadata": {}, - "outputs": [], - "source": [ - "import torch as th\n", - "import grid as gr\n", - "from grid import syft as sy\n", - "import gpt2_utils\n", - "\n", - "# Ignore warnings\n", - "import warnings\n", - "warnings.filterwarnings('ignore')\n", - "import logging\n", - "logging.getLogger(\"urllib3\").setLevel(logging.ERROR)\n", - "\n", - "\n", - "hook = sy.TorchHook(th)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Connect to a GridWorker" - ] - }, - { - "cell_type": "code", - "execution_count": 3, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "WARNING: Grid nodes publish datasets online and are for EXPERIMENTAL use only.Deploy nodes at your own risk. Do not use OpenGrid with any data/models you wish to keep private.\n", - "\n" - ] - } - ], - "source": [ - "app_company = gr.WebsocketGridClient(hook, \"http://localhost:3000/\", id=\"app_company\")\n", - "app_company.connect()" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Encode text" - ] - }, - { - "cell_type": "code", - "execution_count": 4, - "metadata": {}, - "outputs": [], - "source": [ - "# Encode a text inputs\n", - "text = \"Who was Jim Henson ? Jim Henson was a\"\n", - "tokens_tensor = gpt2_utils.encode_text(text)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Querying a Public Model\n", - "\n", - "We can get a copy of the model by calling `worker.download_model(model_id)`." - ] - }, - { - "cell_type": "code", - "execution_count": 5, - "metadata": {}, - "outputs": [], - "source": [ - "model_copy = app_company.download_model(\"GPT-2-public\")" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "And run it locally!" - ] - }, - { - "cell_type": "code", - "execution_count": 6, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Context text: Who was Jim Henson ? Jim Henson was a\n", - "Predicted text: great\n", - "CPU times: user 429 ms, sys: 21.2 ms, total: 450 ms\n", - "Wall time: 194 ms\n" - ] - } - ], - "source": [ - "%%time\n", - "response = model_copy(tokens_tensor)\n", - "\n", - "predicted_text = gpt2_utils.decode_local_response(response)\n", - "\n", - "print(\"Context text:\", text)\n", - "print(\"Predicted text:\", predicted_text)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Text generation" - ] - }, - { - "cell_type": "code", - "execution_count": 7, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Context text: Who was Jim Henson ? Jim Henson was a\n", - "Generated text: Who was Jim Henson ? Jim Henson was a charismatic person, a ferocious warrior and avid hunter. Rebel x3 Build B2 7600 Capacitor Build B2 601E Capacitor Build B2 601F Capacitor B2 601F 0 2 (32 : 41 )\n", - "\n", - "\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "WARNING:engineio.client:WebSocket connection was closed, aborting\n", - "WARNING:engineio.client:WebSocket connection was closed, aborting\n", - "WARNING:engineio.client:WebSocket connection was closed, aborting\n" - ] - } - ], - "source": [ - "text_generated = gpt2_utils.sample_sequence(model=model_copy, length=50, context=tokens_tensor)\n", - "\n", - "print(\"Context text:\", text)\n", - "print(\"Generated text:\", text + text_generated)" - ] - } - ], - "metadata": { - "kernelspec": { - "display_name": "Python 3", - "language": "python", - "name": "python3" - }, - "language_info": { - "codemirror_mode": { - "name": "ipython", - "version": 3 - }, - "file_extension": ".py", - "mimetype": "text/x-python", - "name": "python", - "nbconvert_exporter": "python", - "pygments_lexer": "ipython3", - "version": "3.7.3" - } - }, - "nbformat": 4, - "nbformat_minor": 2 -} diff --git a/examples/Serving and Querying models on Grid/2. Serving a Private Model (GPT-2).ipynb b/examples/Serving and Querying models on Grid/2. Serving a Private Model (GPT-2).ipynb deleted file mode 100644 index b6e52d51d..000000000 --- a/examples/Serving and Querying models on Grid/2. Serving a Private Model (GPT-2).ipynb +++ /dev/null @@ -1,42 +0,0 @@ -{ - "cells": [ - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "# 2. Serving a Private Model (GPT-2)\n", - "**protecting model owner's intellectual property (IP)**\n", - "\n", - "In these series of tutorials you'll learn how to serve and query a private model on Grid. We use the GPT-2 model as an use case.\n", - "\n", - "\n", - "## Motivation\n", - "\n", - "Machine Learning as a Service (MLaaS) is already quite relevant in industry, companies train large models on big amounts of data and offer a model's predictions as a service to parties that don't have access to data or the expertise to train their own models. Is convenient for companies provinding MLaaS because they can keep their sIP privates while external organizations can also benefit from the model's predictions.\n", - "\n", - "Even though this is a trend in industry, in academia this approach is not as explored. We believe this could be a potential interesting direction for research as well, since researchers and organizations can protect their IP but also mitigate malicious use cases or even limit user access to their model while allowing researchers to analyse and interact with the model's outputs." - ] - } - ], - "metadata": { - "kernelspec": { - "display_name": "Python 3", - "language": "python", - "name": "python3" - }, - "language_info": { - "codemirror_mode": { - "name": "ipython", - "version": 3 - }, - "file_extension": ".py", - "mimetype": "text/x-python", - "name": "python", - "nbconvert_exporter": "python", - "pygments_lexer": "ipython3", - "version": "3.6.7" - } - }, - "nbformat": 4, - "nbformat_minor": 2 -} diff --git a/examples/Serving and Querying models on Grid/2.1. Serving a private model.ipynb b/examples/Serving and Querying models on Grid/2.1. Serving a private model.ipynb deleted file mode 100644 index 85c5385c8..000000000 --- a/examples/Serving and Querying models on Grid/2.1. Serving a private model.ipynb +++ /dev/null @@ -1,185 +0,0 @@ -{ - "cells": [ - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "# 1.1 Serving a Private Model (GPT-2)\n", - "**protecting model owner's intellectual property (IP)**" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Dependencies\n", - "\n", - "Make you sure you have [pytorch-transformers](https://github.com/huggingface/pytorch-transformers) installed. PyTorch-Transformers can be installed by pip as follows:" - ] - }, - { - "cell_type": "code", - "execution_count": 1, - "metadata": {}, - "outputs": [], - "source": [ - "# !pip install pytorch-transformers" - ] - }, - { - "cell_type": "code", - "execution_count": 2, - "metadata": {}, - "outputs": [], - "source": [ - "import torch as th\n", - "import grid as gr\n", - "import syft as sy\n", - "import gpt2_utils\n", - "\n", - "# Ignore warnings\n", - "import warnings\n", - "warnings.filterwarnings('ignore')\n", - "\n", - "# GPT-2 model\n", - "from pytorch_transformers import GPT2LMHeadModel" - ] - }, - { - "cell_type": "code", - "execution_count": 3, - "metadata": {}, - "outputs": [], - "source": [ - "hook = sy.TorchHook(th)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Connect to a GridWorker" - ] - }, - { - "cell_type": "code", - "execution_count": 4, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "WARNING: Grid nodes publish datasets online and are for EXPERIMENTAL use only.Deploy nodes at your own risk. Do not use OpenGrid with any data/models you wish to keep private.\n", - "\n" - ] - } - ], - "source": [ - "ai_inc = gr.WebsocketGridClient(hook, \"http://localhost:3000/\", id=\"ai_inc\")\n", - "ai_inc.connect()" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Model and Data Setup" - ] - }, - { - "cell_type": "code", - "execution_count": 5, - "metadata": {}, - "outputs": [], - "source": [ - "# Load pre-trained model (weights)\n", - "model = GPT2LMHeadModel.from_pretrained('gpt2',torchscript=True)" - ] - }, - { - "cell_type": "code", - "execution_count": 6, - "metadata": {}, - "outputs": [], - "source": [ - "# Encode a text inputs\n", - "text = \"Who was Jim Henson ? Jim Henson was a\"\n", - "tokens_tensor = gpt2_utils.encode_text(text)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "IMPORTANT: if you trace the model with a tensor of size `N` the trace model only expects inputs of size `N`." - ] - }, - { - "cell_type": "code", - "execution_count": 7, - "metadata": {}, - "outputs": [], - "source": [ - "traced_model = th.jit.trace(model, (tokens_tensor,))" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Hosting a Private Model\n", - "\n", - "The important part is that we set `allow_remote_inference=True` so a user can run inference in the model hosted on this worker." - ] - }, - { - "cell_type": "code", - "execution_count": 8, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "True" - ] - }, - "execution_count": 8, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "ai_inc.serve_model(traced_model, model_id=\"GPT-2-private\", allow_remote_inference=True, allow_download=False)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [] - } - ], - "metadata": { - "kernelspec": { - "display_name": "Python 3", - "language": "python", - "name": "python3" - }, - "language_info": { - "codemirror_mode": { - "name": "ipython", - "version": 3 - }, - "file_extension": ".py", - "mimetype": "text/x-python", - "name": "python", - "nbconvert_exporter": "python", - "pygments_lexer": "ipython3", - "version": "3.6.7" - } - }, - "nbformat": 4, - "nbformat_minor": 2 -} diff --git a/examples/Serving and Querying models on Grid/2.2. Querying a private model.ipynb b/examples/Serving and Querying models on Grid/2.2. Querying a private model.ipynb deleted file mode 100644 index df2aa6c99..000000000 --- a/examples/Serving and Querying models on Grid/2.2. Querying a private model.ipynb +++ /dev/null @@ -1,167 +0,0 @@ -{ - "cells": [ - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "# 2.2 Querying a Private Model (GPT-2)\n", - "**protecting model owner's intellectual property (IP)**" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Dependencies\n", - "\n", - "Make you sure you have [pytorch-transformers](https://github.com/huggingface/pytorch-transformers) installed. PyTorch-Transformers can be installed by pip as follows:" - ] - }, - { - "cell_type": "code", - "execution_count": 1, - "metadata": {}, - "outputs": [], - "source": [ - "# !pip install pytorch-transformers" - ] - }, - { - "cell_type": "code", - "execution_count": 2, - "metadata": {}, - "outputs": [], - "source": [ - "import torch as th\n", - "import grid as gr\n", - "from grid import syft as sy\n", - "import gpt2_utils\n", - "\n", - "# Ignore warnings\n", - "import warnings\n", - "warnings.filterwarnings('ignore')\n", - "\n", - "hook = sy.TorchHook(th)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Connect to a GridWorker" - ] - }, - { - "cell_type": "code", - "execution_count": 4, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "WARNING: Grid nodes publish datasets online and are for EXPERIMENTAL use only.Deploy nodes at your own risk. Do not use OpenGrid with any data/models you wish to keep private.\n", - "\n" - ] - } - ], - "source": [ - "ai_inc = gr.WebsocketGridClient(hook, \"http://localhost:3000/\", id=\"ai_inc\")\n", - "ai_inc.connect()" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Encode text" - ] - }, - { - "cell_type": "code", - "execution_count": 6, - "metadata": {}, - "outputs": [], - "source": [ - "# Encode a text inputs\n", - "text = \"Who was Jim Henson ? Jim Henson was a\"\n", - "tokens_tensor = gpt2_utils.encode_text(text)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Querying a Private Model\n", - "\n", - "We can get a copy of the model by calling `worker.run_remote_inference(model_id, data)`" - ] - }, - { - "cell_type": "code", - "execution_count": 7, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "['GPT-2', 'GPT-2-private']" - ] - }, - "execution_count": 7, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "ai_inc.models" - ] - }, - { - "cell_type": "code", - "execution_count": 8, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Predicted text: Who was Jim Henson? Jim Henson was a great\n", - "CPU times: user 268 ms, sys: 36.2 ms, total: 305 ms\n", - "Wall time: 960 ms\n" - ] - } - ], - "source": [ - "%%time\n", - "response = ai_inc.run_remote_inference(\"GPT-2-private\", tokens_tensor)\n", - "\n", - "predicted_text = gpt2_utils.decode_response(response)\n", - "\n", - "print(\"Context text:\", text)\n", - "print(\"Predicted text:\", predicted_text)" - ] - } - ], - "metadata": { - "kernelspec": { - "display_name": "Python 3", - "language": "python", - "name": "python3" - }, - "language_info": { - "codemirror_mode": { - "name": "ipython", - "version": 3 - }, - "file_extension": ".py", - "mimetype": "text/x-python", - "name": "python", - "nbconvert_exporter": "python", - "pygments_lexer": "ipython3", - "version": "3.6.7" - } - }, - "nbformat": 4, - "nbformat_minor": 2 -} diff --git a/examples/Serving and Querying models on Grid/3. Serving an Encrypted Model (Skin cancer detection).ipynb b/examples/Serving and Querying models on Grid/3. Serving an Encrypted Model (Skin cancer detection).ipynb deleted file mode 100644 index bceeb86c0..000000000 --- a/examples/Serving and Querying models on Grid/3. Serving an Encrypted Model (Skin cancer detection).ipynb +++ /dev/null @@ -1,42 +0,0 @@ -{ - "cells": [ - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "# 3. Serving an Encrypted Model (Skin cancer dection)\n", - "**protecting model owner's intellectual property (IP)**\n", - "\n", - "In these series of tutorials you'll learn how to serve and query an encrypted model on Grid. We use a CNN for for classifying an image as melanoma or benign keratosis as an use case.\n", - "\n", - "\n", - "## Motivation\n", - "\n", - "On Part 1 we've seen how to serve public model that individuals can download and run locally while their data privacy is preserved. While On Part 2 we've seen how to serve a private model that an organization can protect and limit access to. But what if individual's data privacy is as important as keeping the model private? Then is not reasonable to choose between private or public serving.\n", - "\n", - "In this context, one potential solution is to encrypt both the model and the data in a way which allows one organization to use a model owned by another organization without either disclosing their IP to one another. Several encryption schemes exist that allow for computation over encrypted data, among which Secure Multi-Party Computation (SMPC), Homomorphic Encryption (FHE/SHE) and Functional Encryption (FE) are the most well known types. We will focus here on Secure Multi-Party Computation which consists of private additive sharing." - ] - } - ], - "metadata": { - "kernelspec": { - "display_name": "Python 3", - "language": "python", - "name": "python3" - }, - "language_info": { - "codemirror_mode": { - "name": "ipython", - "version": 3 - }, - "file_extension": ".py", - "mimetype": "text/x-python", - "name": "python", - "nbconvert_exporter": "python", - "pygments_lexer": "ipython3", - "version": "3.6.7" - } - }, - "nbformat": 4, - "nbformat_minor": 2 -} diff --git a/examples/Serving and Querying models on Grid/3.1. Serving an encrypted model.ipynb b/examples/Serving and Querying models on Grid/3.1. Serving an encrypted model.ipynb deleted file mode 100644 index d7e5604ab..000000000 --- a/examples/Serving and Querying models on Grid/3.1. Serving an encrypted model.ipynb +++ /dev/null @@ -1,690 +0,0 @@ -{ - "cells": [ - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "# 3.1. Serving an encrypted model\n", - "**protecting privacy and IP simultaneously**\n", - "\n", - "\n", - "### Use case: Skin cancer detection\n", - "\n", - "Many people regularly check their skin for changes. Not all moles, patches, and rashes are cancerous. In this tutorial we'll train a model to differenciate between benign keratosis and melanoma (type of skin cancer).\n", - "\n", - "Seborrheic keratosis is a noncancerous condition that can look a lot like melanoma. About 83 million Americans have seborrheic keratosis. About 5 percent of all new cancer cases in the United States are melanoma, a potentially deadly form of skin cancer. With prompt treatment, more than 91 percent of melanoma patients will survive 5 years or more after their first diagnosis. (Source: https://www.medicalnewstoday.com/articles/320742.php)\n", - "\n", - "\n", - "## Train a model\n", - "\n", - "The first thing we need is a model, we can train a model using **regular pytorch**! If you're familiar with pytorch feel free to skip this part of the tutorial.\n", - "\n", - "Most of the code used in this part of the tutorial is actually at `skin_cancer_model_utils.py` have a look at it if you want to know in more details what's going on in each subsection of this notebook.\n", - "\n", - "### Dataset\n", - "\n", - "We'll use this [kaggle dataset](https://www.kaggle.com/kmader/skin-cancer-mnist-ham10000/). You need to download this dataset before running this example and eventually change the permissions of the files contained in the downloaded archive so that they can be parsed in Python:\n", - "\n", - "chmod 666 'file_name'\n", - "\n", - "We use the code available at [this kaggle kernel](https://www.kaggle.com/kmader/dermatology-mnist-loading-and-processing) by Kevin Mader and in [this tutorial](https://towardsdatascience.com/skin-cancer-classification-with-machine-learning-c9d3445b2163) by Nyla Pirani to preprocess the data.\n", - "\n", - "In the previous tutorial we served a CNN for classifying images with different 2 types of skin deseases: benign keratosis and melanoma (type of skin cancer). In this tutorial we show how to serve this model on a **encrypted way** on Grid." - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Dependencies for training the model" - ] - }, - { - "cell_type": "code", - "execution_count": 1, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "'./skin-cancer-mnist-ham10000'" - ] - }, - "execution_count": 1, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "import matplotlib.pyplot as plt\n", - "import matplotlib.image as mpimg\n", - "\n", - "import torch\n", - "import torchvision.transforms as transforms\n", - "\n", - "import skin_cancer_model_utils as scmu\n", - "\n", - "# Ignore warnings\n", - "import warnings\n", - "warnings.filterwarnings('ignore')\n", - "\n", - "# Path where the data is stored. Change this if needed!\n", - "scmu.DATASET_PATH" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "**Read dataset**" - ] - }, - { - "cell_type": "code", - "execution_count": 2, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "Melanoma 1113\n", - "Benign keratosis-like lesions 1099\n", - "Name: cell_type, dtype: int64" - ] - }, - "execution_count": 2, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "df = scmu.read_skin_cancer_dataset()\n", - "df['cell_type'].value_counts()" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "**Visualize dataset**" - ] - }, - { - "cell_type": "code", - "execution_count": 3, - "metadata": {}, - "outputs": [ - { - "data": { - "image/png": "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\n", - "text/plain": [ - "
" - ] - }, - "metadata": { - "needs_background": "light" - }, - "output_type": "display_data" - } - ], - "source": [ - "# Get samples from each class\n", - "samples = df.groupby('cell_type').apply(lambda x: x.sample(3))\n", - "\n", - "# Plot samples\n", - "fig = plt.figure(figsize=(12, 8))\n", - "columns = 3\n", - "rows = 2\n", - "for i in range(len(samples)):\n", - " image = mpimg.imread(samples[\"path\"].iloc[i])\n", - " fig.add_subplot(rows, columns, i + 1)\n", - " plt.imshow(image)\n", - " title = \"{} ({})\".format(samples[\"cell_type_idx\"].iloc[i], samples[\"cell_type\"].iloc[i])\n", - " plt.title(title)\n", - "plt.show()" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "**Prepare data for training**" - ] - }, - { - "cell_type": "code", - "execution_count": 4, - "metadata": {}, - "outputs": [], - "source": [ - "train_df, valid_df, test_df = scmu.split_data(df)" - ] - }, - { - "cell_type": "code", - "execution_count": 5, - "metadata": {}, - "outputs": [], - "source": [ - "# Parameters for the dataloader\n", - "input_size = 32\n", - "params = {'batch_size': 16,\n", - " 'shuffle': True,\n", - " 'num_workers': 6}\n", - "\n", - "# Calculate train_mean and train_std\n", - "training_set = scmu.Dataset(train_df, transform=transforms.Compose([\n", - " transforms.Resize((input_size, input_size)),\n", - " transforms.ToTensor()]))\n", - "training_generator = torch.utils.data.DataLoader(training_set, **params)\n", - "train_mean, train_std = scmu.calculate_mean_and_std(training_generator)" - ] - }, - { - "cell_type": "code", - "execution_count": 6, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "(tensor([0.6979, 0.5445, 0.5735]), tensor([0.0959, 0.1187, 0.1365]))" - ] - }, - "execution_count": 6, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "train_mean, train_std" - ] - }, - { - "cell_type": "code", - "execution_count": 7, - "metadata": {}, - "outputs": [], - "source": [ - "# Create dataloaders\n", - "training_set = scmu.Dataset(train_df, transform=scmu.transform(input_size, train_mean, train_std))\n", - "training_generator = torch.utils.data.DataLoader(training_set, **params)\n", - "\n", - "validation_set = scmu.Dataset(valid_df, transform=scmu.transform(input_size, train_mean, train_std))\n", - "validation_generator = torch.utils.data.DataLoader(validation_set, **params)\n", - "\n", - "test_set = scmu.Dataset(test_df, transform=scmu.transform(input_size, train_mean, train_std))\n", - "test_generator = torch.utils.data.DataLoader(test_set, **params)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "**Implement model**" - ] - }, - { - "cell_type": "code", - "execution_count": 8, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "Net(\n", - " (conv1): Conv2d(3, 6, kernel_size=(5, 5), stride=(1, 1))\n", - " (conv2): Conv2d(6, 16, kernel_size=(5, 5), stride=(1, 1))\n", - " (fc1): Linear(in_features=9216, out_features=120, bias=True)\n", - " (fc2): Linear(in_features=120, out_features=84, bias=True)\n", - " (fc3): Linear(in_features=84, out_features=2, bias=True)\n", - ")" - ] - }, - "execution_count": 8, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "model = scmu.make_model()\n", - "model.eval()" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "**Train model**" - ] - }, - { - "cell_type": "code", - "execution_count": 9, - "metadata": {}, - "outputs": [], - "source": [ - "optimizer = torch.optim.Adam(model.parameters(), lr=1e-6)" - ] - }, - { - "cell_type": "code", - "execution_count": 10, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Training loss at step 0 = 0.6908872723579407\n", - "Training loss at step 100 = 0.7087734937667847\n", - "Epoch: 0\n", - "Train\n", - "==============\n", - "Average loss: 0.6845, Accuracy: 1053/1990 (52.9%)\n", - "\n", - "Test\n", - "==============\n", - "Average loss: 0.6860, Accuracy: 576/1106 (52.1%)\n", - "\n", - "Training loss at step 200 = 0.6831835508346558\n", - "Epoch: 1\n", - "Train\n", - "==============\n", - "Average loss: 0.6764, Accuracy: 1150/1990 (57.8%)\n", - "\n", - "Test\n", - "==============\n", - "Average loss: 0.6781, Accuracy: 634/1106 (57.3%)\n", - "\n", - "Training loss at step 300 = 0.6463944315910339\n", - "Epoch: 2\n", - "Train\n", - "==============\n", - "Average loss: 0.6662, Accuracy: 1243/1990 (62.5%)\n", - "\n", - "Test\n", - "==============\n", - "Average loss: 0.6690, Accuracy: 680/1106 (61.5%)\n", - "\n", - "Training loss at step 400 = 0.6783669590950012\n", - "Epoch: 3\n", - "Train\n", - "==============\n", - "Average loss: 0.6570, Accuracy: 1206/1990 (60.6%)\n", - "\n", - "Test\n", - "==============\n", - "Average loss: 0.6613, Accuracy: 666/1106 (60.2%)\n", - "\n", - "Training loss at step 500 = 0.6564556360244751\n", - "Training loss at step 600 = 0.6659862995147705\n", - "Epoch: 4\n", - "Train\n", - "==============\n", - "Average loss: 0.6492, Accuracy: 1280/1990 (64.3%)\n", - "\n", - "Test\n", - "==============\n", - "Average loss: 0.6523, Accuracy: 721/1106 (65.2%)\n", - "\n", - "Training loss at step 700 = 0.6478021740913391\n", - "Epoch: 5\n", - "Train\n", - "==============\n", - "Average loss: 0.6387, Accuracy: 1247/1990 (62.7%)\n", - "\n", - "Test\n", - "==============\n", - "Average loss: 0.6444, Accuracy: 693/1106 (62.7%)\n", - "\n", - "Training loss at step 800 = 0.615544319152832\n", - "Epoch: 6\n", - "Train\n", - "==============\n", - "Average loss: 0.6265, Accuracy: 1322/1990 (66.4%)\n", - "\n", - "Test\n", - "==============\n", - "Average loss: 0.6352, Accuracy: 721/1106 (65.2%)\n", - "\n", - "Training loss at step 900 = 0.5868345499038696\n", - "Epoch: 7\n", - "Train\n", - "==============\n", - "Average loss: 0.6186, Accuracy: 1316/1990 (66.1%)\n", - "\n", - "Test\n", - "==============\n", - "Average loss: 0.6249, Accuracy: 724/1106 (65.5%)\n", - "\n", - "Training loss at step 1000 = 0.6375048756599426\n", - "Training loss at step 1100 = 0.5793524980545044\n", - "Epoch: 8\n", - "Train\n", - "==============\n", - "Average loss: 0.6124, Accuracy: 1330/1990 (66.8%)\n", - "\n", - "Test\n", - "==============\n", - "Average loss: 0.6190, Accuracy: 730/1106 (66.0%)\n", - "\n", - "Training loss at step 1200 = 0.6938419938087463\n", - "Epoch: 9\n", - "Train\n", - "==============\n", - "Average loss: 0.6109, Accuracy: 1316/1990 (66.1%)\n", - "\n", - "Test\n", - "==============\n", - "Average loss: 0.6239, Accuracy: 718/1106 (64.9%)\n", - "\n" - ] - } - ], - "source": [ - "train_metrics, valid_metrics = scmu.train(model, epochs=10, optimizer=optimizer,\n", - " training_generator=training_generator,\n", - " validation_generator=validation_generator)" - ] - }, - { - "cell_type": "code", - "execution_count": 26, - "metadata": {}, - "outputs": [ - { - "data": { - "image/png": "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\n", - "text/plain": [ - "
" - ] - }, - "metadata": { - "needs_background": "light" - }, - "output_type": "display_data" - }, - { - "data": { - "image/png": "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\n", - "text/plain": [ - "
" - ] - }, - "metadata": { - "needs_background": "light" - }, - "output_type": "display_data" - } - ], - "source": [ - "plt.plot([train_metric[0] for train_metric in train_metrics], label ='Training error')\n", - "plt.plot([valid_metric[0] for valid_metric in valid_metrics], label ='Validation error')\n", - "plt.legend()\n", - "plt.show()\n", - "plt.plot([train_metric[1] for train_metric in train_metrics], label ='Training accuracy')\n", - "plt.plot([valid_metric[1] for valid_metric in valid_metrics], label ='Validation accuracy')\n", - "plt.legend()\n", - "plt.show()" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "**Evaluate model**" - ] - }, - { - "cell_type": "code", - "execution_count": 27, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Average loss: 0.6059, Accuracy: 738/1106 (66.7%)\n", - "\n" - ] - }, - { - "data": { - "text/plain": [ - "(0.6059427541591376, 66.72694394213381)" - ] - }, - "execution_count": 27, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "scmu.test(model, test_generator)" - ] - }, - { - "cell_type": "code", - "execution_count": 28, - "metadata": {}, - "outputs": [], - "source": [ - "torch.save(model.state_dict(), \"skin-cancer-model\")" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Serve model\n", - "\n", - "\n", - "Before running the cells below make sure to run the websocket grid clients locally:\n", - "\n", - "```bash\n", - "cd ../../app/websocket/\n", - "python websocket_app.py --start_local_db --id=grid_server --port=3001\n", - "\n", - "python websocket_app.py --start_local_db --id=patient_server --port=3000\n", - "\n", - "python websocket_app.py --start_local_db --id=hospital_server --port=3002\n", - "\n", - "python websocket_app.py --start_local_db --id=crypto_provider --port=3003\n", - "```" - ] - }, - { - "cell_type": "code", - "execution_count": 1, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "WARNING: Grid nodes publish datasets online and are for EXPERIMENTAL use only.Deploy nodes at your own risk. Do not use OpenGrid with any data/models you wish to keep private.\n", - "\n", - "WARNING: Grid nodes publish datasets online and are for EXPERIMENTAL use only.Deploy nodes at your own risk. Do not use OpenGrid with any data/models you wish to keep private.\n", - "\n", - "WARNING: Grid nodes publish datasets online and are for EXPERIMENTAL use only.Deploy nodes at your own risk. Do not use OpenGrid with any data/models you wish to keep private.\n", - "\n", - "WARNING: Grid nodes publish datasets online and are for EXPERIMENTAL use only.Deploy nodes at your own risk. Do not use OpenGrid with any data/models you wish to keep private.\n", - "\n" - ] - } - ], - "source": [ - "# Import dependencies\n", - "import grid as gr\n", - "from grid import syft as sy\n", - "import torch as th\n", - "import skin_cancer_model_utils as scmu\n", - "\n", - "# Ignore warnings\n", - "import warnings\n", - "warnings.filterwarnings('ignore')\n", - "\n", - "# Hook torch\n", - "hook = sy.TorchHook(th)\n", - "me = hook.local_worker\n", - "me.is_client_worker = False\n", - " \n", - "# Connect to nodes\n", - "grid_server = gr.WebsocketGridClient(hook, \"http://localhost:3001\", id=\"grid_server\")\n", - "patient_server = gr.WebsocketGridClient(hook, \"http://localhost:3000\", id=\"patient_server\")\n", - "hospital_server = gr.WebsocketGridClient(hook, \"http://localhost:3002\", id=\"hospital_server\")\n", - "crypto_provider = gr.WebsocketGridClient(hook, \"http://localhost:3003\", id=\"crypto_provider\")\n", - "\n", - "grid_server.connect()\n", - "patient_server.connect()\n", - "hospital_server.connect()\n", - "crypto_provider.connect()\n", - "\n", - "# Connect nodes to each other\n", - "gr.connect_all_nodes([grid_server, patient_server, hospital_server, crypto_provider])" - ] - }, - { - "cell_type": "code", - "execution_count": 2, - "metadata": {}, - "outputs": [], - "source": [ - "data, target = scmu.get_data_sample()" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Making a model ready to be served and encrypted\n", - "\n", - "In order to serve the model it needs to be serializable. A Plan is intended to store a sequence of torch operations, just like a function, but it allows to send this sequence of operations to remote workers and to keep a reference to it. You can learn more about plans in [Syft's tutorials](https://github.com/OpenMined/PySyft/blob/dev/examples/tutorials/Part%2008%20-%20Introduction%20to%20Plans.ipynb).\n" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Define Model\n", - "\n", - "Let's load the model we just trained." - ] - }, - { - "cell_type": "code", - "execution_count": 3, - "metadata": {}, - "outputs": [], - "source": [ - "model = scmu.make_model(is_plan=True, model_id=\"skin-cancer-model-encrypted\")\n", - "model.load_state_dict(th.load(\"skin-cancer-model\"))" - ] - }, - { - "cell_type": "code", - "execution_count": 4, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "" - ] - }, - "execution_count": 4, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "model" - ] - }, - { - "cell_type": "code", - "execution_count": 5, - "metadata": {}, - "outputs": [], - "source": [ - "model.build(data)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Serve model" - ] - }, - { - "cell_type": "code", - "execution_count": 6, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "" - ] - }, - "execution_count": 6, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "model.encrypt(patient_server, hospital_server, crypto_provider=crypto_provider)" - ] - }, - { - "cell_type": "code", - "execution_count": 7, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "True" - ] - }, - "execution_count": 7, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "grid_server.serve_encrypted_model(model)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [] - } - ], - "metadata": { - "kernelspec": { - "display_name": "Python 3", - "language": "python", - "name": "python3" - }, - "language_info": { - "codemirror_mode": { - "name": "ipython", - "version": 3 - }, - "file_extension": ".py", - "mimetype": "text/x-python", - "name": "python", - "nbconvert_exporter": "python", - "pygments_lexer": "ipython3", - "version": "3.6.7" - } - }, - "nbformat": 4, - "nbformat_minor": 2 -} diff --git a/examples/Serving and Querying models on Grid/3.2. Querying an encrypted model.ipynb b/examples/Serving and Querying models on Grid/3.2. Querying an encrypted model.ipynb deleted file mode 100644 index 620e5952d..000000000 --- a/examples/Serving and Querying models on Grid/3.2. Querying an encrypted model.ipynb +++ /dev/null @@ -1,138 +0,0 @@ -{ - "cells": [ - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "# 3.2. Querying an encrypted model\n", - "**protecting privacy and IP simultaneously**\n" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Set up" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# Import dependencies\n", - "import grid as gr\n", - "from grid import syft as sy\n", - "import torch as th\n", - "import skin_cancer_model_utils as scmu\n", - "\n", - "# Ignore warnings\n", - "import warnings\n", - "warnings.filterwarnings('ignore')\n", - "\n", - "\n", - "# Hook torch\n", - "hook = sy.TorchHook(th)\n", - "me = hook.local_worker\n", - "me.is_client_worker = False\n", - " \n", - "# Connect to nodes\n", - "grid_server = gr.WebsocketGridClient(hook, \"http://localhost:3001\", id=\"grid_server\")\n", - "patient_server = gr.WebsocketGridClient(hook, \"http://localhost:3000\", id=\"patient_server\")\n", - "hospital_server = gr.WebsocketGridClient(hook, \"http://localhost:3002\", id=\"hospital_server\")\n", - "crypto_provider = gr.WebsocketGridClient(hook, \"http://localhost:3003\", id=\"crypto_provider\")\n", - "\n", - "grid_server.connect()\n", - "patient_server.connect()\n", - "hospital_server.connect()\n", - "crypto_provider.connect()\n", - "\n", - "# Connect nodes to each other\n", - "gr.connect_all_nodes([grid_server, patient_server, hospital_server, crypto_provider])" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Query model\n", - "#### Get a copy of the encrypted model" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "encrypted_model = grid_server.download_model(\"skin-cancer-model-encrypted\")" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "**Encrypted data for running through the model**" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "data, target = scmu.get_data_sample()" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "x_sh = data.encrypt(patient_server, hospital_server, crypto_provider=crypto_provider)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "#### Run encrypted inference" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "scrolled": true - }, - "outputs": [], - "source": [ - "%%time\n", - "print(encrypted_model(x_sh).request_decryption(), target)" - ] - } - ], - "metadata": { - "kernelspec": { - "display_name": "Python 3", - "language": "python", - "name": "python3" - }, - "language_info": { - "codemirror_mode": { - "name": "ipython", - "version": 3 - }, - "file_extension": ".py", - "mimetype": "text/x-python", - "name": "python", - "nbconvert_exporter": "python", - "pygments_lexer": "ipython3", - "version": "3.6.7" - } - }, - "nbformat": 4, - "nbformat_minor": 2 -} diff --git a/examples/Serving and Querying models on Grid/4. Introducing the Grid Network.ipynb b/examples/Serving and Querying models on Grid/4. Introducing the Grid Network.ipynb deleted file mode 100644 index 1b7f2a4eb..000000000 --- a/examples/Serving and Querying models on Grid/4. Introducing the Grid Network.ipynb +++ /dev/null @@ -1,223 +0,0 @@ -{ - "cells": [ - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "# 4. Introducing the Grid Network\n", - "\n", - "\n", - "In the previous tutorials we explicitly connected to the workers in order to interact with them, this can be useful for use cases where we want to have control over where the data is stored (which node?) and who performs each role on the application.\n", - "\n", - "Another possible way to see Grid is that workers that are connected consist of a Grid Network.\n", - "\n", - "\n", - "## What is the Grid Network?\n", - "\n", - "

\n", - "\n", - "

\n", - "\n", - "\n", - "This network can be seen by a user as a single interface: the Grid Gateway. The Gateway works like a special DNS component but it will route nodes by queries instead of domain names.\n", - "\n", - "It is important to emphasize: the Grid Gateway will not be able to perform any computation process on the nodes. It can not concentrate or centralize any data or model. It works as a brigde between a user that is outside of the grid network to get data / models that live inside the network.\n", - "\n", - "\n", - "

\n", - "\n", - "

\n", - "\n", - "With this fully distributed and descentralized architecure we can provide fault tolerance in a very transparent way.\n", - "\n", - "\n", - "## Using the Grid Network\n", - "\n", - "\n", - "In this notebook we'll use a grid network to host a toy model." - ] - }, - { - "cell_type": "code", - "execution_count": 18, - "metadata": {}, - "outputs": [], - "source": [ - "import torch as th\n", - "import grid as gr\n", - "import syft as sy\n", - "import torch.nn.functional as F\n", - "\n", - "\n", - "# Ignore warnings\n", - "import warnings\n", - "warnings.filterwarnings('ignore')\n", - "\n", - "hook = sy.TorchHook(th)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Connect to the Grid Network\n", - "\n", - "We don't need to connect to each worker explictly we just connect to a gateway." - ] - }, - { - "cell_type": "code", - "execution_count": 6, - "metadata": {}, - "outputs": [], - "source": [ - "# Checkout the example folders to learn how to setup a GridNetwork on Heroku!\n", - "grid_network = gr.GridNetwork(\"http://opengridgateway.herokuapp.com\")" - ] - }, - { - "cell_type": "code", - "execution_count": 11, - "metadata": {}, - "outputs": [], - "source": [ - "# Build Model\n", - "class Net(sy.Plan):\n", - " def __init__(self):\n", - " super(Net, self).__init__()\n", - " self.fc1 = th.nn.Linear(2, 1)\n", - " self.fc2 = th.nn.Linear(1, 1)\n", - " self.state += [\"fc1\", \"fc2\"]\n", - "\n", - " def forward(self, x):\n", - " x = F.relu(self.fc1(x))\n", - " x = self.fc2(x)\n", - " return x\n", - "\n", - "model = Net()\n", - "model.build(th.tensor([1.0, 2]))" - ] - }, - { - "cell_type": "code", - "execution_count": 12, - "metadata": {}, - "outputs": [], - "source": [ - "grid_network.serve_model(model, model_id=\"toy_model\",allow_remote_inference=True, allow_download=False)" - ] - }, - { - "cell_type": "code", - "execution_count": 13, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "tensor([0.7818])" - ] - }, - "execution_count": 13, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "grid_network.run_remote_inference(model_id=\"toy_model\", data=th.tensor([1.0, 2]))" - ] - }, - { - "cell_type": "code", - "execution_count": 15, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "This model was hosted at: hospitalnode\n", - "Grid Address: http://hospitalnode.herokuapp.com/\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "WARNING:engineio.client:WebSocket connection was closed, aborting\n" - ] - } - ], - "source": [ - "worker = grid_network.query_model(model_id=\"toy_model\")\n", - "\n", - "print(\"This model was hosted at: \", worker.id)\n", - "print(\"Grid Address: \", worker.uri)\n" - ] - }, - { - "cell_type": "code", - "execution_count": 16, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "[0.7817554473876953]" - ] - }, - "execution_count": 16, - "metadata": {}, - "output_type": "execute_result" - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "WARNING:engineio.client:WebSocket connection was closed, aborting\n" - ] - } - ], - "source": [ - "worker.run_remote_inference(model_id=\"toy_model\", data=th.tensor([1.0, 2]))" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Disconnect from the network" - ] - }, - { - "cell_type": "code", - "execution_count": 17, - "metadata": {}, - "outputs": [], - "source": [ - "grid_network.disconnect_nodes()" - ] - } - ], - "metadata": { - "kernelspec": { - "display_name": "Python 3", - "language": "python", - "name": "python3" - }, - "language_info": { - "codemirror_mode": { - "name": "ipython", - "version": 3 - }, - "file_extension": ".py", - "mimetype": "text/x-python", - "name": "python", - "nbconvert_exporter": "python", - "pygments_lexer": "ipython3", - "version": "3.7.3" - } - }, - "nbformat": 4, - "nbformat_minor": 2 -} diff --git a/examples/Serving and Querying models on Grid/README.md b/examples/Serving and Querying models on Grid/README.md deleted file mode 100644 index 8140247b6..000000000 --- a/examples/Serving and Querying models on Grid/README.md +++ /dev/null @@ -1,30 +0,0 @@ -# Serving and Querying models on Grid - - -In these series of tutorials we'll show all the different ways to serve and query models on Grid. - - -## Prerequisites - -Make sure to check it out the tutorials on the example folder, they show how to setup grid workers locally and on heroku. - - -## Notebooks structure - -We define the notebooks structure accordingly to potential use cases: - - 1. Serving a Public Model (GPT-2): protecting individual's privacy - - 1.1. Serving a public model - 1.2. Querying a public model - - 2. Serving a Private Model (GPT-2): protecting model owner's intellectual property (IP) - - 2.1. Serving a private model - 2.2. Querying a private model - - 3. Serving an Encrypted Model (Skin cancer detection model): protecting privacy and IP simultaneously - 3.1 Serving an encrypted model - 3.2. Querying an encrypted model - - 4. Introducing Grid Network: Serving a model on heroku and proving fault tolerance \ No newline at end of file diff --git a/examples/Serving and Querying models on Grid/gpt2_utils.py b/examples/Serving and Querying models on Grid/gpt2_utils.py deleted file mode 100644 index 1b21f730b..000000000 --- a/examples/Serving and Querying models on Grid/gpt2_utils.py +++ /dev/null @@ -1,141 +0,0 @@ -#!/usr/bin/env python3 -# coding=utf-8 -# Copyright 2018 Google AI, Google Brain and Carnegie Mellon University Authors and the HuggingFace Inc. team. -# Copyright (c) 2018, NVIDIA CORPORATION. All rights reserved. -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - - -import torch as th -import torch.nn.functional as F -from pytorch_transformers import GPT2Tokenizer - -# Load pre-trained model tokenizer (vocabulary) -tokenizer = GPT2Tokenizer.from_pretrained("gpt2") - - -def encode_text(text): - # Encode a text inputs - indexed_tokens = tokenizer.encode(text) - # Convert indexed tokens in a PyTorch tensor - return th.tensor([indexed_tokens]) - - -def decode_tokens(tokens): - return tokenizer.decode(tokens) - - -def decode_local_response(response): - predictions = th.tensor(response[0]) - predicted_index = th.argmax(predictions[0, -1, :]).item() - predicted_text = decode_tokens([predicted_index]) - return predicted_text - - -def decode_response(response): - predictions = th.tensor(response) - predicted_index = th.argmax(predictions[0, -1, :]).item() - predicted_text = decode_tokens([predicted_index]) - return predicted_text - - -def top_k_top_p_filtering(logits, top_k=0, top_p=0.0, filter_value=-float("Inf")): - """ Filter a distribution of logits using top-k and/or nucleus (top-p) filtering - - This code is from: https://gist.github.com/thomwolf/1a5a29f6962089e871b94cbd09daf317 - Author: Thomas Wolf. - - Args: - logits: logits distribution shape (vocabulary size) - top_k > 0: keep only top k tokens with highest probability (top-k filtering). - top_p > 0.0: keep the top tokens with cumulative probability >= top_p (nucleus filtering). - Nucleus filtering is described in Holtzman et al. (http://arxiv.org/abs/1904.09751) - """ - assert ( - logits.dim() == 1 - ) # batch size 1 for now - could be updated for more but the code would be less clear - top_k = min(top_k, logits.size(-1)) # Safety check - if top_k > 0: - # Remove all tokens with a probability less than the last token of the top-k - indices_to_remove = logits < th.topk(logits, top_k)[0][..., -1, None] - logits[indices_to_remove] = filter_value - - if top_p > 0.0: - sorted_logits, sorted_indices = th.sort(logits, descending=True) - cumulative_probs = th.cumsum(F.softmax(sorted_logits, dim=-1), dim=-1) - - # Remove tokens with cumulative probability above the threshold - sorted_indices_to_remove = cumulative_probs > top_p - # Shift the indices to the right to keep also the first token above the threshold - sorted_indices_to_remove[..., 1:] = sorted_indices_to_remove[..., :-1].clone() - sorted_indices_to_remove[..., 0] = 0 - - indices_to_remove = sorted_indices[sorted_indices_to_remove] - logits[indices_to_remove] = filter_value - return logits - - -def sample_sequence( - length, - context, - model=None, - worker=None, - model_id="GPT-2", - temperature=1, - top_k=0, - top_p=0.0, - device="cpu", -): - # We expect a list of indexes as input - if isinstance(context, th.Tensor): - context = context.tolist()[0] - - context = th.tensor(context, dtype=th.long, device=device) - context = context.unsqueeze(0).repeat(1, 1) - - predicted_indexes = [] - generated = context - with th.no_grad(): - for _ in range(length): - # Inference - if worker and model_id: - outputs = worker.run_remote_inference(model_id=model_id, data=generated) - elif model: - outputs = model(generated) - else: - raise ValueError( - "You should provide a worker and a model_id or a model in order to run this function." - ) - - # Applying Filter - if model: - next_token_logits = outputs[0][0, -1, :] / temperature - else: - next_token_logits = outputs[0, -1, :] / temperature - filtered_logits = top_k_top_p_filtering( - next_token_logits, top_k=top_k, top_p=top_p - ) - - next_token = th.multinomial( - F.softmax(filtered_logits, dim=-1), num_samples=1 - ) - - # Update context shifting tokens - generated = th.cat( - (th.tensor([generated[0][1:].tolist()]), next_token.unsqueeze(0)), dim=1 - ) - - # Save predicted word - predicted_indexes.append(next_token.item()) - - return decode_tokens(predicted_indexes) diff --git a/examples/Serving and Querying models on Grid/images/gpt-public-webpage.png b/examples/Serving and Querying models on Grid/images/gpt-public-webpage.png deleted file mode 100644 index 8632432da..000000000 Binary files a/examples/Serving and Querying models on Grid/images/gpt-public-webpage.png and /dev/null differ diff --git a/examples/Serving and Querying models on Grid/skin_cancer_model_utils.py b/examples/Serving and Querying models on Grid/skin_cancer_model_utils.py deleted file mode 100644 index 6e6ad0186..000000000 --- a/examples/Serving and Querying models on Grid/skin_cancer_model_utils.py +++ /dev/null @@ -1,231 +0,0 @@ -"""Functions and variables shared accross the notebooks.""" - -from glob import glob -import os - -import pandas as pd -from PIL import Image -import seaborn as sn -from sklearn.metrics import confusion_matrix -from sklearn.model_selection import train_test_split - -import syft as sy -import torch -import torchvision.transforms as transforms -import torch.utils.data -import torch.nn as nn -import torch.nn.functional as F - - -DATASET_PATH = "./skin-cancer-mnist-ham10000" -test_generator = None - - -def read_skin_cancer_dataset(): - """Originally from https://www.kaggle.com/kmader/dermatology-mnist-loading-and-processing.""" - all_image_path = glob(os.path.join(DATASET_PATH, "*", "*.jpg")) - - imageid_path_dict = { - os.path.splitext(os.path.basename(x))[0]: x for x in all_image_path - } - - lesion_type_dict = { - "nv": "Melanocytic nevi", - "mel": "Melanoma", - "bkl": "Benign keratosis-like lesions", - "bcc": "Basal cell carcinoma", - "akiec": "Actinic keratoses", - "vasc": "Vascular lesions", - "df": "Dermatofibroma", - } - - df = pd.read_csv(os.path.join(DATASET_PATH, "HAM10000_metadata.csv")) - df["path"] = df["image_id"].map(imageid_path_dict.get) - df["cell_type"] = df["dx"].map(lesion_type_dict.get) - # Binary classification - df = df[df.cell_type.isin(["Melanoma", "Benign keratosis-like lesions"])] - df["cell_type_idx"] = pd.Categorical(df["cell_type"]).codes - df[["cell_type_idx", "cell_type"]].sort_values("cell_type_idx").drop_duplicates() - - return df - - -def split_data(df, test_size=0.1): - train_df, test_df = train_test_split(df, test_size=test_size, random_state=221) - validation_df, test_df = train_test_split(df, test_size=0.5, random_state=222) - - train_df = train_df.reset_index() - validation_df = validation_df.reset_index() - test_df = test_df.reset_index() - return train_df, validation_df, test_df - - -def calculate_mean_and_std(loader): - mean, std, nb_samples = 0.0, 0.0, 0.0 - for data, _ in loader: - batch_samples = data.size(0) - data = data.view(batch_samples, data.size(1), -1) - mean += data.mean(2).sum(0) - std += data.std(2).sum(0) - nb_samples += batch_samples - - mean /= nb_samples - std /= nb_samples - return mean, std - - -def transform(input_size, mean, std): - return transforms.Compose( - [ - transforms.Resize((input_size, input_size)), - transforms.RandomHorizontalFlip(), - transforms.RandomVerticalFlip(), - transforms.ToTensor(), - transforms.Normalize(mean=mean, std=std), - ] - ) - - -def make_model( - num_classes: int = 2, is_plan=False, model_id="skin-cancer-model-encrypted" -): - super_class = sy.Plan if is_plan else nn.Module - - class Net(super_class): - """Similar to LeNet5 but without pooling.""" - - def __init__(self): - if is_plan: - super(Net, self).__init__(id=model_id) - else: - super(Net, self).__init__() - self.conv1 = nn.Conv2d(3, 6, 5, 1) - self.conv2 = nn.Conv2d(6, 16, 5, 1) - self.fc1 = nn.Linear(9216, 120) - self.fc2 = nn.Linear(120, 84) - self.fc3 = nn.Linear(84, num_classes) - - if is_plan: - self.add_to_state(["conv1", "conv2", "fc1", "fc2", "fc3"]) - - def forward(self, x): - x = F.relu(self.conv1(x)) - x = F.relu(self.conv2(x)) - x = x.view(-1, 9216) - x = F.relu(self.fc1(x)) - x = F.relu(self.fc2(x)) - x = self.fc3(x) - return x - - return Net() - - -def test(model, data_loader): - model.eval() - test_loss = 0 - correct = 0 - with torch.no_grad(): - for data, target in data_loader: - output = model(data) - output = F.log_softmax(output, dim=1) - test_loss += F.nll_loss( - output, target, reduction="sum" - ).item() # sum up batch loss - pred = output.argmax( - 1, keepdim=True - ) # get the index of the max log-probability - correct += pred.eq(target.view_as(pred)).sum().item() - - test_loss /= len(data_loader.dataset) - acc = 100.0 * correct / len(data_loader.dataset) - - print( - "Average loss: {:.4f}, Accuracy: {}/{} ({:.1f}%)\n".format( - test_loss, correct, len(data_loader.dataset), acc - ) - ) - - return test_loss, acc - - -def train( - model, epochs, optimizer, training_generator, validation_generator, verbose=True -): - train_metrics, valid_metrics = [], [] - - step = 0 - for epoch in range(epochs): - model.train() - for data, target in training_generator: - output = model(data) - output = F.log_softmax(output, dim=1) - loss = F.nll_loss(output, target) - loss.backward() - optimizer.step() - if verbose and step % 100 == 0: - print("Training loss at step {} = {}".format(step, loss.item())) - step += 1 - - print("Epoch: {}".format(epoch)) - print("Train\n==============") - train_metrics.append(test(model, training_generator)) - print("Test\n==============") - valid_metrics.append(test(model, validation_generator)) - return train_metrics, valid_metrics - - -def plot_confusion_matrix(model, loader): - # Predict the values from the validation dataset - model.eval() - - model_output = torch.cat([model(x) for x, _ in loader]) - predictions = torch.argmax(model_output, dim=1) - targets = torch.cat([y for _, y in loader]) - - conf_matrix = confusion_matrix(targets, predictions) - df_cm = pd.DataFrame(conf_matrix) - sn.set(font_scale=1) - sn.heatmap(df_cm, annot=True, annot_kws={"size": 16}) - - -def get_data_sample(): - global test_generator - if not test_generator: - df = read_skin_cancer_dataset() - _, _, test_df = split_data(df) - - params = {"batch_size": 1, "shuffle": True, "num_workers": 6} - - # These values are from training - input_size = 32 - train_mean, train_std = ( - torch.tensor([0.6979, 0.5445, 0.5735]), - torch.tensor([0.0959, 0.1187, 0.1365]), - ) - - test_set = Dataset( - test_df, transform=transform(input_size, train_mean, train_std) - ) - test_generator = torch.utils.data.DataLoader(test_set, **params) - - return next(iter(test_generator)) - - -class Dataset(torch.utils.data.Dataset): - """Originally from https://towardsdatascience.com/skin-cancer-classification-with-machine-learning-c9d3445b2163.""" - - def __init__(self, df, transform=None): - self.df = df - self.transform = transform - - def __len__(self): - return len(self.df) - - def __getitem__(self, index): - X = Image.open(self.df["path"][index]) - y = torch.tensor(int(self.df["cell_type_idx"][index])) - - if self.transform: - X = self.transform(X) - - return X, y diff --git a/examples/android/Android Proxy.ipynb b/examples/android/Android Proxy.ipynb deleted file mode 100644 index 050bc523f..000000000 --- a/examples/android/Android Proxy.ipynb +++ /dev/null @@ -1,63 +0,0 @@ -{ - "cells": [ - { - "cell_type": "code", - "execution_count": 1, - "metadata": {}, - "outputs": [], - "source": [ - "import socketio\n", - "\n", - "sio = socketio.Client()\n", - "sio.connect('http://localhost:5000')" - ] - }, - { - "cell_type": "code", - "execution_count": 2, - "metadata": {}, - "outputs": [], - "source": [ - "def send_ack():\n", - " sio.emit('client_ack', 'android')" - ] - }, - { - "cell_type": "code", - "execution_count": 3, - "metadata": {}, - "outputs": [], - "source": [ - "send_ack()" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [] - } - ], - "metadata": { - "kernelspec": { - "display_name": "Python [conda env:openmined2]", - "language": "python", - "name": "conda-env-openmined2-py" - }, - "language_info": { - "codemirror_mode": { - "name": "ipython", - "version": 3 - }, - "file_extension": ".py", - "mimetype": "text/x-python", - "name": "python", - "nbconvert_exporter": "python", - "pygments_lexer": "ipython3", - "version": "3.7.2" - } - }, - "nbformat": 4, - "nbformat_minor": 2 -} diff --git a/examples/android/Socket Bob.ipynb b/examples/android/Socket Bob.ipynb deleted file mode 100644 index ac58b1748..000000000 --- a/examples/android/Socket Bob.ipynb +++ /dev/null @@ -1,190 +0,0 @@ -{ - "cells": [ - { - "cell_type": "code", - "execution_count": 1, - "metadata": {}, - "outputs": [], - "source": [ - "import syft as sy\n", - "from syft.frameworks.torch.tensors.decorators.logging import LoggingTensor\n", - "import sys\n", - "import torch\n", - "hook = sy.TorchHook(torch)" - ] - }, - { - "cell_type": "code", - "execution_count": 2, - "metadata": {}, - "outputs": [], - "source": [ - "from grid.workers.socketio_client import WebsocketIOClientWorker\n", - "\n", - "# Config serialiser and compression strategies\n", - "sy.serde.torch_serde._serialize_tensor = sy.serde.torch_serde.numpy_tensor_serializer\n", - "sy.serde.torch_serde._deserialize_tensor = sy.serde.torch_serde.numpy_tensor_deserializer\n", - "sy.serde.serde._apply_compress_scheme = sy.serde.apply_no_compression\n" - ] - }, - { - "cell_type": "code", - "execution_count": 3, - "metadata": {}, - "outputs": [], - "source": [ - "bob = WebsocketIOClientWorker(hook, host='localhost', port=5000, id=\"bob\")" - ] - }, - { - "cell_type": "code", - "execution_count": 4, - "metadata": {}, - "outputs": [], - "source": [ - "bob.connect()" - ] - }, - { - "cell_type": "code", - "execution_count": 5, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "(6, (2, (12, (37810190904, b\"\\x93NUMPY\\x01\\x00v\\x00{'descr': '[PointerTensor | me:3223969796 -> bob:37810190904]" - ] - }, - "execution_count": 6, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "x_ptr" - ] - }, - { - "cell_type": "code", - "execution_count": 7, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "(6, (2, (12, (17081455292, b\"\\x93NUMPY\\x01\\x00v\\x00{'descr': ' Torchsript creates serializable and optimizable models from PyTorch code. Any code written in TorchScript can be saved from a Python process and loaded in a process where there is no Python dependency. This facility will allow us to send this model to remote workers. - jit documentation\n", - "\n", - "**IMPORTANT**: you'll need torch 1.0.1 in order to run this demo with jit modules due to compatibility issues between syft and torch.jit in the more recent versions.\n", - "\n", - "2. Using Plans. A Plan is intended to store a sequence of torch operations, just like a function, but it allows to send this sequence of operations to remote workers and to keep a reference to it. You can learn more about plans in [Syft's tutorials](https://github.com/OpenMined/PySyft/blob/dev/examples/tutorials/Part%2008%20-%20Introduction%20to%20Plans.ipynb).\n", - "\n", - "#### 1. Jit Module\n", - "\n", - "We can turn a regular module into a jit module using torch.jit.trace." - ] - }, - { - "cell_type": "code", - "execution_count": 6, - "metadata": {}, - "outputs": [], - "source": [ - "traced_model = torch.jit.trace(model, data)" - ] - }, - { - "cell_type": "code", - "execution_count": 7, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "TracedModule[Net](\n", - " (conv1): TracedModule[Conv2d]()\n", - " (conv2): TracedModule[Conv2d]()\n", - " (conv3): TracedModule[Conv2d]()\n", - " (fc1): TracedModule[Linear]()\n", - " (fc2): TracedModule[Linear]()\n", - " (fc3): TracedModule[Linear]()\n", - ")" - ] - }, - "execution_count": 7, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "traced_model" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "#### 2. Plan\n", - "\n", - "We can't turn an existing model into a Plan, in order to create a Plan we need to inherit from syft.Plan during the creation of the model. We implemented this logic at `helper.py`." - ] - }, - { - "cell_type": "code", - "execution_count": 8, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "" - ] - }, - "execution_count": 8, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "plan_model = helper.make_model(is_plan=True)\n", - "# plan_model.load_state_dict(torch.load(\"binary-skin-cancer-detection-model\"))\n", - "plan_model" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Before sending the plan anywhere we need to build it (similar to the trace operation)." - ] - }, - { - "cell_type": "code", - "execution_count": 9, - "metadata": {}, - "outputs": [], - "source": [ - "plan_model.build(data)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Serve model\n", - "\n", - "We can check the models served at `bob` at `bob.models`." - ] - }, - { - "cell_type": "code", - "execution_count": 10, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "{'success': True, 'models': []}" - ] - }, - "execution_count": 10, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "bob.models" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "We can serve a new model at `bob` by calling `bob.serve_model(, )`" - ] - }, - { - "cell_type": "code", - "execution_count": 11, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "{'success': True, 'message': 'Model saved with id: skin-cancer-model-1'}" - ] - }, - "execution_count": 11, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "bob.serve_model(plan_model, model_id=\"skin-cancer-model-1\")" - ] - }, - { - "cell_type": "code", - "execution_count": 12, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "{'success': True, 'models': ['skin-cancer-model-1']}" - ] - }, - "execution_count": 12, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "bob.models" - ] - }, - { - "cell_type": "code", - "execution_count": 13, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "{'success': True, 'message': 'Model saved with id: skin-cancer-model-2'}" - ] - }, - "execution_count": 13, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "bob.serve_model(traced_model, model_id=\"skin-cancer-model-2\", allow_remote_inference=True)" - ] - }, - { - "cell_type": "code", - "execution_count": 14, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "{'success': True, 'models': ['skin-cancer-model-1', 'skin-cancer-model-2']}" - ] - }, - "execution_count": 14, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "bob.models" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Query model\n", - "\n", - "Now any one that can connect to this worker can query this model. Let's restart this notebook (so we loose connection to the worker and don't know the model anymore)." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "from IPython.display import display_html\n", - "\n", - "def restart_kernel() :\n", - " display_html(\"\",raw=True)\n", - " \n", - "restart_kernel()" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "First let's reconnect to the worker." - ] - }, - { - "cell_type": "code", - "execution_count": 2, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "WARNING: Grid nodes publish datasets online and are for EXPERIMENTAL use only.Deploy nodes at your own risk. Do not use OpenGrid with any data/models you wish to keep private.\n", - "\n" - ] - } - ], - "source": [ - "import grid as gr\n", - "import torch\n", - "import syft as sy\n", - "import helper\n", - "\n", - "hook = sy.TorchHook(torch)\n", - "\n", - "bob = gr.WebsocketGridClient(hook, \"http://localhost:3000\", id=\"Bob\")\n", - "bob.connect()" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Now we can run inference at the host models by calling `bob.run_remote_inference(model_id, data)`." - ] - }, - { - "cell_type": "code", - "execution_count": 3, - "metadata": {}, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/home/marianne/PySyft/syft/frameworks/torch/hook/hook.py:483: UserWarning: To copy construct from a tensor, it is recommended to use sourceTensor.clone().detach() or sourceTensor.clone().detach().requires_grad_(True), rather than torch.tensor(sourceTensor).\n", - " current_tensor = hook_self.torch.native_tensor(*args, **kwargs)\n" - ] - } - ], - "source": [ - "df = helper.read_skin_cancer_dataset()\n", - "train_df, valid_df, test_df = helper.split_data(df)\n", - "\n", - "# These values are from Part 1.\n", - "input_size = 32\n", - "train_mean, train_std = (torch.tensor([0.6979, 0.5445, 0.5735]), torch.tensor([0.0959, 0.1187, 0.1365]))\n", - "\n", - "# Create a test dataloader\n", - "test_set = helper.Dataset(test_df, transform=helper.transform(input_size, train_mean, train_std))\n", - "test_generator = torch.utils.data.DataLoader(test_set, batch_size=1, shuffle=True)\n", - "\n", - "# Get a data sample and a target\n", - "data, target = next(iter(test_generator))" - ] - }, - { - "cell_type": "code", - "execution_count": 4, - "metadata": { - "scrolled": true - }, - "outputs": [ - { - "data": { - "text/plain": [ - "({'success': False, 'error': 'Model not found'}, tensor([0]))" - ] - }, - "execution_count": 4, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "bob.run_remote_inference(model_id=\"skin-cancer-model-1\", data=data), target" - ] - }, - { - "cell_type": "code", - "execution_count": 5, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "({'success': True,\n", - " 'prediction': [[-0.015796272084116936, -0.06061054766178131]]},\n", - " tensor([0]))" - ] - }, - "execution_count": 5, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "bob.run_remote_inference(model_id=\"skin-cancer-model-2\", data=data), target" - ] - }, - { - "cell_type": "code", - "execution_count": 6, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "{'success': True, 'models': ['skin-cancer-model-2']}" - ] - }, - "execution_count": 6, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "bob.models" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Other operations\n", - "\n", - "\n", - "**Delete a Model**\n", - "\n", - "One can also delete a model if they want." - ] - }, - { - "cell_type": "code", - "execution_count": 10, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "{'success': False, 'error': \"Class 'builtins.NoneType' is not mapped\"}" - ] - }, - "execution_count": 10, - "metadata": {}, - "output_type": "execute_result" - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "WARNING:engineio.client:WebSocket connection was closed, aborting\n" - ] - } - ], - "source": [ - "# deletes the remote model\n", - "bob.delete_model(\"skin-cancer-model-1\")" - ] - }, - { - "cell_type": "code", - "execution_count": 9, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "{'success': True, 'models': ['skin-cancer-model-2']}" - ] - }, - "execution_count": 9, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "bob.models" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "# Congratulations!!! - Time to Join the Community!\n", - "\n", - "Congratulations on completing this notebook tutorial! If you enjoyed this and would like to join the movement toward privacy preserving, decentralized ownership of AI and the AI supply chain (data), you can do so in the following ways!\n", - "\n", - "## Star PySyft on GitHub\n", - "The easiest way to help our community is just by starring the GitHub repos! This helps raise awareness of the cool tools we're building.\n", - "\n", - "[Star PySyft](https://github.com/OpenMined/PySyft)\n", - "\n", - "## Join our Slack!\n", - "The best way to keep up to date on the latest advancements is to join our community! You can do so by filling out the form at http://slack.openmined.org\n", - "\n", - "## Join a Code Project!\n", - "The best way to contribute to our community is to become a code contributor! At any time you can go to PySyft GitHub Issues page and filter for \"Projects\". This will show you all the top level Tickets giving an overview of what projects you can join! If you don't want to join a project, but you would like to do a bit of coding, you can also look for more \"one off\" mini-projects by searching for GitHub issues marked \"good first issue\".\n", - "\n", - "[PySyft Projects](https://github.com/OpenMined/PySyft/issues?q=is%3Aopen+is%3Aissue+label%3AProject)\n", - "[Good First Issue Tickets](https://github.com/OpenMined/PySyft/issues?q=is%3Aopen+is%3Aissue+label%3A%22good+first+issue%22)\n", - "\n", - "## Donate\n", - "\n", - "If you don't have time to contribute to our codebase, but would still like to lend support, you can also become a Backer on our Open Collective. All donations go toward our web hosting and other community expenses such as hackathons and meetups!\n", - "\n", - "[OpenMined's Open Collective Page](https://opencollective.com/openmined)" - ] - } - ], - "metadata": { - "kernelspec": { - "display_name": "Python 3", - "language": "python", - "name": "python3" - }, - "language_info": { - "codemirror_mode": { - "name": "ipython", - "version": 3 - }, - "file_extension": ".py", - "mimetype": "text/x-python", - "name": "python", - "nbconvert_exporter": "python", - "pygments_lexer": "ipython3", - "version": "3.6.7" - } - }, - "nbformat": 4, - "nbformat_minor": 2 -} diff --git a/examples/experimental/2.2 Host and Query Model with Grid.ipynb b/examples/experimental/2.2 Host and Query Model with Grid.ipynb deleted file mode 100644 index 5b802d5d7..000000000 --- a/examples/experimental/2.2 Host and Query Model with Grid.ipynb +++ /dev/null @@ -1,207 +0,0 @@ -{ - "cells": [ - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "

Host and Query Model with Grid

\n", - "

In this series of tutorials we show how you can serve and query models on Grid platform.

\n", - "\n", - "**NOTE:** At the time of running this notebook, we were running the grid components in background mode. \n", - "\n", - "**NOTE:**\n", - "Components:\n", - " - Grid Gateway(http://localhost:5000)\n", - " - Grid Node Alice (http://localhost:3000)\n", - " - Grid Node Bob (http://localhost:3001)\n", - " - Grid Node Bill (http://localhost:3002)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "

Import dependencies

" - ] - }, - { - "cell_type": "code", - "execution_count": 1, - "metadata": {}, - "outputs": [ - { - "ename": "ModuleNotFoundError", - "evalue": "No module named 'helper'", - "output_type": "error", - "traceback": [ - "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", - "\u001b[0;31mModuleNotFoundError\u001b[0m Traceback (most recent call last)", - "\u001b[0;32m\u001b[0m in \u001b[0;36m\u001b[0;34m\u001b[0m\n\u001b[1;32m 2\u001b[0m \u001b[0;32mimport\u001b[0m \u001b[0mgrid\u001b[0m \u001b[0;32mas\u001b[0m \u001b[0mgr\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 3\u001b[0m \u001b[0;32mimport\u001b[0m \u001b[0mtorch\u001b[0m \u001b[0;32mas\u001b[0m \u001b[0mth\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m----> 4\u001b[0;31m \u001b[0;32mimport\u001b[0m \u001b[0mhelper\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m", - "\u001b[0;31mModuleNotFoundError\u001b[0m: No module named 'helper'" - ] - } - ], - "source": [ - "import torch as th\n", - "import grid as gr\n", - "import grid.syft as sy\n", - "\n", - "# GPT-2 model\n", - "from pytorch_transformers import GPT2Tokenizer, GPT2LMHeadModel" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "

Set up configs

\n", - "

Now, we'll set our syft hook and instantiate our grid

" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "hook = sy.TorchHook(th)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "my_grid = gr.GridNetwork(\"http://localhost:5000\")" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Load dataset" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "df = helper.read_skin_cancer_dataset()\n", - "train_df, valid_df, test_df = helper.split_data(df)\n", - "\n", - "# These values are from Part 1.\n", - "input_size = 32\n", - "train_mean, train_std = (th.tensor([0.6979, 0.5445, 0.5735]), th.tensor([0.0959, 0.1187, 0.1365]))\n", - "\n", - "# Create a test dataloader\n", - "test_set = helper.Dataset(test_df, transform=helper.transform(input_size, train_mean, train_std))\n", - "test_generator = th.utils.data.DataLoader(test_set, batch_size=1, shuffle=True)\n", - "\n", - "# Get a data sample and a target\n", - "data, target = next(iter(test_generator))" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Create Model" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# Trace model\n", - "model = helper.make_model()\n", - "# model.load_state_dict(torch.load(\"binary-skin-cancer-detection-model\"))\n", - "model.eval()\n", - "traced_model = th.jit.trace(model, data)\n", - "\n", - "# Plan model\n", - "plan_model = helper.make_model(is_plan=True)\n", - "# model.load_state_dict(torch.load(\"binary-skin-cancer-detection-model\"))\n", - "plan_model.eval()\n", - "plan_model.build(data)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "

Hosting our models

\n", - "

Now,we'll host our models on grid nodes registered on our grid network. For test purposes, we'll register the same model (can be jit model or plan model) changing only the model_id.

\n", - "

Nowadays, the choose of grid node that will host the model is random, but in the future we can add a better metric to do this.

" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "my_grid.serve_model(traced_model, \"skin-cancer-grid-model\")" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "

Querying/Running inference

\n", - "

Now, we want to recover the reference of our models registered previously.

\n", - "

It is important to notice that we can have the same ID on different nodes (we can have different versions of same model distributed throughout our network). To solve this problem, when we perform a query, it will return a list of grid nodes that contains some version of this specific model.

" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "my_grid.run_remote_inference(model_id=\"skin-cancer-grid-model\", dataset=data)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "

Disconnect Nodes

" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "my_grid.disconnect_nodes()" - ] - } - ], - "metadata": { - "kernelspec": { - "display_name": "Python 3", - "language": "python", - "name": "python3" - }, - "language_info": { - "codemirror_mode": { - "name": "ipython", - "version": 3 - }, - "file_extension": ".py", - "mimetype": "text/x-python", - "name": "python", - "nbconvert_exporter": "python", - "pygments_lexer": "ipython3", - "version": "3.6.7" - } - }, - "nbformat": 4, - "nbformat_minor": 2 -} diff --git a/examples/experimental/3. Host and Query an encrypted model.ipynb b/examples/experimental/3. Host and Query an encrypted model.ipynb deleted file mode 100644 index 95cfe45a4..000000000 --- a/examples/experimental/3. Host and Query an encrypted model.ipynb +++ /dev/null @@ -1,583 +0,0 @@ -{ - "cells": [ - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "# Hosting models on Grid\n", - "\n", - "Grid offers both: Machine Learning as a Service and Encrypted Machine Learning as a service. In this series of tutorials we show how you can serve and query models on Grid.\n", - "\n", - "This option consists of:\n", - "\n", - "**Owner**\n", - "\n", - "1. Owner has a model\n", - "\n", - "```python\n", - "model = Plan()\n", - "model.build(data)\n", - "```\n", - "\n", - "2. Owner shares the model and sends the model to alice in an encrypted fashion\n", - "\n", - "```python\n", - "plan.fix_precision().share(bob, charlie, crypto_provider=dan).send(alice)\n", - "```\n", - "\n", - "**User**\n", - "\n", - "1. User fetch the plan (this means they have the state locally as pointers to alice) but they can fetch a plan only once, which means only one user can run inference.\n", - "\n", - "This limitation could be turned into a feature if we consider that in the future we may ask for authentication for a user to have access to a model. So the owner could build the model, share it and send to a remote worker (here alice).\n", - "\n", - "Then the owner could tell the user \"Hey here's your token, now you have access to the model, you now have access to a encrypted version of my model, but hey, don't lose this model copy, okay? If you lose it you'll have to ask for a new token.\"\n", - "\n", - "```\n", - "# Fetch plan\n", - "fetched_plan = plan.owner.fetch_plan(plan.id, alice)\n", - "```\n", - "\n", - "2. User shares their data with the same workers\n", - "\n", - "```\n", - "x = th.tensor([-1.0])\n", - "x_sh = data.fix_precision().share(bob, charlie, crypto_provider=dan)\n", - "```\n", - "\n", - "3. User can run inference using this model copy\n", - "\n", - "\n", - "```\n", - "decrypted = fetched_plan(x_sh).get().float_prec()\n", - "```\n", - "\n", - "A few notes:\n", - "\n", - "- No one knows the model except the model owner (yay!!!)\n", - "- The model is secure because we only have access to pointers not the actual weights\n", - "- The user has access to the readable_plan which means the user can figure out the model architecture but not the weight values\n", - "\n", - "\n", - "## 3.2 Host and query an encrypted model\n", - "### Fetch can be done only once\n", - "\n", - "In the previous tutorial we served a CNN for classifying images with different 2 types of skin deseases: benign keratosis and melanoma (type of skin cancer). In this tutorial we show how to serve this model on a **encrypted way** on Grid." - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Imports and model specifications" - ] - }, - { - "cell_type": "code", - "execution_count": 1, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "WARNING: Grid nodes publish datasets online and are for EXPERIMENTAL use only.Deploy nodes at your own risk. Do not use OpenGrid with any data/models you wish to keep private.\n", - "\n" - ] - }, - { - "ename": "ConnectionError", - "evalue": "HTTPConnectionPool(host='localhost', port=3001): Max retries exceeded with url: /identity/ (Caused by NewConnectionError(': Failed to establish a new connection: [Errno 111] Connection refused',))", - "output_type": "error", - "traceback": [ - "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", - "\u001b[0;31mConnectionRefusedError\u001b[0m Traceback (most recent call last)", - "\u001b[0;32m~/.local/lib/python3.6/site-packages/urllib3/connection.py\u001b[0m in \u001b[0;36m_new_conn\u001b[0;34m(self)\u001b[0m\n\u001b[1;32m 159\u001b[0m conn = connection.create_connection(\n\u001b[0;32m--> 160\u001b[0;31m (self._dns_host, self.port), self.timeout, **extra_kw)\n\u001b[0m\u001b[1;32m 161\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n", - "\u001b[0;32m~/.local/lib/python3.6/site-packages/urllib3/util/connection.py\u001b[0m in \u001b[0;36mcreate_connection\u001b[0;34m(address, timeout, source_address, socket_options)\u001b[0m\n\u001b[1;32m 79\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0merr\u001b[0m \u001b[0;32mis\u001b[0m \u001b[0;32mnot\u001b[0m \u001b[0;32mNone\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m---> 80\u001b[0;31m \u001b[0;32mraise\u001b[0m \u001b[0merr\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 81\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n", - "\u001b[0;32m~/.local/lib/python3.6/site-packages/urllib3/util/connection.py\u001b[0m in \u001b[0;36mcreate_connection\u001b[0;34m(address, timeout, source_address, socket_options)\u001b[0m\n\u001b[1;32m 69\u001b[0m \u001b[0msock\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mbind\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0msource_address\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m---> 70\u001b[0;31m \u001b[0msock\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mconnect\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0msa\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 71\u001b[0m \u001b[0;32mreturn\u001b[0m \u001b[0msock\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", - "\u001b[0;31mConnectionRefusedError\u001b[0m: [Errno 111] Connection refused", - "\nDuring handling of the above exception, another exception occurred:\n", - "\u001b[0;31mNewConnectionError\u001b[0m Traceback (most recent call last)", - "\u001b[0;32m~/.local/lib/python3.6/site-packages/urllib3/connectionpool.py\u001b[0m in \u001b[0;36murlopen\u001b[0;34m(self, method, url, body, headers, retries, redirect, assert_same_host, timeout, pool_timeout, release_conn, chunked, body_pos, **response_kw)\u001b[0m\n\u001b[1;32m 602\u001b[0m \u001b[0mbody\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mbody\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mheaders\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mheaders\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 603\u001b[0;31m chunked=chunked)\n\u001b[0m\u001b[1;32m 604\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n", - "\u001b[0;32m~/.local/lib/python3.6/site-packages/urllib3/connectionpool.py\u001b[0m in \u001b[0;36m_make_request\u001b[0;34m(self, conn, method, url, timeout, chunked, **httplib_request_kw)\u001b[0m\n\u001b[1;32m 354\u001b[0m \u001b[0;32melse\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 355\u001b[0;31m \u001b[0mconn\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mrequest\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mmethod\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0murl\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m**\u001b[0m\u001b[0mhttplib_request_kw\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 356\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n", - "\u001b[0;32m~/anaconda3/envs/syft/lib/python3.6/http/client.py\u001b[0m in \u001b[0;36mrequest\u001b[0;34m(self, method, url, body, headers, encode_chunked)\u001b[0m\n\u001b[1;32m 1238\u001b[0m \u001b[0;34m\"\"\"Send a complete request to the server.\"\"\"\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m-> 1239\u001b[0;31m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_send_request\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mmethod\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0murl\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mbody\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mheaders\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mencode_chunked\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 1240\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n", - "\u001b[0;32m~/anaconda3/envs/syft/lib/python3.6/http/client.py\u001b[0m in \u001b[0;36m_send_request\u001b[0;34m(self, method, url, body, headers, encode_chunked)\u001b[0m\n\u001b[1;32m 1284\u001b[0m \u001b[0mbody\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0m_encode\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mbody\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m'body'\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m-> 1285\u001b[0;31m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mendheaders\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mbody\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mencode_chunked\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mencode_chunked\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 1286\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n", - "\u001b[0;32m~/anaconda3/envs/syft/lib/python3.6/http/client.py\u001b[0m in \u001b[0;36mendheaders\u001b[0;34m(self, message_body, encode_chunked)\u001b[0m\n\u001b[1;32m 1233\u001b[0m \u001b[0;32mraise\u001b[0m \u001b[0mCannotSendHeader\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m-> 1234\u001b[0;31m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_send_output\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mmessage_body\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mencode_chunked\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mencode_chunked\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 1235\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n", - "\u001b[0;32m~/anaconda3/envs/syft/lib/python3.6/http/client.py\u001b[0m in \u001b[0;36m_send_output\u001b[0;34m(self, message_body, encode_chunked)\u001b[0m\n\u001b[1;32m 1025\u001b[0m \u001b[0;32mdel\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_buffer\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m-> 1026\u001b[0;31m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0msend\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mmsg\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 1027\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n", - "\u001b[0;32m~/anaconda3/envs/syft/lib/python3.6/http/client.py\u001b[0m in \u001b[0;36msend\u001b[0;34m(self, data)\u001b[0m\n\u001b[1;32m 963\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mauto_open\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 964\u001b[0;31m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mconnect\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 965\u001b[0m \u001b[0;32melse\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", - "\u001b[0;32m~/.local/lib/python3.6/site-packages/urllib3/connection.py\u001b[0m in \u001b[0;36mconnect\u001b[0;34m(self)\u001b[0m\n\u001b[1;32m 182\u001b[0m \u001b[0;32mdef\u001b[0m \u001b[0mconnect\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 183\u001b[0;31m \u001b[0mconn\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_new_conn\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 184\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_prepare_conn\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mconn\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", - "\u001b[0;32m~/.local/lib/python3.6/site-packages/urllib3/connection.py\u001b[0m in \u001b[0;36m_new_conn\u001b[0;34m(self)\u001b[0m\n\u001b[1;32m 168\u001b[0m raise NewConnectionError(\n\u001b[0;32m--> 169\u001b[0;31m self, \"Failed to establish a new connection: %s\" % e)\n\u001b[0m\u001b[1;32m 170\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n", - "\u001b[0;31mNewConnectionError\u001b[0m: : Failed to establish a new connection: [Errno 111] Connection refused", - "\nDuring handling of the above exception, another exception occurred:\n", - "\u001b[0;31mMaxRetryError\u001b[0m Traceback (most recent call last)", - "\u001b[0;32m~/.local/lib/python3.6/site-packages/requests/adapters.py\u001b[0m in \u001b[0;36msend\u001b[0;34m(self, request, stream, timeout, verify, cert, proxies)\u001b[0m\n\u001b[1;32m 448\u001b[0m \u001b[0mretries\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mmax_retries\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 449\u001b[0;31m \u001b[0mtimeout\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mtimeout\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 450\u001b[0m )\n", - "\u001b[0;32m~/.local/lib/python3.6/site-packages/urllib3/connectionpool.py\u001b[0m in \u001b[0;36murlopen\u001b[0;34m(self, method, url, body, headers, retries, redirect, assert_same_host, timeout, pool_timeout, release_conn, chunked, body_pos, **response_kw)\u001b[0m\n\u001b[1;32m 640\u001b[0m retries = retries.increment(method, url, error=e, _pool=self,\n\u001b[0;32m--> 641\u001b[0;31m _stacktrace=sys.exc_info()[2])\n\u001b[0m\u001b[1;32m 642\u001b[0m \u001b[0mretries\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0msleep\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", - "\u001b[0;32m~/.local/lib/python3.6/site-packages/urllib3/util/retry.py\u001b[0m in \u001b[0;36mincrement\u001b[0;34m(self, method, url, response, error, _pool, _stacktrace)\u001b[0m\n\u001b[1;32m 398\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0mnew_retry\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mis_exhausted\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 399\u001b[0;31m \u001b[0;32mraise\u001b[0m \u001b[0mMaxRetryError\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0m_pool\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0murl\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0merror\u001b[0m \u001b[0;32mor\u001b[0m \u001b[0mResponseError\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mcause\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 400\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n", - "\u001b[0;31mMaxRetryError\u001b[0m: HTTPConnectionPool(host='localhost', port=3001): Max retries exceeded with url: /identity/ (Caused by NewConnectionError(': Failed to establish a new connection: [Errno 111] Connection refused',))", - "\nDuring handling of the above exception, another exception occurred:\n", - "\u001b[0;31mConnectionError\u001b[0m Traceback (most recent call last)", - "\u001b[0;32m\u001b[0m in \u001b[0;36m\u001b[0;34m\u001b[0m\n\u001b[1;32m 13\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 14\u001b[0m \u001b[0;31m# Connect to nodes\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m---> 15\u001b[0;31m \u001b[0malice\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mgr\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mWebsocketGridClient\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mhook\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m\"http://localhost:3001\"\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mid\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;34m\"Alice\"\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 16\u001b[0m \u001b[0malice\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mconnect\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 17\u001b[0m \u001b[0mbob\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mgr\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mWebsocketGridClient\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mhook\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m\"http://localhost:3000\"\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mid\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;34m\"Bob\"\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", - "\u001b[0;32m~/Grid/grid/websocket_client.py\u001b[0m in \u001b[0;36m__init__\u001b[0;34m(self, hook, addr, id, log_msgs, verbose, data)\u001b[0m\n\u001b[1;32m 52\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m__sio\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0msocketio\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mClient\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 53\u001b[0m super().__init__(\n\u001b[0;32m---> 54\u001b[0;31m \u001b[0maddr\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0maddr\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mhook\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mhook\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mid\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mid\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mdata\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mdata\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mlog_msgs\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mlog_msgs\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mverbose\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mverbose\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 55\u001b[0m )\n\u001b[1;32m 56\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n", - "\u001b[0;32m~/Grid/grid/client.py\u001b[0m in \u001b[0;36m__init__\u001b[0;34m(self, addr, verbose, hook, id, **kwargs)\u001b[0m\n\u001b[1;32m 27\u001b[0m )\n\u001b[1;32m 28\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0maddr\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0maddr\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m---> 29\u001b[0;31m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_verify_identity\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 30\u001b[0m \u001b[0;31m# We use ISO encoding for some serialization/deserializations\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 31\u001b[0m \u001b[0;31m# due to non-ascii characters.\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", - "\u001b[0;32m~/Grid/grid/client.py\u001b[0m in \u001b[0;36m_verify_identity\u001b[0;34m(self)\u001b[0m\n\u001b[1;32m 33\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 34\u001b[0m \u001b[0;32mdef\u001b[0m \u001b[0m_verify_identity\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m---> 35\u001b[0;31m \u001b[0mr\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mrequests\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mget\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0maddr\u001b[0m \u001b[0;34m+\u001b[0m \u001b[0;34m\"/identity/\"\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 36\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0mr\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mtext\u001b[0m \u001b[0;34m!=\u001b[0m \u001b[0;34m\"OpenGrid\"\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 37\u001b[0m \u001b[0;32mraise\u001b[0m \u001b[0mPermissionError\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m\"App is not an OpenGrid app.\"\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", - "\u001b[0;32m~/.local/lib/python3.6/site-packages/requests/api.py\u001b[0m in \u001b[0;36mget\u001b[0;34m(url, params, **kwargs)\u001b[0m\n\u001b[1;32m 73\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 74\u001b[0m \u001b[0mkwargs\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0msetdefault\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m'allow_redirects'\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;32mTrue\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m---> 75\u001b[0;31m \u001b[0;32mreturn\u001b[0m \u001b[0mrequest\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m'get'\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0murl\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mparams\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mparams\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m**\u001b[0m\u001b[0mkwargs\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 76\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 77\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n", - "\u001b[0;32m~/.local/lib/python3.6/site-packages/requests/api.py\u001b[0m in \u001b[0;36mrequest\u001b[0;34m(method, url, **kwargs)\u001b[0m\n\u001b[1;32m 58\u001b[0m \u001b[0;31m# cases, and look like a memory leak in others.\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 59\u001b[0m \u001b[0;32mwith\u001b[0m \u001b[0msessions\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mSession\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m \u001b[0;32mas\u001b[0m \u001b[0msession\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m---> 60\u001b[0;31m \u001b[0;32mreturn\u001b[0m \u001b[0msession\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mrequest\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mmethod\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mmethod\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0murl\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0murl\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m**\u001b[0m\u001b[0mkwargs\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 61\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 62\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n", - "\u001b[0;32m~/.local/lib/python3.6/site-packages/requests/sessions.py\u001b[0m in \u001b[0;36mrequest\u001b[0;34m(self, method, url, params, data, headers, cookies, files, auth, timeout, allow_redirects, proxies, hooks, stream, verify, cert, json)\u001b[0m\n\u001b[1;32m 531\u001b[0m }\n\u001b[1;32m 532\u001b[0m \u001b[0msend_kwargs\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mupdate\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0msettings\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 533\u001b[0;31m \u001b[0mresp\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0msend\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mprep\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m**\u001b[0m\u001b[0msend_kwargs\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 534\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 535\u001b[0m \u001b[0;32mreturn\u001b[0m \u001b[0mresp\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", - "\u001b[0;32m~/.local/lib/python3.6/site-packages/requests/sessions.py\u001b[0m in \u001b[0;36msend\u001b[0;34m(self, request, **kwargs)\u001b[0m\n\u001b[1;32m 644\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 645\u001b[0m \u001b[0;31m# Send the request\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 646\u001b[0;31m \u001b[0mr\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0madapter\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0msend\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mrequest\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m**\u001b[0m\u001b[0mkwargs\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 647\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 648\u001b[0m \u001b[0;31m# Total elapsed time of the request (approximately)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", - "\u001b[0;32m~/.local/lib/python3.6/site-packages/requests/adapters.py\u001b[0m in \u001b[0;36msend\u001b[0;34m(self, request, stream, timeout, verify, cert, proxies)\u001b[0m\n\u001b[1;32m 514\u001b[0m \u001b[0;32mraise\u001b[0m \u001b[0mSSLError\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0me\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mrequest\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mrequest\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 515\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 516\u001b[0;31m \u001b[0;32mraise\u001b[0m \u001b[0mConnectionError\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0me\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mrequest\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mrequest\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 517\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 518\u001b[0m \u001b[0;32mexcept\u001b[0m \u001b[0mClosedPoolError\u001b[0m \u001b[0;32mas\u001b[0m \u001b[0me\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", - "\u001b[0;31mConnectionError\u001b[0m: HTTPConnectionPool(host='localhost', port=3001): Max retries exceeded with url: /identity/ (Caused by NewConnectionError(': Failed to establish a new connection: [Errno 111] Connection refused',))" - ] - } - ], - "source": [ - "# Import dependencies\n", - "import torch as th\n", - "import syft as sy\n", - "import torch.nn as nn\n", - "import torch.nn.functional as F\n", - "import grid as gr\n", - "import helper\n", - "\n", - "# Hook\n", - "hook = sy.TorchHook(th)\n", - "me = hook.local_worker\n", - "me.is_client_worker = False\n", - " \n", - "# Connect to nodes\n", - "alice = gr.WebsocketGridClient(hook, \"http://localhost:3001\", id=\"Alice\")\n", - "alice.connect()\n", - "bob = gr.WebsocketGridClient(hook, \"http://localhost:3000\", id=\"Bob\")\n", - "charlie = gr.WebsocketGridClient(hook, \"http://localhost:3002\", id=\"James\")\n", - "dan = gr.WebsocketGridClient(hook, \"http://localhost:3003\", id=\"Dan\")\n", - "bob.connect()\n", - "charlie.connect()\n", - "dan.connect()\n", - "\n", - "# Connect nodes to each other\n", - "gr.connect_all_nodes([bob, alice, charlie, dan])" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Load dataset" - ] - }, - { - "cell_type": "code", - "execution_count": 3, - "metadata": {}, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/home/marianne/PySyft/syft/frameworks/torch/hook/hook.py:483: UserWarning: To copy construct from a tensor, it is recommended to use sourceTensor.clone().detach() or sourceTensor.clone().detach().requires_grad_(True), rather than torch.tensor(sourceTensor).\n", - " current_tensor = hook_self.torch.native_tensor(*args, **kwargs)\n" - ] - } - ], - "source": [ - "df = helper.read_skin_cancer_dataset()\n", - "train_df, valid_df, test_df = helper.split_data(df)\n", - "\n", - "# These values are from Part 1.\n", - "input_size = 32\n", - "train_mean, train_std = (th.tensor([0.6979, 0.5445, 0.5735]), th.tensor([0.0959, 0.1187, 0.1365]))\n", - "\n", - "# Create a test dataloader\n", - "test_set = helper.Dataset(test_df, transform=helper.transform(input_size, train_mean, train_std))\n", - "test_generator = th.utils.data.DataLoader(test_set, batch_size=1, shuffle=True)\n", - "\n", - "# Get a data sample and a target\n", - "data, target = next(iter(test_generator))" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Making a model ready to be served and encrypted\n", - "\n", - "In order to serve the model it needs to be serializable. A Plan is intended to store a sequence of torch operations, just like a function, but it allows to send this sequence of operations to remote workers and to keep a reference to it. You can learn more about plans in [Syft's tutorials](https://github.com/OpenMined/PySyft/blob/dev/examples/tutorials/Part%2008%20-%20Introduction%20to%20Plans.ipynb).\n" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Define Model\n", - "\n", - "Let's load the model we just trained." - ] - }, - { - "cell_type": "code", - "execution_count": 6, - "metadata": {}, - "outputs": [], - "source": [ - "model = helper.make_model(is_plan=True)\n", - "# model.load_state_dict(th.load(\"binary-skin-cancer-detection-model\"))" - ] - }, - { - "cell_type": "code", - "execution_count": 7, - "metadata": {}, - "outputs": [], - "source": [ - "model.build(data)" - ] - }, - { - "cell_type": "code", - "execution_count": 5, - "metadata": {}, - "outputs": [ - { - "ename": "NameError", - "evalue": "name 'model' is not defined", - "output_type": "error", - "traceback": [ - "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", - "\u001b[0;31mNameError\u001b[0m Traceback (most recent call last)", - "\u001b[0;32m\u001b[0m in \u001b[0;36m\u001b[0;34m\u001b[0m\n\u001b[0;32m----> 1\u001b[0;31m \u001b[0mhelper\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mtest\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mmodel\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mtest_generator\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m", - "\u001b[0;31mNameError\u001b[0m: name 'model' is not defined" - ] - } - ], - "source": [ - "helper.test(model, test_generator)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Serve model" - ] - }, - { - "cell_type": "code", - "execution_count": 8, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "" - ] - }, - "execution_count": 8, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "model.fix_precision().share(bob, charlie, crypto_provider=dan).send(alice)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "from IPython.display import display_html\n", - "\n", - "def restart_kernel() :\n", - " display_html(\"\",raw=True)\n", - " \n", - "restart_kernel()" - ] - }, - { - "cell_type": "code", - "execution_count": 2, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "WARNING: Grid nodes publish datasets online and are for EXPERIMENTAL use only.Deploy nodes at your own risk. Do not use OpenGrid with any data/models you wish to keep private.\n", - "\n", - "WARNING: Grid nodes publish datasets online and are for EXPERIMENTAL use only.Deploy nodes at your own risk. Do not use OpenGrid with any data/models you wish to keep private.\n", - "\n", - "WARNING: Grid nodes publish datasets online and are for EXPERIMENTAL use only.Deploy nodes at your own risk. Do not use OpenGrid with any data/models you wish to keep private.\n", - "\n", - "WARNING: Grid nodes publish datasets online and are for EXPERIMENTAL use only.Deploy nodes at your own risk. Do not use OpenGrid with any data/models you wish to keep private.\n", - "\n" - ] - } - ], - "source": [ - "# Import dependencies\n", - "import torch as th\n", - "import syft as sy\n", - "import torch.nn as nn\n", - "import torch.nn.functional as F\n", - "import grid as gr\n", - "import helper\n", - "\n", - "# Hook\n", - "hook = sy.TorchHook(th)\n", - "me = hook.local_worker\n", - "me.is_client_worker = False\n", - " \n", - "# Connect to nodes\n", - "alice = gr.WebsocketGridClient(hook, \"http://localhost:3001\", id=\"Alice\")\n", - "alice.connect()\n", - "bob = gr.WebsocketGridClient(hook, \"http://localhost:3000\", id=\"Bob\")\n", - "charlie = gr.WebsocketGridClient(hook, \"http://localhost:3002\", id=\"James\")\n", - "dan = gr.WebsocketGridClient(hook, \"http://localhost:3003\", id=\"Dan\")\n", - "bob.connect()\n", - "charlie.connect()\n", - "dan.connect()\n", - "\n", - "# Connect nodes to each other\n", - "gr.connect_all_nodes([bob, alice, charlie, dan])" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Load dataset" - ] - }, - { - "cell_type": "code", - "execution_count": 3, - "metadata": {}, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/home/marianne/PySyft/syft/frameworks/torch/hook/hook.py:483: UserWarning: To copy construct from a tensor, it is recommended to use sourceTensor.clone().detach() or sourceTensor.clone().detach().requires_grad_(True), rather than torch.tensor(sourceTensor).\n", - " current_tensor = hook_self.torch.native_tensor(*args, **kwargs)\n" - ] - } - ], - "source": [ - "df = helper.read_skin_cancer_dataset()\n", - "train_df, valid_df, test_df = helper.split_data(df)\n", - "\n", - "# These values are from Part 1.\n", - "input_size = 32\n", - "train_mean, train_std = (th.tensor([0.6979, 0.5445, 0.5735]), th.tensor([0.0959, 0.1187, 0.1365]))\n", - "\n", - "# Create a test dataloader\n", - "test_set = helper.Dataset(test_df, transform=helper.transform(input_size, train_mean, train_std))\n", - "test_generator = th.utils.data.DataLoader(test_set, batch_size=1, shuffle=True)\n", - "\n", - "# Get a data sample and a target\n", - "data, target = next(iter(test_generator))" - ] - }, - { - "cell_type": "code", - "execution_count": 4, - "metadata": {}, - "outputs": [], - "source": [ - "x_sh = data.fix_precision().share(bob, charlie, crypto_provider=dan)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Get a copy of the private model" - ] - }, - { - "cell_type": "code", - "execution_count": 5, - "metadata": {}, - "outputs": [], - "source": [ - "# Fetch plan\n", - "fetched_plan = me.fetch_plan(\"convnet\", alice, copy=True)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Run encrypted inference" - ] - }, - { - "cell_type": "code", - "execution_count": 6, - "metadata": { - "scrolled": true - }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "tensor([[0.0680, 0.0120]])\n", - "CPU times: user 4min 1s, sys: 1min 31s, total: 5min 33s\n", - "Wall time: 5min 24s\n" - ] - } - ], - "source": [ - "%%time\n", - "print(fetched_plan(x_sh).get().float_prec())" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "model = Net()\n", - "\n", - "model.build(data)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# encrypt the model\n", - "\n", - "# share -> encrypt\n", - "model.encrypt(*workers, crypto_provider=crypto_provider)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "bob.serve_model(\"skin-cancer\", model, allow_download=True, allow_remote_inference=False)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "data.encrypt(*workers, crypto_provider=crypto_provider)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "encrypted_model = bob.download_model_model(\"skin-cancer\")" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "encrypted_model(data).request_decryption().float_prec()" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# TODOS\n", - "# ====================\n", - "# Internal changes: Syft interface -> Grid client\n", - "# fix_prec().share(*workers) == encrypt(*workers)\n", - "# get.float_prec() == request_decryption()\n", - "# allow_remote_inference -> allow_remote_inference\n", - "# allow_download -> allow_download\n", - "# bob.download_model -> bob.download_model_model()\n", - "\n", - "\n", - "# bob (public serving demo) -> app_company\n", - "# bob (private serving demo) -> ai_inc, cloud_server, ...\n", - "\n", - "# encrypted demo:\n", - "# crypto_provider\n", - "# grid_server (hosts the model)\n", - "# patient_server (share holder 1)\n", - "# hospital_server (share holder 2)\n", - "\n", - "model.encrypt(hospital_server, patient_server, crypto_provider=crypto_provider)\n", - "grid_server.serve_model(\"skin-cancer\", model, allow_download=True, allow_remote_inference=False)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "# Congratulations!!! - Time to Join the Community!\n", - "\n", - "Congratulations on completing this notebook tutorial! If you enjoyed this and would like to join the movement toward privacy preserving, decentralized ownership of AI and the AI supply chain (data), you can do so in the following ways!\n", - "\n", - "## Star PySyft on GitHub\n", - "The easiest way to help our community is just by starring the GitHub repos! This helps raise awareness of the cool tools we're building.\n", - "\n", - "[Star PySyft](https://github.com/OpenMined/PySyft)\n", - "\n", - "## Join our Slack!\n", - "The best way to keep up to date on the latest advancements is to join our community! You can do so by filling out the form at http://slack.openmined.org\n", - "\n", - "## Join a Code Project!\n", - "The best way to contribute to our community is to become a code contributor! At any time you can go to PySyft GitHub Issues page and filter for \"Projects\". This will show you all the top level Tickets giving an overview of what projects you can join! If you don't want to join a project, but you would like to do a bit of coding, you can also look for more \"one off\" mini-projects by searching for GitHub issues marked \"good first issue\".\n", - "\n", - "[PySyft Projects](https://github.com/OpenMined/PySyft/issues?q=is%3Aopen+is%3Aissue+label%3AProject)\n", - "[Good First Issue Tickets](https://github.com/OpenMined/PySyft/issues?q=is%3Aopen+is%3Aissue+label%3A%22good+first+issue%22)\n", - "\n", - "## Donate\n", - "\n", - "If you don't have time to contribute to our codebase, but would still like to lend support, you can also become a Backer on our Open Collective. All donations go toward our web hosting and other community expenses such as hackathons and meetups!\n", - "\n", - "[OpenMined's Open Collective Page](https://opencollective.com/openmined)" - ] - } - ], - "metadata": { - "kernelspec": { - "display_name": "Python 3", - "language": "python", - "name": "python3" - }, - "language_info": { - "codemirror_mode": { - "name": "ipython", - "version": 3 - }, - "file_extension": ".py", - "mimetype": "text/x-python", - "name": "python", - "nbconvert_exporter": "python", - "pygments_lexer": "ipython3", - "version": "3.6.7" - } - }, - "nbformat": 4, - "nbformat_minor": 2 -} diff --git a/examples/experimental/3.2 Host and Query an encrypted model.ipynb b/examples/experimental/3.2 Host and Query an encrypted model.ipynb deleted file mode 100644 index 1cb497e50..000000000 --- a/examples/experimental/3.2 Host and Query an encrypted model.ipynb +++ /dev/null @@ -1,499 +0,0 @@ -{ - "cells": [ - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "# Hosting models on Grid\n", - "\n", - "Grid offers both: Machine Learning as a Service and Encrypted Machine Learning as a service. In this series of tutorials we show how you can serve and query models on Grid.\n", - "\n", - "This option consists of:\n", - "\n", - "**Owner**\n", - "\n", - "1. Owner has a model\n", - "\n", - "```python\n", - "model = Plan()\n", - "model.build(data)\n", - "```\n", - "\n", - "2. Owner shares the model and sends the model to alice in an encrypted fashion\n", - "\n", - "```python\n", - "plan.fix_precision().share(bob, charlie, crypto_provider=dan).send(alice)\n", - "```\n", - "\n", - "**User**\n", - "\n", - "1. User fetch the plan (this means they have the state locally as pointers to alice) but they can fetch a plan only once, which means only one user can run inference.\n", - "\n", - "This limitation could be turned into a feature if we consider that in the future we may ask for authentication for a user to have access to a model. So the owner could build the model, share it and send to a remote worker (here alice).\n", - "\n", - "Then the owner could tell the user \"Hey here's your token, now you have access to the model, you now have access to a encrypted version of my model, but hey, don't lose this model copy, okay? If you lose it you'll have to ask for a new token.\"\n", - "\n", - "```\n", - "# Fetch plan\n", - "fetched_plan = plan.owner.fetch_plan(plan.id, alice)\n", - "```\n", - "\n", - "2. User shares their data with the same workers\n", - "\n", - "```\n", - "x = th.tensor([-1.0])\n", - "x_sh = data.fix_precision().share(bob, charlie, crypto_provider=dan)\n", - "```\n", - "\n", - "3. User can run inference using this model copy\n", - "\n", - "\n", - "```\n", - "decrypted = fetched_plan(x_sh).get().float_prec()\n", - "```\n", - "\n", - "A few notes:\n", - "\n", - "- No one knows the model except the model owner (yay!!!)\n", - "- The model is secure because we only have access to pointers not the actual weights\n", - "- The user has access to the readable_plan which means the user can figure out the model architecture but not the weight values\n", - "\n", - "\n", - "## 3.2 Host and query an encrypted model\n", - "### Fetch can be done only once\n", - "\n", - "In the previous tutorial we served a CNN for classifying images with different 2 types of skin deseases: benign keratosis and melanoma (type of skin cancer). In this tutorial we show how to serve this model on a **encrypted way** on Grid." - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Imports and model specifications" - ] - }, - { - "cell_type": "code", - "execution_count": 7, - "metadata": {}, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "WARNING:root:Torch was already hooked... skipping hooking process\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "WARNING: Grid nodes publish datasets online and are for EXPERIMENTAL use only.Deploy nodes at your own risk. Do not use OpenGrid with any data/models you wish to keep private.\n", - "\n", - "WARNING: Grid nodes publish datasets online and are for EXPERIMENTAL use only.Deploy nodes at your own risk. Do not use OpenGrid with any data/models you wish to keep private.\n", - "\n", - "WARNING: Grid nodes publish datasets online and are for EXPERIMENTAL use only.Deploy nodes at your own risk. Do not use OpenGrid with any data/models you wish to keep private.\n", - "\n", - "WARNING: Grid nodes publish datasets online and are for EXPERIMENTAL use only.Deploy nodes at your own risk. Do not use OpenGrid with any data/models you wish to keep private.\n", - "\n" - ] - } - ], - "source": [ - "# Import dependencies\n", - "import torch as th\n", - "import syft as sy\n", - "import torch.nn as nn\n", - "import torch.nn.functional as F\n", - "import grid as gr\n", - "import helper\n", - "\n", - "# Hook\n", - "hook = sy.TorchHook(th)\n", - "me = hook.local_worker\n", - "me.is_client_worker = False\n", - " \n", - "# Connect to nodes\n", - "alice = gr.WebsocketGridClient(hook, \"http://localhost:3001\", id=\"Alice\")\n", - "alice.connect()\n", - "bob = gr.WebsocketGridClient(hook, \"http://localhost:3000\", id=\"Bob\")\n", - "charlie = gr.WebsocketGridClient(hook, \"http://localhost:3002\", id=\"James\")\n", - "dan = gr.WebsocketGridClient(hook, \"http://localhost:3003\", id=\"Dan\")\n", - "bob.connect()\n", - "charlie.connect()\n", - "dan.connect()\n", - "\n", - "# Connect nodes to each other\n", - "gr.connect_all_nodes([bob, alice, charlie, dan])" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Load dataset" - ] - }, - { - "cell_type": "code", - "execution_count": 8, - "metadata": {}, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/home/marianne/PySyft/syft/frameworks/torch/hook/hook.py:483: UserWarning: To copy construct from a tensor, it is recommended to use sourceTensor.clone().detach() or sourceTensor.clone().detach().requires_grad_(True), rather than torch.tensor(sourceTensor).\n", - " current_tensor = hook_self.torch.native_tensor(*args, **kwargs)\n", - "WARNING:engineio.client:WebSocket connection was closed, aborting\n", - "WARNING:engineio.client:WebSocket connection was closed, aborting\n", - "WARNING:engineio.client:WebSocket connection was closed, aborting\n", - "WARNING:engineio.client:WebSocket connection was closed, aborting\n", - "WARNING:engineio.client:WebSocket connection was closed, aborting\n", - "WARNING:engineio.client:WebSocket connection was closed, aborting\n", - "WARNING:engineio.client:WebSocket connection was closed, aborting\n", - "WARNING:engineio.client:WebSocket connection was closed, aborting\n", - "WARNING:engineio.client:WebSocket connection was closed, aborting\n", - "WARNING:engineio.client:WebSocket connection was closed, aborting\n", - "WARNING:engineio.client:WebSocket connection was closed, aborting\n", - "WARNING:engineio.client:WebSocket connection was closed, aborting\n", - "WARNING:engineio.client:WebSocket connection was closed, aborting\n", - "WARNING:engineio.client:WebSocket connection was closed, aborting\n" - ] - } - ], - "source": [ - "df = helper.read_skin_cancer_dataset()\n", - "train_df, valid_df, test_df = helper.split_data(df)\n", - "\n", - "# These values are from Part 1.\n", - "input_size = 32\n", - "train_mean, train_std = (th.tensor([0.6979, 0.5445, 0.5735]), th.tensor([0.0959, 0.1187, 0.1365]))\n", - "\n", - "# Create a test dataloader\n", - "test_set = helper.Dataset(test_df, transform=helper.transform(input_size, train_mean, train_std))\n", - "test_generator = th.utils.data.DataLoader(test_set, batch_size=1, shuffle=True)\n", - "\n", - "# Get a data sample and a target\n", - "data, target = next(iter(test_generator))" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Making a model ready to be served and encrypted\n", - "\n", - "In order to serve the model it needs to be serializable. A Plan is intended to store a sequence of torch operations, just like a function, but it allows to send this sequence of operations to remote workers and to keep a reference to it. You can learn more about plans in [Syft's tutorials](https://github.com/OpenMined/PySyft/blob/dev/examples/tutorials/Part%2008%20-%20Introduction%20to%20Plans.ipynb).\n" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Define Model\n", - "\n", - "Let's load the model we just trained." - ] - }, - { - "cell_type": "code", - "execution_count": 6, - "metadata": {}, - "outputs": [], - "source": [ - "model = helper.make_model(is_plan=True)\n", - "# model.load_state_dict(th.load(\"binary-skin-cancer-detection-model\"))" - ] - }, - { - "cell_type": "code", - "execution_count": 7, - "metadata": {}, - "outputs": [], - "source": [ - "model.build(data)" - ] - }, - { - "cell_type": "code", - "execution_count": 5, - "metadata": {}, - "outputs": [ - { - "ename": "NameError", - "evalue": "name 'model' is not defined", - "output_type": "error", - "traceback": [ - "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", - "\u001b[0;31mNameError\u001b[0m Traceback (most recent call last)", - "\u001b[0;32m\u001b[0m in \u001b[0;36m\u001b[0;34m\u001b[0m\n\u001b[0;32m----> 1\u001b[0;31m \u001b[0mhelper\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mtest\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mmodel\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mtest_generator\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m", - "\u001b[0;31mNameError\u001b[0m: name 'model' is not defined" - ] - } - ], - "source": [ - "helper.test(model, test_generator)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Serve model" - ] - }, - { - "cell_type": "code", - "execution_count": 8, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "" - ] - }, - "execution_count": 8, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "model.fix_precision().share(bob, charlie, crypto_provider=dan).send(alice)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "from IPython.display import display_html\n", - "\n", - "def restart_kernel() :\n", - " display_html(\"\",raw=True)\n", - " \n", - "restart_kernel()" - ] - }, - { - "cell_type": "code", - "execution_count": 2, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "WARNING: Grid nodes publish datasets online and are for EXPERIMENTAL use only.Deploy nodes at your own risk. Do not use OpenGrid with any data/models you wish to keep private.\n", - "\n", - "WARNING: Grid nodes publish datasets online and are for EXPERIMENTAL use only.Deploy nodes at your own risk. Do not use OpenGrid with any data/models you wish to keep private.\n", - "\n", - "WARNING: Grid nodes publish datasets online and are for EXPERIMENTAL use only.Deploy nodes at your own risk. Do not use OpenGrid with any data/models you wish to keep private.\n", - "\n", - "WARNING: Grid nodes publish datasets online and are for EXPERIMENTAL use only.Deploy nodes at your own risk. Do not use OpenGrid with any data/models you wish to keep private.\n", - "\n" - ] - } - ], - "source": [ - "# Import dependencies\n", - "import torch as th\n", - "import syft as sy\n", - "import torch.nn as nn\n", - "import torch.nn.functional as F\n", - "import grid as gr\n", - "import helper\n", - "\n", - "# Hook\n", - "hook = sy.TorchHook(th)\n", - "me = hook.local_worker\n", - "me.is_client_worker = False\n", - " \n", - "# Connect to nodes\n", - "alice = gr.WebsocketGridClient(hook, \"http://localhost:3001\", id=\"Alice\")\n", - "alice.connect()\n", - "bob = gr.WebsocketGridClient(hook, \"http://localhost:3000\", id=\"Bob\")\n", - "charlie = gr.WebsocketGridClient(hook, \"http://localhost:3002\", id=\"James\")\n", - "dan = gr.WebsocketGridClient(hook, \"http://localhost:3003\", id=\"Dan\")\n", - "bob.connect()\n", - "charlie.connect()\n", - "dan.connect()\n", - "\n", - "# Connect nodes to each other\n", - "gr.connect_all_nodes([bob, alice, charlie, dan])" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Load dataset" - ] - }, - { - "cell_type": "code", - "execution_count": 3, - "metadata": {}, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/home/marianne/PySyft/syft/frameworks/torch/hook/hook.py:483: UserWarning: To copy construct from a tensor, it is recommended to use sourceTensor.clone().detach() or sourceTensor.clone().detach().requires_grad_(True), rather than torch.tensor(sourceTensor).\n", - " current_tensor = hook_self.torch.native_tensor(*args, **kwargs)\n" - ] - } - ], - "source": [ - "df = helper.read_skin_cancer_dataset()\n", - "train_df, valid_df, test_df = helper.split_data(df)\n", - "\n", - "# These values are from Part 1.\n", - "input_size = 32\n", - "train_mean, train_std = (th.tensor([0.6979, 0.5445, 0.5735]), th.tensor([0.0959, 0.1187, 0.1365]))\n", - "\n", - "# Create a test dataloader\n", - "test_set = helper.Dataset(test_df, transform=helper.transform(input_size, train_mean, train_std))\n", - "test_generator = th.utils.data.DataLoader(test_set, batch_size=1, shuffle=True)\n", - "\n", - "# Get a data sample and a target\n", - "data, target = next(iter(test_generator))" - ] - }, - { - "cell_type": "code", - "execution_count": 4, - "metadata": {}, - "outputs": [], - "source": [ - "x_sh = data.fix_precision().share(bob, charlie, crypto_provider=dan)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Get a copy of the private model" - ] - }, - { - "cell_type": "code", - "execution_count": 5, - "metadata": {}, - "outputs": [], - "source": [ - "# Fetch plan\n", - "fetched_plan = me.fetch_plan(\"convnet\", alice, copy=True)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Run encrypted inference" - ] - }, - { - "cell_type": "code", - "execution_count": 6, - "metadata": { - "scrolled": true - }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "tensor([[0.0680, 0.0120]])\n", - "CPU times: user 4min 1s, sys: 1min 31s, total: 5min 33s\n", - "Wall time: 5min 24s\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "WARNING:engineio.client:WebSocket connection was closed, aborting\n", - "WARNING:engineio.client:WebSocket connection was closed, aborting\n", - "WARNING:engineio.client:WebSocket connection was closed, aborting\n", - "WARNING:engineio.client:WebSocket connection was closed, aborting\n", - "WARNING:engineio.client:WebSocket connection was closed, aborting\n", - "WARNING:engineio.client:WebSocket connection was closed, aborting\n", - "WARNING:engineio.client:WebSocket connection was closed, aborting\n", - "WARNING:engineio.client:WebSocket connection was closed, aborting\n", - "WARNING:engineio.client:WebSocket connection was closed, aborting\n", - "WARNING:engineio.client:WebSocket connection was closed, aborting\n", - "WARNING:engineio.client:WebSocket connection was closed, aborting\n", - "WARNING:engineio.client:WebSocket connection was closed, aborting\n" - ] - } - ], - "source": [ - "%%time\n", - "print(fetched_plan(x_sh).get().float_prec())" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "# Congratulations!!! - Time to Join the Community!\n", - "\n", - "Congratulations on completing this notebook tutorial! If you enjoyed this and would like to join the movement toward privacy preserving, decentralized ownership of AI and the AI supply chain (data), you can do so in the following ways!\n", - "\n", - "## Star PySyft on GitHub\n", - "The easiest way to help our community is just by starring the GitHub repos! This helps raise awareness of the cool tools we're building.\n", - "\n", - "[Star PySyft](https://github.com/OpenMined/PySyft)\n", - "\n", - "## Join our Slack!\n", - "The best way to keep up to date on the latest advancements is to join our community! You can do so by filling out the form at http://slack.openmined.org\n", - "\n", - "## Join a Code Project!\n", - "The best way to contribute to our community is to become a code contributor! At any time you can go to PySyft GitHub Issues page and filter for \"Projects\". This will show you all the top level Tickets giving an overview of what projects you can join! If you don't want to join a project, but you would like to do a bit of coding, you can also look for more \"one off\" mini-projects by searching for GitHub issues marked \"good first issue\".\n", - "\n", - "[PySyft Projects](https://github.com/OpenMined/PySyft/issues?q=is%3Aopen+is%3Aissue+label%3AProject)\n", - "[Good First Issue Tickets](https://github.com/OpenMined/PySyft/issues?q=is%3Aopen+is%3Aissue+label%3A%22good+first+issue%22)\n", - "\n", - "## Donate\n", - "\n", - "If you don't have time to contribute to our codebase, but would still like to lend support, you can also become a Backer on our Open Collective. All donations go toward our web hosting and other community expenses such as hackathons and meetups!\n", - "\n", - "[OpenMined's Open Collective Page](https://opencollective.com/openmined)" - ] - } - ], - "metadata": { - "kernelspec": { - "display_name": "Python 3", - "language": "python", - "name": "python3" - }, - "language_info": { - "codemirror_mode": { - "name": "ipython", - "version": 3 - }, - "file_extension": ".py", - "mimetype": "text/x-python", - "name": "python", - "nbconvert_exporter": "python", - "pygments_lexer": "ipython3", - "version": "3.6.7" - } - }, - "nbformat": 4, - "nbformat_minor": 2 -} diff --git a/examples/experimental/Fed.Learning [ Part-1 ] - Populate a Grid Network ( Dataset ).ipynb b/examples/experimental/Fed.Learning [ Part-1 ] - Populate a Grid Network ( Dataset ).ipynb deleted file mode 100644 index 21d625ec5..000000000 --- a/examples/experimental/Fed.Learning [ Part-1 ] - Populate a Grid Network ( Dataset ).ipynb +++ /dev/null @@ -1,278 +0,0 @@ -{ - "cells": [ - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "

Populate remote grid nodes with labeled tensors

\n", - "In this notebook, we will populate our grid nodes with labeled data so that it will be used later by people interested in train models.\n", - "\n", - "**NOTE:** At the time of running this notebook, we were running the grid components in background mode. \n", - "\n", - "Components:\n", - " - Grid Gateway(http://localhost:8080)\n", - " - Grid Node Bob (http://localhost:3000)\n", - " - Grid Node Alice (http://localhost:3001)\n", - " - Grid Node Bill (http://localhost:3002)\n", - "\n", - "This notebook was made based on Part 10: Federated Learning with Encrypted Gradient Aggregation tutorial" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "

Import dependencies

" - ] - }, - { - "cell_type": "code", - "execution_count": 1, - "metadata": {}, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/home/ionesio/workspace/dev/vev/lib/python3.7/site-packages/tensorflow-1.14.0-py3.7-linux-x86_64.egg/tensorflow/python/framework/dtypes.py:516: FutureWarning: Passing (type, 1) or '1type' as a synonym of type is deprecated; in a future version of numpy, it will be understood as (type, (1,)) / '(1,)type'.\n", - " _np_qint8 = np.dtype([(\"qint8\", np.int8, 1)])\n", - "/home/ionesio/workspace/dev/vev/lib/python3.7/site-packages/tensorflow-1.14.0-py3.7-linux-x86_64.egg/tensorflow/python/framework/dtypes.py:517: FutureWarning: Passing (type, 1) or '1type' as a synonym of type is deprecated; in a future version of numpy, it will be understood as (type, (1,)) / '(1,)type'.\n", - " _np_quint8 = np.dtype([(\"quint8\", np.uint8, 1)])\n", - "/home/ionesio/workspace/dev/vev/lib/python3.7/site-packages/tensorflow-1.14.0-py3.7-linux-x86_64.egg/tensorflow/python/framework/dtypes.py:518: FutureWarning: Passing (type, 1) or '1type' as a synonym of type is deprecated; in a future version of numpy, it will be understood as (type, (1,)) / '(1,)type'.\n", - " _np_qint16 = np.dtype([(\"qint16\", np.int16, 1)])\n", - "/home/ionesio/workspace/dev/vev/lib/python3.7/site-packages/tensorflow-1.14.0-py3.7-linux-x86_64.egg/tensorflow/python/framework/dtypes.py:519: FutureWarning: Passing (type, 1) or '1type' as a synonym of type is deprecated; in a future version of numpy, it will be understood as (type, (1,)) / '(1,)type'.\n", - " _np_quint16 = np.dtype([(\"quint16\", np.uint16, 1)])\n", - "/home/ionesio/workspace/dev/vev/lib/python3.7/site-packages/tensorflow-1.14.0-py3.7-linux-x86_64.egg/tensorflow/python/framework/dtypes.py:520: FutureWarning: Passing (type, 1) or '1type' as a synonym of type is deprecated; in a future version of numpy, it will be understood as (type, (1,)) / '(1,)type'.\n", - " _np_qint32 = np.dtype([(\"qint32\", np.int32, 1)])\n", - "/home/ionesio/workspace/dev/vev/lib/python3.7/site-packages/tensorflow-1.14.0-py3.7-linux-x86_64.egg/tensorflow/python/framework/dtypes.py:525: FutureWarning: Passing (type, 1) or '1type' as a synonym of type is deprecated; in a future version of numpy, it will be understood as (type, (1,)) / '(1,)type'.\n", - " np_resource = np.dtype([(\"resource\", np.ubyte, 1)])\n", - "/home/ionesio/workspace/dev/vev/lib/python3.7/site-packages/tensorboard-1.14.0-py3.7.egg/tensorboard/compat/tensorflow_stub/dtypes.py:541: FutureWarning: Passing (type, 1) or '1type' as a synonym of type is deprecated; in a future version of numpy, it will be understood as (type, (1,)) / '(1,)type'.\n", - " _np_qint8 = np.dtype([(\"qint8\", np.int8, 1)])\n", - "/home/ionesio/workspace/dev/vev/lib/python3.7/site-packages/tensorboard-1.14.0-py3.7.egg/tensorboard/compat/tensorflow_stub/dtypes.py:542: FutureWarning: Passing (type, 1) or '1type' as a synonym of type is deprecated; in a future version of numpy, it will be understood as (type, (1,)) / '(1,)type'.\n", - " _np_quint8 = np.dtype([(\"quint8\", np.uint8, 1)])\n", - "/home/ionesio/workspace/dev/vev/lib/python3.7/site-packages/tensorboard-1.14.0-py3.7.egg/tensorboard/compat/tensorflow_stub/dtypes.py:543: FutureWarning: Passing (type, 1) or '1type' as a synonym of type is deprecated; in a future version of numpy, it will be understood as (type, (1,)) / '(1,)type'.\n", - " _np_qint16 = np.dtype([(\"qint16\", np.int16, 1)])\n", - "/home/ionesio/workspace/dev/vev/lib/python3.7/site-packages/tensorboard-1.14.0-py3.7.egg/tensorboard/compat/tensorflow_stub/dtypes.py:544: FutureWarning: Passing (type, 1) or '1type' as a synonym of type is deprecated; in a future version of numpy, it will be understood as (type, (1,)) / '(1,)type'.\n", - " _np_quint16 = np.dtype([(\"quint16\", np.uint16, 1)])\n", - "/home/ionesio/workspace/dev/vev/lib/python3.7/site-packages/tensorboard-1.14.0-py3.7.egg/tensorboard/compat/tensorflow_stub/dtypes.py:545: FutureWarning: Passing (type, 1) or '1type' as a synonym of type is deprecated; in a future version of numpy, it will be understood as (type, (1,)) / '(1,)type'.\n", - " _np_qint32 = np.dtype([(\"qint32\", np.int32, 1)])\n", - "/home/ionesio/workspace/dev/vev/lib/python3.7/site-packages/tensorboard-1.14.0-py3.7.egg/tensorboard/compat/tensorflow_stub/dtypes.py:550: FutureWarning: Passing (type, 1) or '1type' as a synonym of type is deprecated; in a future version of numpy, it will be understood as (type, (1,)) / '(1,)type'.\n", - " np_resource = np.dtype([(\"resource\", np.ubyte, 1)])\n", - "Falling back to insecure randomness since the required custom op could not be found for the installed version of TensorFlow. Fix this by compiling custom ops. Missing file was '/home/ionesio/workspace/dev/vev/lib/python3.7/site-packages/tf_encrypted-0.5.9-py3.7-linux-x86_64.egg/tf_encrypted/operations/secure_random/secure_random_module_tf_1.14.0.so', error was \"/home/ionesio/workspace/dev/vev/lib/python3.7/site-packages/tf_encrypted-0.5.9-py3.7-linux-x86_64.egg/tf_encrypted/operations/secure_random/secure_random_module_tf_1.14.0.so: undefined symbol: _ZN10tensorflow12OpDefBuilder4AttrESs\".\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "WARNING:tensorflow:From /home/ionesio/workspace/dev/vev/lib/python3.7/site-packages/tf_encrypted-0.5.9-py3.7-linux-x86_64.egg/tf_encrypted/session.py:24: The name tf.Session is deprecated. Please use tf.compat.v1.Session instead.\n", - "\n" - ] - } - ], - "source": [ - "import grid as gr\n", - "import syft as sy\n", - "import torch\n", - "import pickle\n", - "import time" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "

Setup config

\n", - "Init hook, connect with grid nodes, etc..." - ] - }, - { - "cell_type": "code", - "execution_count": 2, - "metadata": {}, - "outputs": [], - "source": [ - "\n", - "hook = sy.TorchHook(torch)\n", - "\n", - "# Connect directly to grid nodes\n", - "nodes = [\"ws://localhost:3000/\",\n", - " \"ws://localhost:3001/\",\n", - " \"ws://localhost:3002/\" ]\n", - "\n", - "compute_nodes = []\n", - "for node in nodes:\n", - " compute_nodes.append( gr.WebsocketGridClient(hook, node) )" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "

Load dataset

\n", - "Load and prepare the dataset" - ] - }, - { - "cell_type": "code", - "execution_count": 3, - "metadata": {}, - "outputs": [], - "source": [ - "# Load Data\n", - "with open('../dataset/boston_housing.pickle','rb') as f:\n", - " ((X, y), (X_test, y_test)) = pickle.load(f)\n", - "\n", - "X = torch.from_numpy(X).float()\n", - "y = torch.from_numpy(y).float()\n", - "\n", - "# preprocessing\n", - "mean = X.mean(0, keepdim=True)\n", - "dev = X.std(0, keepdim=True)\n", - "mean[:, 3] = 0. # the feature at column 3 is binary,\n", - "dev[:, 3] = 1. # so I'd rather not standardize it\n", - "X = (X - mean) / dev" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "

Split dataset

\n", - "We will split our dataset to send to nodes" - ] - }, - { - "cell_type": "code", - "execution_count": 4, - "metadata": {}, - "outputs": [], - "source": [ - "datasets = torch.split(X, int(len(X) / len(compute_nodes)), dim=0 ) #tuple of chunks (dataset / number of nodes)\n", - "labels = torch.split(y, int(len(X) / len(compute_nodes)), dim=0 ) #tuple of chunks (labels / number of nodes)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "

Tagging tensors

" - ] - }, - { - "cell_type": "code", - "execution_count": 5, - "metadata": {}, - "outputs": [], - "source": [ - "tag_x = []\n", - "tag_y = []\n", - "\n", - "for i in range(len(compute_nodes)):\n", - " tag_x.append(datasets[i].tag(\"#X\", \"#boston\", \"#housing\").describe(\"The input datapoints to the boston housing dataset.\"))\n", - " tag_y.append(labels[i].tag(\"#Y\", \"#boston\", \"#housing\").describe(\"Boston Housing labels\"))" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "

Sending our tensors to grid nodes

" - ] - }, - { - "cell_type": "code", - "execution_count": 6, - "metadata": {}, - "outputs": [], - "source": [ - "# NOTE: For some reason, there is strange behavior when trying to send within a loop.\n", - "# Ex : tag_x[i].send(compute_nodes[i])\n", - "# When resolved, this should be updated.\n", - "\n", - "shared_x1 = tag_x[0].send(compute_nodes[0], garbage_collect_data=False) # First chunk of dataset to Bob\n", - "shared_x2 = tag_x[1].send(compute_nodes[1], garbage_collect_data=False) # Second chunk of dataset to Alice\n", - "shared_x3 = tag_x[2].send(compute_nodes[2], garbage_collect_data=False) # Third chunk of dataset to Bill\n", - "\n", - "shared_y1 = tag_y[0].send(compute_nodes[0], garbage_collect_data=False) # First chunk of labels to Bob\n", - "shared_y2 = tag_y[1].send(compute_nodes[1], garbage_collect_data=False) # Second chunk of labels to Alice\n", - "shared_y3 = tag_y[2].send(compute_nodes[2], garbage_collect_data=False) # Third chunk of labels to Bill" - ] - }, - { - "cell_type": "code", - "execution_count": 7, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "X tensor pointers: (Wrapper)>[PointerTensor | me:71379891214 -> Bob:80786423983]\n", - "\tTags: #housing #boston #X \n", - "\tShape: torch.Size([134, 13])\n", - "\tDescription: The input datapoints to the boston housing dataset.... (Wrapper)>[PointerTensor | me:84021449540 -> Alice:18146958968]\n", - "\tTags: #housing #boston #X \n", - "\tShape: torch.Size([134, 13])\n", - "\tDescription: The input datapoints to the boston housing dataset.... (Wrapper)>[PointerTensor | me:97004127043 -> Bill:9562088539]\n", - "\tTags: #housing #boston #X \n", - "\tShape: torch.Size([134, 13])\n", - "\tDescription: The input datapoints to the boston housing dataset....\n", - "Y tensor pointers: (Wrapper)>[PointerTensor | me:21964710209 -> Bob:81448698219]\n", - "\tTags: #housing #boston #Y \n", - "\tShape: torch.Size([134])\n", - "\tDescription: Boston Housing labels... (Wrapper)>[PointerTensor | me:51075760450 -> Alice:25553850079]\n", - "\tTags: #housing #boston #Y \n", - "\tShape: torch.Size([134])\n", - "\tDescription: Boston Housing labels... (Wrapper)>[PointerTensor | me:381250237 -> Bill:65382525089]\n", - "\tTags: #housing #boston #Y \n", - "\tShape: torch.Size([134])\n", - "\tDescription: Boston Housing labels...\n" - ] - } - ], - "source": [ - "print(\"X tensor pointers: \", shared_x1, shared_x2, shared_x3)\n", - "print(\"Y tensor pointers: \", shared_y1, shared_y2, shared_y3)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "

Disconnect nodes

" - ] - }, - { - "cell_type": "code", - "execution_count": 8, - "metadata": {}, - "outputs": [], - "source": [ - "for i in range(len(compute_nodes)):\n", - " compute_nodes[i].close()" - ] - } - ], - "metadata": { - "kernelspec": { - "display_name": "Python 3", - "language": "python", - "name": "python3" - }, - "language_info": { - "codemirror_mode": { - "name": "ipython", - "version": 3 - }, - "file_extension": ".py", - "mimetype": "text/x-python", - "name": "python", - "nbconvert_exporter": "python", - "pygments_lexer": "ipython3", - "version": "3.7.3" - } - }, - "nbformat": 4, - "nbformat_minor": 2 -} diff --git a/examples/experimental/Fed.Learning [ Part-2 ] - Train a Model.ipynb b/examples/experimental/Fed.Learning [ Part-2 ] - Train a Model.ipynb deleted file mode 100644 index 7d607a64f..000000000 --- a/examples/experimental/Fed.Learning [ Part-2 ] - Train a Model.ipynb +++ /dev/null @@ -1,316 +0,0 @@ -{ - "cells": [ - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "

Perform Federated Learning at Grid Platform

\n", - "In this notebook, we will train a model using federated approach.\n", - "\n", - "**NOTE:** At the time of running this notebook, we were running the grid components in background mode. \n", - "\n", - "**NOTE:**\n", - "Components:\n", - " - Grid Gateway(http://localhost:8080)\n", - " - Grid Node Bob (http://localhost:3000)\n", - " - Grid Node Alice (http://localhost:3001)\n", - " - Grid Node Bill (http://localhost:3002)\n", - "\n", - "This notebook was made based on Part 10: Federated Learning with Encrypted Gradient Aggregation tutorial" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "

Import dependencies

" - ] - }, - { - "cell_type": "code", - "execution_count": 1, - "metadata": {}, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/home/ionesio/workspace/dev/vev/lib/python3.7/site-packages/tensorflow-1.14.0-py3.7-linux-x86_64.egg/tensorflow/python/framework/dtypes.py:516: FutureWarning: Passing (type, 1) or '1type' as a synonym of type is deprecated; in a future version of numpy, it will be understood as (type, (1,)) / '(1,)type'.\n", - " _np_qint8 = np.dtype([(\"qint8\", np.int8, 1)])\n", - "/home/ionesio/workspace/dev/vev/lib/python3.7/site-packages/tensorflow-1.14.0-py3.7-linux-x86_64.egg/tensorflow/python/framework/dtypes.py:517: FutureWarning: Passing (type, 1) or '1type' as a synonym of type is deprecated; in a future version of numpy, it will be understood as (type, (1,)) / '(1,)type'.\n", - " _np_quint8 = np.dtype([(\"quint8\", np.uint8, 1)])\n", - "/home/ionesio/workspace/dev/vev/lib/python3.7/site-packages/tensorflow-1.14.0-py3.7-linux-x86_64.egg/tensorflow/python/framework/dtypes.py:518: FutureWarning: Passing (type, 1) or '1type' as a synonym of type is deprecated; in a future version of numpy, it will be understood as (type, (1,)) / '(1,)type'.\n", - " _np_qint16 = np.dtype([(\"qint16\", np.int16, 1)])\n", - "/home/ionesio/workspace/dev/vev/lib/python3.7/site-packages/tensorflow-1.14.0-py3.7-linux-x86_64.egg/tensorflow/python/framework/dtypes.py:519: FutureWarning: Passing (type, 1) or '1type' as a synonym of type is deprecated; in a future version of numpy, it will be understood as (type, (1,)) / '(1,)type'.\n", - " _np_quint16 = np.dtype([(\"quint16\", np.uint16, 1)])\n", - "/home/ionesio/workspace/dev/vev/lib/python3.7/site-packages/tensorflow-1.14.0-py3.7-linux-x86_64.egg/tensorflow/python/framework/dtypes.py:520: FutureWarning: Passing (type, 1) or '1type' as a synonym of type is deprecated; in a future version of numpy, it will be understood as (type, (1,)) / '(1,)type'.\n", - " _np_qint32 = np.dtype([(\"qint32\", np.int32, 1)])\n", - "/home/ionesio/workspace/dev/vev/lib/python3.7/site-packages/tensorflow-1.14.0-py3.7-linux-x86_64.egg/tensorflow/python/framework/dtypes.py:525: FutureWarning: Passing (type, 1) or '1type' as a synonym of type is deprecated; in a future version of numpy, it will be understood as (type, (1,)) / '(1,)type'.\n", - " np_resource = np.dtype([(\"resource\", np.ubyte, 1)])\n", - "/home/ionesio/workspace/dev/vev/lib/python3.7/site-packages/tensorboard-1.14.0-py3.7.egg/tensorboard/compat/tensorflow_stub/dtypes.py:541: FutureWarning: Passing (type, 1) or '1type' as a synonym of type is deprecated; in a future version of numpy, it will be understood as (type, (1,)) / '(1,)type'.\n", - " _np_qint8 = np.dtype([(\"qint8\", np.int8, 1)])\n", - "/home/ionesio/workspace/dev/vev/lib/python3.7/site-packages/tensorboard-1.14.0-py3.7.egg/tensorboard/compat/tensorflow_stub/dtypes.py:542: FutureWarning: Passing (type, 1) or '1type' as a synonym of type is deprecated; in a future version of numpy, it will be understood as (type, (1,)) / '(1,)type'.\n", - " _np_quint8 = np.dtype([(\"quint8\", np.uint8, 1)])\n", - "/home/ionesio/workspace/dev/vev/lib/python3.7/site-packages/tensorboard-1.14.0-py3.7.egg/tensorboard/compat/tensorflow_stub/dtypes.py:543: FutureWarning: Passing (type, 1) or '1type' as a synonym of type is deprecated; in a future version of numpy, it will be understood as (type, (1,)) / '(1,)type'.\n", - " _np_qint16 = np.dtype([(\"qint16\", np.int16, 1)])\n", - "/home/ionesio/workspace/dev/vev/lib/python3.7/site-packages/tensorboard-1.14.0-py3.7.egg/tensorboard/compat/tensorflow_stub/dtypes.py:544: FutureWarning: Passing (type, 1) or '1type' as a synonym of type is deprecated; in a future version of numpy, it will be understood as (type, (1,)) / '(1,)type'.\n", - " _np_quint16 = np.dtype([(\"quint16\", np.uint16, 1)])\n", - "/home/ionesio/workspace/dev/vev/lib/python3.7/site-packages/tensorboard-1.14.0-py3.7.egg/tensorboard/compat/tensorflow_stub/dtypes.py:545: FutureWarning: Passing (type, 1) or '1type' as a synonym of type is deprecated; in a future version of numpy, it will be understood as (type, (1,)) / '(1,)type'.\n", - " _np_qint32 = np.dtype([(\"qint32\", np.int32, 1)])\n", - "/home/ionesio/workspace/dev/vev/lib/python3.7/site-packages/tensorboard-1.14.0-py3.7.egg/tensorboard/compat/tensorflow_stub/dtypes.py:550: FutureWarning: Passing (type, 1) or '1type' as a synonym of type is deprecated; in a future version of numpy, it will be understood as (type, (1,)) / '(1,)type'.\n", - " np_resource = np.dtype([(\"resource\", np.ubyte, 1)])\n", - "Falling back to insecure randomness since the required custom op could not be found for the installed version of TensorFlow. Fix this by compiling custom ops. Missing file was '/home/ionesio/workspace/dev/vev/lib/python3.7/site-packages/tf_encrypted-0.5.9-py3.7-linux-x86_64.egg/tf_encrypted/operations/secure_random/secure_random_module_tf_1.14.0.so', error was \"/home/ionesio/workspace/dev/vev/lib/python3.7/site-packages/tf_encrypted-0.5.9-py3.7-linux-x86_64.egg/tf_encrypted/operations/secure_random/secure_random_module_tf_1.14.0.so: undefined symbol: _ZN10tensorflow12OpDefBuilder4AttrESs\".\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "WARNING:tensorflow:From /home/ionesio/workspace/dev/vev/lib/python3.7/site-packages/tf_encrypted-0.5.9-py3.7-linux-x86_64.egg/tf_encrypted/session.py:24: The name tf.Session is deprecated. Please use tf.compat.v1.Session instead.\n", - "\n" - ] - } - ], - "source": [ - "import grid as gr\n", - "import syft as sy\n", - "import torch as th\n", - "import torch.nn as nn\n", - "import torch.optim as optim\n", - "import torch.nn.functional as F" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "

Define Model

" - ] - }, - { - "cell_type": "code", - "execution_count": 2, - "metadata": {}, - "outputs": [], - "source": [ - "hook = sy.TorchHook(th)\n", - "class Net(nn.Module):\n", - " def __init__(self):\n", - " super(Net, self).__init__()\n", - " self.fc1 = nn.Linear(13, 32)\n", - " self.fc2 = nn.Linear(32, 24)\n", - " self.fc3 = nn.Linear(24, 1)\n", - "\n", - " def forward(self, x):\n", - " x = x.view(-1, 13)\n", - " x = F.relu(self.fc1(x))\n", - " x = F.relu(self.fc2(x))\n", - " x = self.fc3(x)\n", - " return x\n", - "\n", - "model = Net()\n", - "optimizer = optim.SGD(model.parameters(), lr=0.01)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "

Connect to Grid Network

" - ] - }, - { - "cell_type": "code", - "execution_count": 3, - "metadata": {}, - "outputs": [], - "source": [ - "my_grid = gr.GridNetwork(\"http://localhost:5000\")" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "

Search a dataset

" - ] - }, - { - "cell_type": "code", - "execution_count": 4, - "metadata": {}, - "outputs": [], - "source": [ - "data = my_grid.search(\"#X\", \"#boston\", \"#housing\")\n", - "target = my_grid.search(\"#Y\", \"#boston\", \"#housing\")" - ] - }, - { - "cell_type": "code", - "execution_count": 5, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "[[(Wrapper)>[PointerTensor | me:37249732726 -> Bob:80786423983]],\n", - " [(Wrapper)>[PointerTensor | me:9713249537 -> Alice:18146958968]],\n", - " [(Wrapper)>[PointerTensor | me:75334145593 -> Bill:9562088539]]]" - ] - }, - "execution_count": 5, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "data" - ] - }, - { - "cell_type": "code", - "execution_count": 6, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "[[(Wrapper)>[PointerTensor | me:75640411060 -> Bob:81448698219]],\n", - " [(Wrapper)>[PointerTensor | me:34800237337 -> Alice:25553850079]],\n", - " [(Wrapper)>[PointerTensor | me:4445981120 -> Bill:65382525089]]]" - ] - }, - "execution_count": 6, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "target" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "

Perform Train

" - ] - }, - { - "cell_type": "code", - "execution_count": 7, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Train Epoch: 0 [0/402 (0%)]\tLoss: 600.671143\n", - "Train Epoch: 0 [134/402 (33%)]\tLoss: 503.293976\n", - "Train Epoch: 0 [268/402 (67%)]\tLoss: 593.302368\n", - "Train Epoch: 1 [0/402 (0%)]\tLoss: 491.998962\n", - "Train Epoch: 1 [134/402 (33%)]\tLoss: 335.492950\n", - "Train Epoch: 1 [268/402 (67%)]\tLoss: 224.230820\n", - "Train Epoch: 2 [0/402 (0%)]\tLoss: 228.273834\n", - "Train Epoch: 2 [134/402 (33%)]\tLoss: 424.945129\n", - "Train Epoch: 2 [268/402 (67%)]\tLoss: 468.684082\n", - "Train Epoch: 3 [0/402 (0%)]\tLoss: 310.441101\n", - "Train Epoch: 3 [134/402 (33%)]\tLoss: 166.916702\n", - "Train Epoch: 3 [268/402 (67%)]\tLoss: 114.200340\n", - "Train Epoch: 4 [0/402 (0%)]\tLoss: 147.395859\n", - "Train Epoch: 4 [134/402 (33%)]\tLoss: 320.018402\n", - "Train Epoch: 4 [268/402 (67%)]\tLoss: 288.444458\n", - "Train Epoch: 5 [0/402 (0%)]\tLoss: 132.126160\n", - "Train Epoch: 5 [134/402 (33%)]\tLoss: 35.871387\n", - "Train Epoch: 5 [268/402 (67%)]\tLoss: 30.129076\n", - "Train Epoch: 6 [0/402 (0%)]\tLoss: 21.753355\n", - "Train Epoch: 6 [134/402 (33%)]\tLoss: 20.651144\n", - "Train Epoch: 6 [268/402 (67%)]\tLoss: 27.102346\n", - "Train Epoch: 7 [0/402 (0%)]\tLoss: 47.607990\n", - "Train Epoch: 7 [134/402 (33%)]\tLoss: 60.284790\n", - "Train Epoch: 7 [268/402 (67%)]\tLoss: 167.354965\n", - "Train Epoch: 8 [0/402 (0%)]\tLoss: 47.352947\n", - "Train Epoch: 8 [134/402 (33%)]\tLoss: 22.201246\n", - "Train Epoch: 8 [268/402 (67%)]\tLoss: 46.584240\n", - "Train Epoch: 9 [0/402 (0%)]\tLoss: 38.757362\n", - "Train Epoch: 9 [134/402 (33%)]\tLoss: 62.910469\n", - "Train Epoch: 9 [268/402 (67%)]\tLoss: 25.898268\n", - "Train Epoch: 10 [0/402 (0%)]\tLoss: 12.773787\n", - "Train Epoch: 10 [134/402 (33%)]\tLoss: 10.727639\n", - "Train Epoch: 10 [268/402 (67%)]\tLoss: 17.612232\n", - "Train Epoch: 11 [0/402 (0%)]\tLoss: 10.527602\n", - "Train Epoch: 11 [134/402 (33%)]\tLoss: 10.243439\n", - "Train Epoch: 11 [268/402 (67%)]\tLoss: 18.763672\n", - "Train Epoch: 12 [0/402 (0%)]\tLoss: 12.978152\n", - "Train Epoch: 12 [134/402 (33%)]\tLoss: 13.406409\n", - "Train Epoch: 12 [268/402 (67%)]\tLoss: 16.739573\n", - "Train Epoch: 13 [0/402 (0%)]\tLoss: 16.439005\n", - "Train Epoch: 13 [134/402 (33%)]\tLoss: 28.138084\n", - "Train Epoch: 13 [268/402 (67%)]\tLoss: 65.809654\n", - "Train Epoch: 14 [0/402 (0%)]\tLoss: 25.663120\n", - "Train Epoch: 14 [134/402 (33%)]\tLoss: 32.013588\n", - "Train Epoch: 14 [268/402 (67%)]\tLoss: 16.384932\n" - ] - } - ], - "source": [ - "def train(epoch):\n", - " dataset_size = sum([ len(data[i][0]) for i in range(len(data))])\n", - " model.train()\n", - " for i in range(len(data)):\n", - " worker = data[i][0].location\n", - " model.send(worker)\n", - " optimizer.zero_grad()\n", - " pred = model(data[i][0])\n", - " loss = F.mse_loss(pred.view(-1), target[i][0])\n", - " loss.backward()\n", - " optimizer.step()\n", - " model.get()\n", - " loss = loss.get()\n", - " print('Train Epoch: {} [{}/{} ({:.0f}%)]\\tLoss: {:.6f}'.format(\n", - " epoch, i * data[i][0].shape[0], dataset_size,\n", - " 100. * (i * data[i][0].shape[0]) / dataset_size, loss.item()))\n", - "\n", - "for epoch in range(15):\n", - " train(epoch)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "

Disconnect Grid Nodes

" - ] - }, - { - "cell_type": "code", - "execution_count": 8, - "metadata": {}, - "outputs": [], - "source": [ - "my_grid.disconnect_nodes()" - ] - } - ], - "metadata": { - "kernelspec": { - "display_name": "Python 3", - "language": "python", - "name": "python3" - }, - "language_info": { - "codemirror_mode": { - "name": "ipython", - "version": 3 - }, - "file_extension": ".py", - "mimetype": "text/x-python", - "name": "python", - "nbconvert_exporter": "python", - "pygments_lexer": "ipython3", - "version": "3.7.3" - } - }, - "nbformat": 4, - "nbformat_minor": 2 -} diff --git a/examples/experimental/Federated Learning with Grid Nodes.ipynb b/examples/experimental/Federated Learning with Grid Nodes.ipynb deleted file mode 100644 index bddcab3e3..000000000 --- a/examples/experimental/Federated Learning with Grid Nodes.ipynb +++ /dev/null @@ -1,302 +0,0 @@ -{ - "cells": [ - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "

Federated Learning with Grid Nodes

\n", - "This notebook was made based on Part 10: Federated Learning with Encrypted Gradient Aggregation tutorial" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "

Import dependencies

" - ] - }, - { - "cell_type": "code", - "execution_count": 1, - "metadata": {}, - "outputs": [], - "source": [ - "import pickle\n", - "import torch\n", - "import torch.nn as nn\n", - "import grid as gr\n", - "import torch.nn.functional as F\n", - "import torch.optim as optim\n", - "import syft as sy\n", - "from torch.utils.data import TensorDataset, DataLoader\n", - "import time" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "

Setup config

\n", - "Define Config parameters, init hook, etc..." - ] - }, - { - "cell_type": "code", - "execution_count": 2, - "metadata": {}, - "outputs": [], - "source": [ - "hook = sy.TorchHook(torch)\n", - "class Parser:\n", - " \"\"\"Parameters for training\"\"\"\n", - " def __init__(self):\n", - " self.epochs = 1\n", - " self.lr = 0.001\n", - " self.test_batch_size = 8\n", - " self.batch_size = 8\n", - " self.log_interval = 10\n", - " self.seed = 1\n", - " \n", - "args = Parser()\n", - "\n", - "torch.manual_seed(args.seed)\n", - "kwargs = {}" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "

Load dataset

" - ] - }, - { - "cell_type": "code", - "execution_count": 3, - "metadata": {}, - "outputs": [], - "source": [ - "with open('../dataset/boston_housing.pickle','rb') as f:\n", - " ((X, y), (X_test, y_test)) = pickle.load(f)\n", - "\n", - "X = torch.from_numpy(X).float()\n", - "y = torch.from_numpy(y).float()\n", - "X_test = torch.from_numpy(X_test).float()\n", - "y_test = torch.from_numpy(y_test).float()" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "

Preprocessing

" - ] - }, - { - "cell_type": "code", - "execution_count": 4, - "metadata": {}, - "outputs": [], - "source": [ - "# preprocessing\n", - "mean = X.mean(0, keepdim=True)\n", - "dev = X.std(0, keepdim=True)\n", - "mean[:, 3] = 0. # the feature at column 3 is binary,\n", - "dev[:, 3] = 1. # so I'd rather not standardize it\n", - "X = (X - mean) / dev\n", - "X_test = (X_test - mean) / dev\n", - "train = TensorDataset(X, y)\n", - "test = TensorDataset(X_test, y_test)\n", - "train_loader = DataLoader(train, batch_size=args.batch_size, shuffle=True, **kwargs)\n", - "test_loader = DataLoader(test, batch_size=args.test_batch_size, shuffle=True, **kwargs)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "

Define Model

" - ] - }, - { - "cell_type": "code", - "execution_count": 5, - "metadata": {}, - "outputs": [], - "source": [ - "class Net(nn.Module):\n", - " def __init__(self):\n", - " super(Net, self).__init__()\n", - " self.fc1 = nn.Linear(13, 32)\n", - " self.fc2 = nn.Linear(32, 24)\n", - " self.fc3 = nn.Linear(24, 1)\n", - "\n", - " def forward(self, x):\n", - " x = x.view(-1, 13)\n", - " x = F.relu(self.fc1(x))\n", - " x = F.relu(self.fc2(x))\n", - " x = self.fc3(x)\n", - " return x\n", - "\n", - "model = Net()\n", - "optimizer = optim.SGD(model.parameters(), lr=args.lr)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "

Connect with remote workers

\n", - "Before this step, it is necessary to initialize the workers separately" - ] - }, - { - "cell_type": "code", - "execution_count": 6, - "metadata": {}, - "outputs": [], - "source": [ - "bob = gr.WebsocketGridClient(hook, \"http://localhost:3000\", id=\"Bob\")\n", - "alice = gr.WebsocketGridClient(hook, \"http://localhost:3001\", id=\"Alice\")\n", - "james = gr.WebsocketGridClient(hook, \"http://localhost:3002\", id=\"James\")\n", - "bob.connect()\n", - "alice.connect()\n", - "james.connect()" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "

Ensure workers can communicate with each other

\n", - "For this to be possible, you need to introduce them to each other." - ] - }, - { - "cell_type": "code", - "execution_count": 7, - "metadata": {}, - "outputs": [], - "source": [ - "gr.connect_all_nodes((bob, alice, james))" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "

Populate workers with dataset and define training/test routines

" - ] - }, - { - "cell_type": "code", - "execution_count": 8, - "metadata": {}, - "outputs": [], - "source": [ - "compute_nodes = [bob, alice]\n", - "\n", - "\n", - "train_distributed_dataset = []\n", - "\n", - "for batch_idx, (data,target) in enumerate(train_loader):\n", - " data = data.send(compute_nodes[batch_idx % len(compute_nodes)])\n", - " target = target.send(compute_nodes[batch_idx % len(compute_nodes)])\n", - " train_distributed_dataset.append((data, target))\n", - "\n", - "def train(epoch):\n", - " model.train()\n", - " for batch_idx, (data,target) in enumerate(train_distributed_dataset):\n", - " worker = data.location\n", - " model.send(worker)\n", - "\n", - " optimizer.zero_grad()\n", - " # update the model\n", - " pred = model(data)\n", - " loss = F.mse_loss(pred.view(-1), target)\n", - " loss.backward()\n", - " optimizer.step()\n", - " model.get()\n", - "\n", - " if batch_idx % args.log_interval == 0:\n", - " loss = loss.get()\n", - " print('Train Epoch: {} [{}/{} ({:.0f}%)]\\tLoss: {:.6f}'.format(\n", - " epoch, batch_idx * data.shape[0], len(train_loader),\n", - " 100. * batch_idx / len(train_loader), loss.item()))\n", - "\n", - "def test():\n", - " model.eval()\n", - " test_loss = 0\n", - " for data, target in test_loader:\n", - " #data, target = Variable(data, volatile=True), Variable(target)\n", - " output = model(data)\n", - " test_loss += F.mse_loss(output.view(-1), target, reduction='sum').item() # sum up batch loss\n", - " pred = output.data.max(1, keepdim=True)[1] # get the index of the max log-probability\n", - "\n", - " test_loss /= len(test_loader.dataset)\n", - " print('\\nTest set: Average loss: {:.4f}\\n'.format(test_loss))" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "

Perform Train/test routines and measure performance

" - ] - }, - { - "cell_type": "code", - "execution_count": 9, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Train Epoch: 1 [0/51 (0%)]\tLoss: 499.737000\n", - "Train Epoch: 1 [80/51 (20%)]\tLoss: 444.433746\n", - "Train Epoch: 1 [160/51 (39%)]\tLoss: 332.781433\n", - "Train Epoch: 1 [240/51 (59%)]\tLoss: 133.071625\n", - "Train Epoch: 1 [320/51 (78%)]\tLoss: 202.246490\n", - "Train Epoch: 1 [200/51 (98%)]\tLoss: 16.212305\n", - "Total 15.01 s\n", - "\n", - "Test set: Average loss: 25.9796\n", - "\n" - ] - } - ], - "source": [ - "t = time.time()\n", - "\n", - "for epoch in range(1, args.epochs + 1):\n", - " train(epoch)\n", - "\n", - "total_time = time.time() - t\n", - "print('Total', round(total_time, 2), 's')\n", - "test()" - ] - } - ], - "metadata": { - "kernelspec": { - "display_name": "Python 3", - "language": "python", - "name": "python3" - }, - "language_info": { - "codemirror_mode": { - "name": "ipython", - "version": 3 - }, - "file_extension": ".py", - "mimetype": "text/x-python", - "name": "python", - "nbconvert_exporter": "python", - "pygments_lexer": "ipython3", - "version": "3.6.7" - } - }, - "nbformat": 4, - "nbformat_minor": 2 -} diff --git a/examples/experimental/Fetch Plan Experiments.ipynb b/examples/experimental/Fetch Plan Experiments.ipynb deleted file mode 100644 index face64f83..000000000 --- a/examples/experimental/Fetch Plan Experiments.ipynb +++ /dev/null @@ -1,539 +0,0 @@ -{ - "cells": [ - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Imports and model specifications" - ] - }, - { - "cell_type": "code", - "execution_count": 1, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "WARNING: Grid nodes publish datasets online and are for EXPERIMENTAL use only.Deploy nodes at your own risk. Do not use OpenGrid with any data/models you wish to keep private.\n", - "\n", - "WARNING: Grid nodes publish datasets online and are for EXPERIMENTAL use only.Deploy nodes at your own risk. Do not use OpenGrid with any data/models you wish to keep private.\n", - "\n", - "WARNING: Grid nodes publish datasets online and are for EXPERIMENTAL use only.Deploy nodes at your own risk. Do not use OpenGrid with any data/models you wish to keep private.\n", - "\n", - "WARNING: Grid nodes publish datasets online and are for EXPERIMENTAL use only.Deploy nodes at your own risk. Do not use OpenGrid with any data/models you wish to keep private.\n", - "\n" - ] - } - ], - "source": [ - "# Import dependencies\n", - "import torch as th\n", - "import syft as sy\n", - "import torch.nn as nn\n", - "import torch.nn.functional as F\n", - "import grid as gr\n", - "\n", - "# Hook\n", - "hook = sy.TorchHook(th)\n", - "me = hook.local_worker\n", - "me.is_client_worker = False\n", - " \n", - "# Connect to nodes\n", - "alice = gr.WebsocketGridClient(hook, \"http://localhost:3001\", id=\"Alice\")\n", - "alice.connect()\n", - "bob = gr.WebsocketGridClient(hook, \"http://localhost:3000\", id=\"Bob\")\n", - "charlie = gr.WebsocketGridClient(hook, \"http://localhost:3002\", id=\"James\")\n", - "dan = gr.WebsocketGridClient(hook, \"http://localhost:3003\", id=\"Dan\")\n", - "bob.connect()\n", - "charlie.connect()\n", - "dan.connect()\n", - "\n", - "gr.connect_all_nodes([bob, alice, charlie, dan])" - ] - }, - { - "cell_type": "code", - "execution_count": 2, - "metadata": {}, - "outputs": [], - "source": [ - "data_shape = (1, 1)\n", - "data = th.zeros(data_shape)" - ] - }, - { - "cell_type": "code", - "execution_count": 3, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "tensor([[-0.5318]], grad_fn=)\n" - ] - } - ], - "source": [ - "# Model Owner\n", - "# Support fetch plan + AST tensor\n", - "class Net(sy.Plan):\n", - " def __init__(self):\n", - " super(Net, self).__init__(id=\"fc3\")\n", - " self.fc1 = nn.Linear(1,1)\n", - " self.add_to_state([\"fc1\"])\n", - "\n", - " def forward(self, x):\n", - " return self.fc1(x)\n", - "\n", - "plan = Net()\n", - " \n", - "plan.build(data)\n", - "print(plan(data))" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "from IPython.display import display_html\n", - "\n", - "def restart_kernel() :\n", - " display_html(\"\",raw=True)\n", - " \n", - "restart_kernel()" - ] - }, - { - "cell_type": "code", - "execution_count": 1, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "WARNING: Grid nodes publish datasets online and are for EXPERIMENTAL use only.Deploy nodes at your own risk. Do not use OpenGrid with any data/models you wish to keep private.\n", - "\n", - "WARNING: Grid nodes publish datasets online and are for EXPERIMENTAL use only.Deploy nodes at your own risk. Do not use OpenGrid with any data/models you wish to keep private.\n", - "\n", - "WARNING: Grid nodes publish datasets online and are for EXPERIMENTAL use only.Deploy nodes at your own risk. Do not use OpenGrid with any data/models you wish to keep private.\n", - "\n", - "WARNING: Grid nodes publish datasets online and are for EXPERIMENTAL use only.Deploy nodes at your own risk. Do not use OpenGrid with any data/models you wish to keep private.\n", - "\n" - ] - } - ], - "source": [ - "# Import dependencies\n", - "import torch as th\n", - "import syft as sy\n", - "import torch.nn as nn\n", - "import torch.nn.functional as F\n", - "import grid as gr\n", - "\n", - "# Hook\n", - "hook = sy.TorchHook(th)\n", - "me = hook.local_worker\n", - "me.is_client_worker = False\n", - " \n", - "# Connect to nodes\n", - "alice = gr.WebsocketGridClient(hook, \"http://localhost:3001\", id=\"Alice\")\n", - "alice.connect()\n", - "bob = gr.WebsocketGridClient(hook, \"http://localhost:3000\", id=\"Bob\")\n", - "charlie = gr.WebsocketGridClient(hook, \"http://localhost:3002\", id=\"James\")\n", - "dan = gr.WebsocketGridClient(hook, \"http://localhost:3003\", id=\"Dan\")\n", - "bob.connect()\n", - "charlie.connect()\n", - "dan.connect()\n", - "\n", - "gr.connect_all_nodes([bob, alice, charlie, dan])" - ] - }, - { - "cell_type": "code", - "execution_count": 4, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "" - ] - }, - "execution_count": 4, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "plan.fix_prec().share(bob, charlie, crypto_provider=dan)" - ] - }, - { - "cell_type": "code", - "execution_count": 5, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "sending model\n" - ] - }, - { - "data": { - "text/plain": [ - "{'success': True, 'message': 'Model saved with id: fc3'}" - ] - }, - "execution_count": 5, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "alice.serve_encrypted_model(plan)" - ] - }, - { - "cell_type": "code", - "execution_count": 6, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "{'success': True, 'models': ['fc3']}" - ] - }, - "execution_count": 6, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "alice.models" - ] - }, - { - "cell_type": "code", - "execution_count": 3, - "metadata": {}, - "outputs": [], - "source": [ - "model_copy = alice.download_model(\"fc3\")" - ] - }, - { - "cell_type": "code", - "execution_count": 4, - "metadata": {}, - "outputs": [], - "source": [ - "x_sh = data.fix_prec().share(bob, charlie, crypto_provider=dan)" - ] - }, - { - "cell_type": "code", - "execution_count": 5, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "tensor([[-0.5310]])" - ] - }, - "execution_count": 5, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "model_copy(x_sh).get().float_prec()" - ] - }, - { - "cell_type": "code", - "execution_count": 5, - "metadata": {}, - "outputs": [], - "source": [ - "# TODO: this should be done internally\n", - "new_state_ids = []\n", - "for state_id in fetched_plan.state_ids:\n", - " a_sh = me._objects[state_id].fix_prec().share(bob, charlie, crypto_provider=dan).get()\n", - " # TODO: this should be stored automatically\n", - " me._objects[a_sh.id] = a_sh\n", - " new_state_ids.append(a_sh.id)" - ] - }, - { - "cell_type": "code", - "execution_count": 6, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "[89202407203, 56780661394, 54079972075, 63518858733, 6715421912, 68929474864]" - ] - }, - "execution_count": 6, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "fetched_plan.state_ids" - ] - }, - { - "cell_type": "code", - "execution_count": 7, - "metadata": {}, - "outputs": [], - "source": [ - "fetched_plan.replace_ids(fetched_plan.state_ids, new_state_ids)\n", - "fetched_plan.state_ids = new_state_ids" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "me._objects" - ] - }, - { - "cell_type": "code", - "execution_count": 8, - "metadata": { - "scrolled": true - }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "tensor([[0.1420]])\n", - "CPU times: user 15.4 s, sys: 5.39 s, total: 20.8 s\n", - "Wall time: 18.6 s\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "WARNING:engineio.client:WebSocket connection was closed, aborting\n", - "WARNING:engineio.client:WebSocket connection was closed, aborting\n", - "WARNING:engineio.client:WebSocket connection was closed, aborting\n", - "WARNING:engineio.client:WebSocket connection was closed, aborting\n", - "WARNING:engineio.client:WebSocket connection was closed, aborting\n", - "WARNING:engineio.client:WebSocket connection was closed, aborting\n", - "WARNING:engineio.client:WebSocket connection was closed, aborting\n", - "WARNING:engineio.client:WebSocket connection was closed, aborting\n", - "WARNING:engineio.client:WebSocket connection was closed, aborting\n", - "WARNING:engineio.client:WebSocket connection was closed, aborting\n", - "WARNING:engineio.client:WebSocket connection was closed, aborting\n", - "WARNING:engineio.client:WebSocket connection was closed, aborting\n", - "WARNING:engineio.client:WebSocket connection was closed, aborting\n", - "WARNING:engineio.client:WebSocket connection was closed, aborting\n" - ] - } - ], - "source": [ - "%%time\n", - "print(fetched_plan(x_ptr).get().float_prec())" - ] - }, - { - "cell_type": "code", - "execution_count": 8, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "net2\n" - ] - } - ], - "source": [ - "# Support fetching a plan\n", - "plan_func = False\n", - "\n", - "if plan_func:\n", - " @sy.func2plan(args_shape=[(1,)], state={\"bias\": th.tensor([3.0])})\n", - " def plan_mult_3(x, state):\n", - " bias = state.read(\"bias\")\n", - " x = x * bias\n", - " return x\n", - "else:\n", - " class Net(sy.Plan):\n", - " def __init__(self):\n", - " super(Net, self).__init__(id=\"net2\")\n", - " self.fc1 = nn.Linear(1, 1)\n", - " self.add_to_state([\"fc1\"])\n", - "\n", - " def forward(self, x):\n", - " return self.fc1(x)\n", - " \n", - " plan_mult_3 = Net()\n", - " plan_mult_3.build(th.tensor(1))\n", - "\n", - "sent_plan = plan_mult_3.send(alice)\n", - "print(sent_plan.id)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "from IPython.display import display_html\n", - "\n", - "def restart_kernel() :\n", - " display_html(\"\",raw=True)\n", - " \n", - "restart_kernel()" - ] - }, - { - "cell_type": "code", - "execution_count": 1, - "metadata": {}, - "outputs": [], - "source": [ - "# Import dependencies\n", - "import torch as th\n", - "import syft as sy\n", - "import torch.nn as nn\n", - "import torch.nn.functional as F\n", - "import grid as gr\n", - "\n", - "# Hook\n", - "hook = sy.TorchHook(th)\n", - "me = hook.local_worker\n", - "me.is_client_worker = False\n", - " \n", - "# Connect to nodes\n", - "alice = gr.WebsocketGridClient(hook, \"http://localhost:3001\", id=\"Alice\")\n", - "alice.connect()\n", - "bob = gr.WebsocketGridClient(hook, \"http://localhost:3000\", id=\"Bob\")\n", - "charlie = gr.WebsocketGridClient(hook, \"http://localhost:3002\", id=\"James\")\n", - "dan = gr.WebsocketGridClient(hook, \"http://localhost:3003\", id=\"Dan\")\n", - "bob.connect()\n", - "charlie.connect()\n", - "dan.connect()\n", - "\n", - "gr.connect_all_nodes([bob, alice, charlie, dan])" - ] - }, - { - "cell_type": "code", - "execution_count": 9, - "metadata": {}, - "outputs": [], - "source": [ - "# Fetch plan\n", - "fetched_plan = alice.fetch_plan(\"net2\")" - ] - }, - { - "cell_type": "code", - "execution_count": 10, - "metadata": {}, - "outputs": [], - "source": [ - "# TODO: this should be done internally\n", - "new_state_ids = []\n", - "for state_id in fetched_plan.state_ids:\n", - " # TODO: we should not have direct access to the weights\n", - " a_sh = me._objects[state_id].get()\n", - " # TODO: this should be stored automatically\n", - " me._objects[a_sh.id] = a_sh\n", - " new_state_ids.append(a_sh.id)" - ] - }, - { - "cell_type": "code", - "execution_count": 11, - "metadata": {}, - "outputs": [], - "source": [ - "fetched_plan.replace_ids(fetched_plan.state_ids, new_state_ids)\n", - "fetched_plan.state_ids = new_state_ids" - ] - }, - { - "cell_type": "code", - "execution_count": 12, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "tensor([0.2805], requires_grad=True)\n" - ] - } - ], - "source": [ - "x = th.tensor([1.])\n", - "print(fetched_plan(x))" - ] - } - ], - "metadata": { - "kernelspec": { - "display_name": "Python 3", - "language": "python", - "name": "python3" - }, - "language_info": { - "codemirror_mode": { - "name": "ipython", - "version": 3 - }, - "file_extension": ".py", - "mimetype": "text/x-python", - "name": "python", - "nbconvert_exporter": "python", - "pygments_lexer": "ipython3", - "version": "3.6.7" - } - }, - "nbformat": 4, - "nbformat_minor": 2 -} diff --git a/examples/experimental/Host GPT-2 (12-layer, 768-hidden, 12-heads, 117M parameters) .ipynb b/examples/experimental/Host GPT-2 (12-layer, 768-hidden, 12-heads, 117M parameters) .ipynb deleted file mode 100644 index 2b5d6e539..000000000 --- a/examples/experimental/Host GPT-2 (12-layer, 768-hidden, 12-heads, 117M parameters) .ipynb +++ /dev/null @@ -1,350 +0,0 @@ -{ - "cells": [ - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "

Hosting Large Models

" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "In this notebook, we'll host and perform inferences using GPT-2 using remote grid node. \n", - "\n", - "**Requirements:**\n", - "- [Install pytorch_transformers lib.](https://github.com/huggingface/pytorch-transformers#installation)\n", - "- [Choose pre-trained model.](https://huggingface.co/pytorch-transformers/pretrained_models.html)\n", - "- Run Grid Node app. \n", - "\n", - "**PS: In this example, we'll use GPT-2 Model (12-layer, 768-hidden, 12-heads, 117M parameters)**\n" - ] - }, - { - "cell_type": "code", - "execution_count": 1, - "metadata": {}, - "outputs": [], - "source": [ - "import syft as sy\n", - "import torch as th\n", - "import grid as gr\n", - "\n", - "from pytorch_transformers import GPT2Tokenizer, GPT2LMHeadModel" - ] - }, - { - "cell_type": "code", - "execution_count": 3, - "metadata": {}, - "outputs": [], - "source": [ - "hook = sy.TorchHook(th)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "

Set up Configs

" - ] - }, - { - "cell_type": "code", - "execution_count": 3, - "metadata": {}, - "outputs": [], - "source": [ - "# Load pre-trained model tokenizer (vocabulary)\n", - "tokenizer = GPT2Tokenizer.from_pretrained('gpt2')\n", - "\n", - "# Load pre-trained model (weights)\n", - "model = GPT2LMHeadModel.from_pretrained('gpt2',torchscript=True)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "

Setting Input

" - ] - }, - { - "cell_type": "code", - "execution_count": 4, - "metadata": {}, - "outputs": [], - "source": [ - "# Encode a text inputs\n", - "text = \"Who was Jim Henson ? Jim Henson was a\"\n", - "indexed_tokens = tokenizer.encode(text)\n", - "\n", - "# Convert indexed tokens in a PyTorch tensor\n", - "tokens_tensor = th.tensor([indexed_tokens])" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "

Hosting GPT-2 Model

" - ] - }, - { - "cell_type": "code", - "execution_count": 5, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "WARNING: Grid nodes publish datasets online and are for EXPERIMENTAL use only.Deploy nodes at your own risk. Do not use OpenGrid with any data/models you wish to keep private.\n", - "\n" - ] - } - ], - "source": [ - "traced_model = th.jit.trace(model, (tokens_tensor,))\n", - "\n", - "# Grid Node\n", - "bob = gr.WebsocketGridClient(hook, \"http://localhost:3000/\", id=\"Bob\")\n", - "bob.connect()" - ] - }, - { - "cell_type": "code", - "execution_count": 8, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "True" - ] - }, - "execution_count": 8, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "# Host GPT-2 on Bob worker\n", - "bob.serve_model(traced_model, model_id=\"GPT-2\", allow_download=True, allow_remote_inference=True)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "

Running Inference

" - ] - }, - { - "cell_type": "code", - "execution_count": 10, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Predicted text: Who was Jim Henson? Jim Henson was a great\n", - "CPU times: user 274 ms, sys: 9.29 ms, total: 283 ms\n", - "Wall time: 896 ms\n" - ] - } - ], - "source": [ - "%%time\n", - "response = bob.run_remote_inference(model_id=\"GPT-2\", data=tokens_tensor)\n", - "\n", - "predictions = th.tensor(response)\n", - "predicted_index = th.argmax(predictions[0, -1, :]).item()\n", - "predicted_text = tokenizer.decode(indexed_tokens + [predicted_index])\n", - "print(\"Predicted text: \", predicted_text)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "

Text Generation

" - ] - }, - { - "cell_type": "code", - "execution_count": 13, - "metadata": {}, - "outputs": [], - "source": [ - "def top_k_top_p_filtering(logits, top_k=0, top_p=0.0, filter_value=-float('Inf')):\n", - " \"\"\" Filter a distribution of logits using top-k and/or nucleus (top-p) filtering\n", - " Args:\n", - " logits: logits distribution shape (vocabulary size)\n", - " top_k > 0: keep only top k tokens with highest probability (top-k filtering).\n", - " top_p > 0.0: keep the top tokens with cumulative probability >= top_p (nucleus filtering).\n", - " Nucleus filtering is described in Holtzman et al. (http://arxiv.org/abs/1904.09751)\n", - " From: https://gist.github.com/thomwolf/1a5a29f6962089e871b94cbd09daf317\n", - " \"\"\"\n", - " assert logits.dim() == 1 # batch size 1 for now - could be updated for more but the code would be less clear\n", - " top_k = min(top_k, logits.size(-1)) # Safety check\n", - " if top_k > 0:\n", - " # Remove all tokens with a probability less than the last token of the top-k\n", - " indices_to_remove = logits < th.topk(logits, top_k)[0][..., -1, None]\n", - " logits[indices_to_remove] = filter_value\n", - "\n", - " if top_p > 0.0:\n", - " sorted_logits, sorted_indices = th.sort(logits, descending=True)\n", - " cumulative_probs = th.cumsum(F.softmax(sorted_logits, dim=-1), dim=-1)\n", - "\n", - " # Remove tokens with cumulative probability above the threshold\n", - " sorted_indices_to_remove = cumulative_probs > top_p\n", - " # Shift the indices to the right to keep also the first token above the threshold\n", - " sorted_indices_to_remove[..., 1:] = sorted_indices_to_remove[..., :-1].clone()\n", - " sorted_indices_to_remove[..., 0] = 0\n", - "\n", - " indices_to_remove = sorted_indices[sorted_indices_to_remove]\n", - " logits[indices_to_remove] = filter_value\n", - " return logits\n", - "\n", - "def sample_sequence(worker, length, context, num_samples=1, temperature=1, top_k=0, top_p=0.0, is_xlnet=False, device='cpu'):\n", - " context = th.tensor(context, dtype=th.long, device=device)\n", - " context = context.unsqueeze(0).repeat(num_samples, 1)\n", - "\n", - " predicted_indexes = []\n", - "\n", - " generated = context\n", - " with th.no_grad():\n", - " for _ in range(length):\n", - " inputs = {'input_ids': generated}\n", - "\n", - " # Inference\n", - " outputs = th.tensor(worker.run_remote_inference(model_id=\"GPT-2\", data=generated))\n", - "\n", - " # Applying Filter\n", - " next_token_logits = outputs[0, -1, :] / temperature\n", - " filtered_logits = top_k_top_p_filtering(next_token_logits, top_k=top_k, top_p=top_p)\n", - " next_token = th.multinomial(F.softmax(filtered_logits, dim=-1), num_samples=1)\n", - "\n", - " # Update context shifting tokens\n", - " generated = th.cat((th.tensor([generated[0][1:].tolist()]), next_token.unsqueeze(0)), dim=1)\n", - "\n", - " # Save predicted word\n", - " predicted_indexes.append(th.argmax(outputs[0, -1, :]).item())\n", - " return predicted_indexes" - ] - }, - { - "cell_type": "code", - "execution_count": 14, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - " Who was Jim Henson? Jim Henson was a greathemothred engineer counselor who and he also more infuriamed by the own towards the. he is\n", - "CPU times: user 6.86 s, sys: 413 ms, total: 7.27 s\n", - "Wall time: 18.1 s\n" - ] - } - ], - "source": [ - "%%time\n", - "out = sample_sequence(bob,20, indexed_tokens)\n", - "text = tokenizer.decode(indexed_tokens + out, clean_up_tokenization_spaces=True)\n", - "print(text)" - ] - }, - { - "cell_type": "code", - "execution_count": 7, - "metadata": {}, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "WARNING:urllib3.connectionpool:Failed to parse headers (url=http://localhost:3000/get_model/GPT-2): [StartBoundaryNotFoundDefect(), MultipartInvariantViolationDefect()], unparsed data: ''\n", - "Traceback (most recent call last):\n", - " File \"/home/marianne/PyGrid/grid/client.py\", line 160, in download\n", - " return sy.hook.local_worker.fetch_plan(model_id, self, copy=True)\n", - " File \"/home/marianne/PySyft/syft/workers/base.py\", line 805, in fetch_plan\n", - " plan.replace_worker_ids(location.id, self.id)\n", - "AttributeError: 'NoneType' object has no attribute 'replace_worker_ids'\n", - "\n", - "During handling of the above exception, another exception occurred:\n", - "\n", - "Traceback (most recent call last):\n", - " File \"/home/marianne/.local/lib/python3.6/site-packages/urllib3/connectionpool.py\", line 399, in _make_request\n", - " assert_header_parsing(httplib_response.msg)\n", - " File \"/home/marianne/.local/lib/python3.6/site-packages/urllib3/util/response.py\", line 72, in assert_header_parsing\n", - " raise HeaderParsingError(defects=defects, unparsed_data=unparsed_data)\n", - "urllib3.exceptions.HeaderParsingError: [StartBoundaryNotFoundDefect(), MultipartInvariantViolationDefect()], unparsed data: ''\n" - ] - } - ], - "source": [ - "%%capture\n", - "model_copy = bob.download_model(\"GPT-2\")" - ] - }, - { - "cell_type": "code", - "execution_count": 18, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Predicted text: Who was Jim Henson? Jim Henson was a great\n", - "CPU times: user 367 ms, sys: 3.71 ms, total: 371 ms\n", - "Wall time: 64.8 ms\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/home/marianne/PySyft/syft/frameworks/torch/hook/hook.py:483: UserWarning: To copy construct from a tensor, it is recommended to use sourceTensor.clone().detach() or sourceTensor.clone().detach().requires_grad_(True), rather than torch.tensor(sourceTensor).\n", - " current_tensor = hook_self.torch.native_tensor(*args, **kwargs)\n", - "WARNING:engineio.client:WebSocket connection was closed, aborting\n" - ] - } - ], - "source": [ - "%%time\n", - "response = model_copy(tokens_tensor)\n", - "\n", - "predictions = th.tensor(response[0])\n", - "predicted_index = th.argmax(predictions[0, -1, :]).item()\n", - "predicted_text = tokenizer.decode(indexed_tokens + [predicted_index])\n", - "print(\"Predicted text: \", predicted_text)" - ] - } - ], - "metadata": { - "kernelspec": { - "display_name": "Python 3", - "language": "python", - "name": "python3" - }, - "language_info": { - "codemirror_mode": { - "name": "ipython", - "version": 3 - }, - "file_extension": ".py", - "mimetype": "text/x-python", - "name": "python", - "nbconvert_exporter": "python", - "pygments_lexer": "ipython3", - "version": "3.6.7" - } - }, - "nbformat": 4, - "nbformat_minor": 2 -} diff --git a/examples/experimental/Launch_Websocket_Grid_worker.ipynb b/examples/experimental/Launch_Websocket_Grid_worker.ipynb deleted file mode 100644 index 1d2a60e3c..000000000 --- a/examples/experimental/Launch_Websocket_Grid_worker.ipynb +++ /dev/null @@ -1,293 +0,0 @@ -{ - "cells": [ - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "

Launch Websocket OpenGrid Node on Heroku

" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "

Step 1: Import required dependencies

" - ] - }, - { - "cell_type": "code", - "execution_count": 2, - "metadata": {}, - "outputs": [], - "source": [ - "import syft as sy\n", - "import torch as th\n", - "import grid as gr\n", - "from grid.deploy import HerokuNodeDeployment\n", - "hook = sy.TorchHook(th)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "

Step 2: Instantiate websocket deployment object

" - ] - }, - { - "cell_type": "code", - "execution_count": 5, - "metadata": {}, - "outputs": [], - "source": [ - "worker_id = \"gridherokunode\"\n", - "\n", - "environment = {\n", - " \"ID\": worker_id,\n", - " \"GRID_NETWORK_URL\": \"http://opengridnetwork.herokuapp.com\",\n", - " \"ADDRESS\": \"http://{}.herokuapp.com/\".format(worker_id)\n", - "}\n", - "\n", - "node_component = HerokuNodeDeployment(worker_id, env_vars=environment, branch=\"fix-heroku-ws-app\")" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "

Step 2: Perform deployment

" - ] - }, - { - "cell_type": "code", - "execution_count": 6, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Step 0: Checking Dependencies\n", - "\tChecking for git dependency...DONE!\n", - "\tChecking for heroku --version dependency...DONE!\n", - "\tChecking for pip dependency...DONE!\n", - "\tChecking to see if heroku is logged in...DONE!\n", - "\n", - "Step 1: Making sure app name 'gridherokunode' is available\n", - "\t['https://gridherokunode.herokuapp.com/ | https://git.heroku.com/gridherokunode.git\\n']\n", - "\n", - "Step 3: Cleaning up heroku/postgres checks...\n", - "\n", - "Step 4: cleaning up git...\n", - "\t\n", - "Step 5: cloning heroku app code from Github...\n", - "\t\n", - "Step 6: copying app code from cloned repo...\n", - "\t\n", - "Step 7: removing the rest of the cloned code...\n", - "\t\n", - "Step 8: Initializing new github (for Heroku)...\n", - "\tInitialized empty Git repository in /home/ionesio/workspace/other/Grid/examples/experimental/tmp/.git/\n", - "\t\n", - "Step 9: Adding files to heroku github...\n", - "\t\n", - "Step 10: Committing files to heroku github...\n", - "\t[master (root-commit) 74faaa4] init\n", - "\t 15 files changed, 1361 insertions(+)\n", - "\t create mode 100644 Dockerfile\n", - "\t create mode 100644 LICENSE\n", - "\t create mode 100644 Procfile\n", - "\t create mode 100644 app/__init__.py\n", - "\t create mode 100644 app/main/__init__.py\n", - "\t create mode 100644 app/main/events.py\n", - "\t create mode 100644 app/main/local_worker_utils.py\n", - "\t create mode 100644 app/main/model_manager.py\n", - "\t create mode 100644 app/main/persistence/__init__.py\n", - "\t create mode 100644 app/main/persistence/models.py\n", - "\t create mode 100644 app/main/persistence/utils.py\n", - "\t create mode 100644 app/main/routes.py\n", - "\t create mode 100644 app/templates/index.html\n", - "\t create mode 100644 requirements.txt\n", - "\t create mode 100644 websocket_app.py\n", - "\t\n", - "\n", - "Step 11: Pushing code to Heroku (this can take take a few seconds)......\n", - "\thttps://gridherokunode.herokuapp.com/ | https://git.heroku.com/gridherokunode.git\n", - "\t\n", - "Step 12: Creating Postgres database... (this can take a few seconds)...\n", - "\tDatabase has been created and is available\n", - "\t ! This database is empty. If upgrading, you can transfer\n", - "\t ! data from another database with pg:copy\n", - "\tCreated postgresql-rectangular-67012 as DATABASE_URL\n", - "\tUse heroku addons:docs heroku-postgresql to view documentation\n", - "\t\n", - "Setting environment variable: ...\n", - "\tID: gridherokunode\n", - "\t\n", - "Setting environment variable: ...\n", - "\tGRID_NETWORK_URL: http://opengridnetwork.herokuapp.com\n", - "\t\n", - "Setting environment variable: ...\n", - "\tADDRESS: http://gridherokunode.herokuapp.com/\n", - "\t\n", - "Step 13: Pushing code to Heroku (this can take take a few minutes - if you're running this in a Jupyter Notebook you can watch progress in the notebook server terminal)......\n", - "\t\n", - "Step 14: Cleaning up!...\n", - "\t\n", - "SUCCESS: You can now connect to your app at https://gridherokunode.herokuapp.com\n" - ] - }, - { - "data": { - "text/plain": [ - "'https://gridherokunode.herokuapp.com'" - ] - }, - "execution_count": 6, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "node_component.deploy() # Next steps: Add other types of deployments (local, ANSIBLE, etc)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "

Step 3 : Create / connect client to grid application

" - ] - }, - { - "cell_type": "code", - "execution_count": 7, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "WARNING: Grid nodes publish datasets online and are for EXPERIMENTAL use only.Deploy nodes at your own risk. Do not use OpenGrid with any data/models you wish to keep private.\n", - "\n" - ] - } - ], - "source": [ - "worker = gr.WebsocketGridClient(hook, \"http://gridherokunode.herokuapp.com/\",id=\"gridherokunode\")\n", - "worker.connect()" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "

Step 4: Use PySyft Like Normal

" - ] - }, - { - "cell_type": "code", - "execution_count": 8, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "(Wrapper)>[PointerTensor | me:8017009477 -> gridherokunode:39694194772]" - ] - }, - "execution_count": 8, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "x = th.tensor([1,2,3,4,5]).send(worker)\n", - "x" - ] - }, - { - "cell_type": "code", - "execution_count": 9, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "tensor([1, 2, 3, 4, 5])" - ] - }, - "execution_count": 9, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "x.get()" - ] - }, - { - "cell_type": "code", - "execution_count": 10, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "(Wrapper)>[PointerTensor | me:63702389115 -> gridherokunode:61845163743]" - ] - }, - "execution_count": 10, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "y = th.tensor([1,2,3,4,5,6]).send(worker)\n", - "z = y + y\n", - "z" - ] - }, - { - "cell_type": "code", - "execution_count": 11, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "tensor([ 2, 4, 6, 8, 10, 12])" - ] - }, - "execution_count": 11, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "z.get()" - ] - } - ], - "metadata": { - "kernelspec": { - "display_name": "Python 3", - "language": "python", - "name": "python3" - }, - "language_info": { - "codemirror_mode": { - "name": "ipython", - "version": 3 - }, - "file_extension": ".py", - "mimetype": "text/x-python", - "name": "python", - "nbconvert_exporter": "python", - "pygments_lexer": "ipython3", - "version": "3.7.3" - } - }, - "nbformat": 4, - "nbformat_minor": 2 -} diff --git a/examples/experimental/mnist_federated_example/Fed.Learning MNIST [ Part-1 ] - Populate a Grid Network ( Dataset ).ipynb b/examples/experimental/mnist_federated_example/Fed.Learning MNIST [ Part-1 ] - Populate a Grid Network ( Dataset ).ipynb deleted file mode 100755 index f2bdfe76d..000000000 --- a/examples/experimental/mnist_federated_example/Fed.Learning MNIST [ Part-1 ] - Populate a Grid Network ( Dataset ).ipynb +++ /dev/null @@ -1,277 +0,0 @@ -{ - "cells": [ - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "

Federated Learning - MNIST Example

\n", - "

Populate remote grid nodes with labeled tensors

\n", - "In this notebook, we will populate our grid nodes with labeled data so that it will be used later by people interested in train models.\n", - "\n", - "**NOTE:** At the time of running this notebook, we were running the grid components in background mode. \n", - "\n", - "Components:\n", - " - Grid Gateway(http://localhost:5000)\n", - " - Grid Node Bob (http://localhost:3000)\n", - " - Grid Node Alice (http://localhost:3001)\n", - " \n", - "This notebook was made based on Part 10: Federated Learning with Encrypted Gradient Aggregation tutorial" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "

Import dependencies

" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "scrolled": true - }, - "outputs": [], - "source": [ - "import grid as gr\n", - "import syft as sy\n", - "import torch\n", - "import pickle\n", - "import time\n", - "import torchvision\n", - "from torchvision import datasets, transforms\n", - "import tqdm" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "

Setup config

\n", - "Init hook, connect with grid nodes, etc..." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "hook = sy.TorchHook(torch)\n", - "\n", - "# Connect directly to grid nodes\n", - "nodes = [\"ws://localhost:3000/\",\n", - " \"ws://localhost:3001/\"]\n", - "\n", - "compute_nodes = []\n", - "for node in nodes:\n", - " compute_nodes.append( gr.WebsocketGridClient(hook, node) )" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## 1) Load Dataset\n", - "\n", - "The code below will load and preprocess an N amount of MNIST data samples." - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Here you will load all data at once and then divide it into equal parts between grid nodes. If you would like to send pieces of data at a time, check out the \"Load Dataset (Split Method)\" below" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "scrolled": true - }, - "outputs": [], - "source": [ - "N_SAMPLES = 10000\n", - "MNIST_PATH = './dataset'\n", - "\n", - "transform = transforms.Compose([\n", - " transforms.ToTensor(),\n", - " transforms.Normalize((0.1307,), (0.3081,)),\n", - " ])\n", - "\n", - "trainset = datasets.MNIST(MNIST_PATH, download=True, train=True, transform=transform)\n", - "trainloader = torch.utils.data.DataLoader(trainset, batch_size=N_SAMPLES, shuffle=False)\n", - "\n", - "dataiter = iter(trainloader)\n", - "\n", - "images_train_mnist, labels_train_mnist = dataiter.next()" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "

2) Split dataset

\n", - "We will split our dataset to send to nodes. " - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "datasets_mnist = torch.split(images_train_mnist, int(len(images_train_mnist) / len(compute_nodes)), dim=0 ) #tuple of chunks (dataset / number of nodes)\n", - "labels_mnist = torch.split(labels_train_mnist, int(len(labels_train_mnist) / len(compute_nodes)), dim=0 ) #tuple of chunks (labels / number of nodes)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "

3) Tagging tensors

\n", - "The code below will add a tag (of your choice) to the data that will be sent to grid nodes. This tag is important as the gateway will need it to retrieve this data later." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "scrolled": true - }, - "outputs": [], - "source": [ - "tag_img = []\n", - "tag_label = []\n", - "\n", - "\n", - "for i in range(len(compute_nodes)):\n", - " tag_img.append(datasets_mnist[i].tag(\"#X\", \"#mnist\", \"#dataset\").describe(\"The input datapoints to the MNIST dataset.\"))\n", - " tag_label.append(labels_mnist[i].tag(\"#Y\", \"#mnist\", \"#dataset\").describe(\"The input labels to the MNIST dataset.\"))" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "

4) Sending our tensors to grid nodes

" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# NOTE: For some reason, there is strange behavior when trying to send within a loop.\n", - "# Ex : tag_x[i].send(compute_nodes[i])\n", - "# When resolved, this should be updated.\n", - "\n", - "shared_x1 = tag_img[0].send(compute_nodes[0], garbage_collect_data=False) # First chunk of dataset to Bob\n", - "shared_x2 = tag_img[1].send(compute_nodes[1], garbage_collect_data=False) # Second chunk of dataset to Alice\n", - "\n", - "shared_y1 = tag_label[0].send(compute_nodes[0], garbage_collect_data=False) # First chunk of labels to Bob\n", - "shared_y2 = tag_label[1].send(compute_nodes[1], garbage_collect_data=False) # Second chunk of labels to Alice" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "scrolled": false - }, - "outputs": [], - "source": [ - "print(\"X tensor pointers: \", shared_x1, shared_x2)\n", - "print(\"Y tensor pointers: \", shared_y1, shared_y2)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "# Load Dataset (Split method)\n", - "\n", - "The code below should only be used if you have not followed steps 1,2,3,4." - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Here we will send parts of the MNIST training dataset to each worker at a time. If you choose to load data with this method, you should not perform steps 1,2,3 and 4." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "scrolled": false - }, - "outputs": [], - "source": [ - "N_SAMPLES = 500\n", - "MNIST_PATH = './data'\n", - "\n", - "transform = transforms.Compose([\n", - " transforms.ToTensor(),\n", - " transforms.Normalize((0.1307,), (0.3081,)),\n", - " ])\n", - "\n", - "trainset = datasets.MNIST(MNIST_PATH, download=True, train=True, transform=transform)\n", - "trainloader = torch.utils.data.DataLoader(trainset, batch_size=N_SAMPLES, shuffle=False)\n", - "\n", - "dataiter = iter(trainloader)\n", - "n_workers = len(compute_nodes)\n", - "device = torch.device(\"cuda:0\" if torch.cuda.is_available() else \"cpu\")\n", - "\n", - "for i, data in enumerate(dataiter):\n", - " images_train_mnist, labels_train_mnist = data[0].to(device), data[1].to(device)\n", - " images_train_mnist.tag(\"#X\", \"#mnist\", \"#dataset\").describe(\"The input datapoints to the MNIST dataset.\")\n", - " labels_train_mnist.tag(\"#Y\", \"#mnist\", \"#dataset\").describe(\"The input labels to the MNIST dataset.\")\n", - " images_train_mnist.send(compute_nodes[i % n_workers], garbage_collect_data=False)\n", - " labels_train_mnist.send(compute_nodes[i % n_workers], garbage_collect_data=False)\n", - " print(\"Sending data to:\", compute_nodes[i % n_workers])" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "

Disconnect nodes

" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "for i in range(len(compute_nodes)):\n", - " compute_nodes[i].close()" - ] - } - ], - "metadata": { - "kernelspec": { - "display_name": "py37gpupc", - "language": "python", - "name": "py37gpupc" - }, - "language_info": { - "codemirror_mode": { - "name": "ipython", - "version": 3 - }, - "file_extension": ".py", - "mimetype": "text/x-python", - "name": "python", - "nbconvert_exporter": "python", - "pygments_lexer": "ipython3", - "version": "3.7.4" - } - }, - "nbformat": 4, - "nbformat_minor": 2 -} diff --git a/examples/experimental/mnist_federated_example/Fed.Learning MNIST [ Part-2 ] - Train a Model.ipynb b/examples/experimental/mnist_federated_example/Fed.Learning MNIST [ Part-2 ] - Train a Model.ipynb deleted file mode 100755 index c10910ead..000000000 --- a/examples/experimental/mnist_federated_example/Fed.Learning MNIST [ Part-2 ] - Train a Model.ipynb +++ /dev/null @@ -1,241 +0,0 @@ -{ - "cells": [ - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "

Perform Federated Learning at Grid Platform

\n", - "In this notebook, we will train a model using federated approach.\n", - "\n", - "**NOTE:** At the time of running this notebook, we were running the grid components in background mode. \n", - "\n", - "**NOTE:**\n", - "Components:\n", - " - Grid Gateway(http://localhost:8080)\n", - " - Grid Node Bob (http://localhost:3000)\n", - " - Grid Node Alice (http://localhost:3001)\n", - " - Grid Node Bill (http://localhost:3002)\n", - "\n", - "This notebook was made based on Part 10: Federated Learning with Encrypted Gradient Aggregation tutorial" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "

Import dependencies

" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "scrolled": true - }, - "outputs": [], - "source": [ - "import grid as gr\n", - "import syft as sy\n", - "import torch as th\n", - "import torch.nn as nn\n", - "import torch.optim as optim\n", - "import torch.nn.functional as F" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "

Define Model

" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "hook = sy.TorchHook(th)\n", - "class Net(nn.Module):\n", - " def __init__(self):\n", - " super(Net, self).__init__()\n", - " self.conv1 = nn.Conv2d(1, 20, 5, 1)\n", - " self.conv2 = nn.Conv2d(20, 50, 5, 1)\n", - " self.fc1 = nn.Linear(4*4*50, 500)\n", - " self.fc2 = nn.Linear(500, 10)\n", - "\n", - " def forward(self, x):\n", - " x = F.relu(self.conv1(x))\n", - " x = F.max_pool2d(x, 2, 2)\n", - " x = F.relu(self.conv2(x))\n", - " x = F.max_pool2d(x, 2, 2)\n", - " x = x.view(-1, 4*4*50)\n", - " x = F.relu(self.fc1(x))\n", - " x = self.fc2(x)\n", - " return F.log_softmax(x, dim=1)\n", - "\n", - "\n", - "device = th.device(\"cuda:0\" if th.cuda.is_available() else \"cpu\")\n", - "\n", - "if(th.cuda.is_available()):\n", - " th.set_default_tensor_type(th.cuda.FloatTensor)\n", - " \n", - "model = Net()\n", - "model.to(device)\n", - "optimizer = optim.SGD(model.parameters(), lr=0.01)\n", - "criterion = nn.CrossEntropyLoss()" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "

Connect to Grid Network

" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "GRID_ADDRESS = 'localhost'\n", - "GRID_PORT = '5000'\n", - "\n", - "my_grid = gr.GridNetwork(\"http://\" + GRID_ADDRESS + \":\" + GRID_PORT)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "

Search a dataset

\n", - "Here, we will use the gateway to look for which grid nodes have the data with the following tags." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "data = my_grid.search(\"#X\", \"#mnist\", \"#dataset\")\n", - "target = my_grid.search(\"#Y\", \"#mnist\", \"#dataset\")" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "scrolled": true - }, - "outputs": [], - "source": [ - "data" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "

Perform Train

\n", - "The code below will train the previously defined model with the data belonging to each grid node." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "def epoch_total_size(data):\n", - " total = 0\n", - " for i in range(len(data)):\n", - " for j in range(len(data[i])):\n", - " total += data[i][j].shape[0]\n", - " \n", - " return total" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "pixiedust": { - "displayParams": {} - }, - "scrolled": true - }, - "outputs": [], - "source": [ - "N_EPOCS = 3\n", - "SAVE_MODEL = True\n", - "SAVE_MODEL_PATH = './models'\n", - "\n", - "def train(epoch):\n", - " model.train()\n", - " epoch_total = epoch_total_size(data)\n", - " current_epoch_size = 0\n", - " for i in range(len(data)):\n", - " for j in range(len(data[i])):\n", - " current_epoch_size += len(data[i][j])\n", - " worker = data[i][j].location\n", - " model.send(worker)\n", - " optimizer.zero_grad()\n", - " pred = model(data[i][j])\n", - " loss = criterion(pred, target[i][j])\n", - " loss.backward()\n", - " optimizer.step()\n", - " model.get()\n", - " loss = loss.get()\n", - " print('Train Epoch: {} | With {} data |: [{}/{} ({:.0f}%)]\\tLoss: {:.6f}'.format(\n", - " epoch, worker.id, current_epoch_size, epoch_total,\n", - " 100. * current_epoch_size / epoch_total, loss.item()))\n", - " \n", - "for epoch in range(N_EPOCS):\n", - " train(epoch)\n", - "\n", - "if(SAVE_MODEL):\n", - " print(\"Saving model\")\n", - " th.save(model.state_dict(), SAVE_MODEL_PATH + \"/fedmodel_mnist.pt\")\n" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "

Disconnect Grid Nodes

" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "my_grid.disconnect_nodes()" - ] - } - ], - "metadata": { - "kernelspec": { - "display_name": "py37gpupc", - "language": "python", - "name": "py37gpupc" - }, - "language_info": { - "codemirror_mode": { - "name": "ipython", - "version": 3 - }, - "file_extension": ".py", - "mimetype": "text/x-python", - "name": "python", - "nbconvert_exporter": "python", - "pygments_lexer": "ipython3", - "version": "3.7.4" - } - }, - "nbformat": 4, - "nbformat_minor": 2 -} diff --git a/examples/experimental/mnist_federated_example/README.md b/examples/experimental/mnist_federated_example/README.md deleted file mode 100755 index 238fef7fa..000000000 --- a/examples/experimental/mnist_federated_example/README.md +++ /dev/null @@ -1,14 +0,0 @@ -# Federated Learning MNIST - PyGrid Example - - -## About this example - -This example contains the implementation of the Federated Learning technique using PyGrid and MNIST dataset. - -For this example, we use the Gateway and two Grid Nodes. - -If you do not change, MNIST data will be saved in the data folder and trained models will be saved in the models folder. - -## How to run - -For this example, you simply install the dependencies required to run the Gateway and the Grid Node. By default, the example will assume that there is a gateway running at localhost:5000 and two grid nodes running at localhost:3000 and localhost:3001. You can use more grid nodes as long as you change the code contained in the examples. \ No newline at end of file diff --git a/examples/experimental/mnist_federated_example/dataset/README.md b/examples/experimental/mnist_federated_example/dataset/README.md deleted file mode 100644 index 96687798d..000000000 --- a/examples/experimental/mnist_federated_example/dataset/README.md +++ /dev/null @@ -1,3 +0,0 @@ -# Dataset Folder - -This folder will save all MNIST data for the Federated Learning example. \ No newline at end of file diff --git a/examples/experimental/mnist_federated_example/models/README.md b/examples/experimental/mnist_federated_example/models/README.md deleted file mode 100644 index c2f0902c7..000000000 --- a/examples/experimental/mnist_federated_example/models/README.md +++ /dev/null @@ -1,3 +0,0 @@ -# Models Folder - -This folder will save all MNIST trained models in the Federated Learning example. \ No newline at end of file diff --git a/examples/tutorials/advanced/Federated_SMS_Spam_prediction/Federated_SMS_Spam_prediction [Part 1] - Populate a Grid Network (Dataset).ipynb b/examples/tutorials/advanced/Federated_SMS_Spam_prediction/Federated_SMS_Spam_prediction [Part 1] - Populate a Grid Network (Dataset).ipynb deleted file mode 100644 index 507d19a26..000000000 --- a/examples/tutorials/advanced/Federated_SMS_Spam_prediction/Federated_SMS_Spam_prediction [Part 1] - Populate a Grid Network (Dataset).ipynb +++ /dev/null @@ -1,354 +0,0 @@ -{ - "cells": [ - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "# Federated Learning - SMS spam prediction with a GRU model" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "**NOTE**: At the time of running this notebook, we were running the grid components in background mode.\n", - "\n", - "**NOTE**: Components:\n", - "\n", - "* Grid Gateway (http://localhost:8080)\n", - "* Grid Node Bob (http://localhost:3000)\n", - "* Grid Node Anne (http://localhost:3001)\n", - "\n", - " \n", - "To **start the gateway**:\n", - "* ```cd gateway```\n", - "* ```python gateway.py --start_local_db --port=8080```\n", - "\n", - "\n", - "To **start one grid node**:\n", - "\n", - "* ```cd app/websocket/```\n", - "\n", - "* ```python websocket_app.py --start_local_db --id=anne --port=3001 --gateway_url=http://localhost:8080```\n", - "\n", - "This notebook was made based on [Federated SMS Spam prediction](https://github.com/OpenMined/PySyft/tree/master/examples/tutorials/advanced/Federated%20SMS%20Spam%20prediction).\n", - "\n", - "Authors:\n", - "* André Macedo Farias: Github: [@andrelmfarias](https://github.com/andrelmfarias) | Twitter: [@andrelmfarias](https://twitter.com/andrelmfarias)\n", - "* George Muraru: Github [@gmuraru](https://github/com/gmuraru) | Twitter: [@georgemuraru](https://twitter.com/georgemuraru) | Facebook: [@George Cristian Muraru](https://www.facebook.com/georgecmuraru)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Useful imports" - ] - }, - { - "cell_type": "code", - "execution_count": 109, - "metadata": { - "ExecuteTime": { - "end_time": "2019-06-14T22:55:56.381002Z", - "start_time": "2019-06-14T22:55:52.562283Z" - } - }, - "outputs": [], - "source": [ - "import numpy as np\n", - "\n", - "import torch\n", - "\n", - "import syft as sy\n", - "import grid as gr" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "

Setup config

\n", - "Init hook, connect with grid nodes, etc..." - ] - }, - { - "cell_type": "code", - "execution_count": 110, - "metadata": {}, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "WARNING:root:Torch was already hooked... skipping hooking process\n" - ] - } - ], - "source": [ - "hook = sy.TorchHook(torch)\n", - "\n", - "# Connect directly to grid nodes\n", - "nodes = [\"ws://localhost:3000/\",\n", - " \"ws://localhost:3001/\"]\n", - "\n", - "compute_nodes = []\n", - "for node in nodes:\n", - " compute_nodes.append(gr.WebsocketGridClient(hook, node))" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "# Load Dataset" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## 1) Download (if not present) and preprocess dataset" - ] - }, - { - "cell_type": "code", - "execution_count": 111, - "metadata": { - "scrolled": true - }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Not downloading the dataset because it was already downloaded\n" - ] - } - ], - "source": [ - "import os\n", - "import urllib.request\n", - "import pathlib\n", - "from zipfile import ZipFile\n", - "\n", - "URL = \"https://archive.ics.uci.edu/ml/machine-learning-databases/00228/smsspamcollection.zip\"\n", - "DATASET_NAME = \"smsspamcollection\"\n", - "\n", - "def dataset_exists():\n", - " return os.path.isfile('./data/inputs.npy') and \\\n", - " os.path.isfile('./data/labels.npy')\n", - " \n", - "if not dataset_exists():\n", - " #If the dataset does not already exist, let's download the dataset directly from the URL where it is hosted\n", - " print('Downloading the dataset with urllib2 to the current directory...')\n", - " pathlib.Path(\"data\").mkdir(exist_ok=True)\n", - " urllib.request.urlretrieve(URL, './data/data.zip')\n", - " print(\"The dataset was successfully downloaded\")\n", - " print(\"Unzipping the dataset...\")\n", - " with ZipFile('./data/data.zip', 'r') as zipObj:\n", - " # Extract all the contents of the zip file in current directory\n", - " zipObj.extractall(\"./data\")\n", - " print(\"Dataset successfully unzipped\")\n", - " \n", - " from preprocess import preprocess_spam\n", - "\n", - " preprocess_spam()\n", - "else:\n", - " print(\"Not downloading the dataset because it was already downloaded\")\n", - " \n" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## 2) Loading data" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "As we are most interested in the usage of PySyft and Federated Learning, I will skip the text-preprocessing part of the project. If you are interested in how I performed the preprocessing of the raw dataset you can take a look on the script [preprocess.py](https://github.com/OpenMined/PyGrid/tree/master/examples/data/SMS-spam/preprocess.py).\n", - "\n", - "Each data point of the `inputs.npy` dataset correspond to an array of 30 tokens obtained form each message (padded at left or truncated at right)\n", - "\n", - "The `label.npy` dataset has the following unique values: `1` for `spam` and `0` for `non-spam`" - ] - }, - { - "cell_type": "code", - "execution_count": 112, - "metadata": { - "ExecuteTime": { - "end_time": "2019-06-14T22:59:06.345073Z", - "start_time": "2019-06-14T22:59:06.322378Z" - } - }, - "outputs": [], - "source": [ - "inputs = np.load('./data/inputs.npy')\n", - "labels = np.load('./data/labels.npy')" - ] - }, - { - "cell_type": "code", - "execution_count": 113, - "metadata": {}, - "outputs": [], - "source": [ - "datasets_spam = torch.split(torch.tensor(inputs), int(len(inputs) / len(compute_nodes)), dim=0 ) #tuple of chunks (dataset / number of nodes)\n", - "labels_spam = torch.split(torch.tensor(labels), int(len(labels) / len(compute_nodes)), dim=0 ) #tuple of chunks (labels / number of nodes)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "

3) Tagging tensors

\n", - "The code below will add a tag (of your choice) to the data that will be sent to grid nodes. This tag is important as the gateway will need it to retrieve this data later." - ] - }, - { - "cell_type": "code", - "execution_count": 114, - "metadata": {}, - "outputs": [], - "source": [ - "tag_img = []\n", - "tag_label = []\n", - "\n", - "\n", - "for i in range(len(compute_nodes)):\n", - " tag_img.append(datasets_spam[i].tag(\"#X\", \"#spam\", \"#dataset\").describe(\"The input datapoints to the SPAM dataset.\"))\n", - " tag_label.append(labels_spam[i].tag(\"#Y\", \"#spam\", \"#dataset\").describe(\"The input labels to the SPAM dataset.\"))" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "

4) Sending our tensors to grid nodes

" - ] - }, - { - "cell_type": "code", - "execution_count": 115, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "X tensor pointers: (Wrapper)>[PointerTensor | me:57842565258 -> bob:81837175413]\n", - "\tTags: #spam #dataset #X \n", - "\tShape: torch.Size([2786, 30])\n", - "\tDescription: The input datapoints to the SPAM dataset.... (Wrapper)>[PointerTensor | me:39027710159 -> bob:41763767662]\n", - "\tTags: #Y #dataset #spam \n", - "\tShape: torch.Size([2786])\n", - "\tDescription: The input labels to the SPAM dataset....\n", - "X tensor pointers: (Wrapper)>[PointerTensor | me:37603922321 -> anne:44834606227]\n", - "\tTags: #spam #dataset #X \n", - "\tShape: torch.Size([2786, 30])\n", - "\tDescription: The input datapoints to the SPAM dataset.... (Wrapper)>[PointerTensor | me:46472599434 -> anne:46155488760]\n", - "\tTags: #Y #dataset #spam \n", - "\tShape: torch.Size([2786])\n", - "\tDescription: The input labels to the SPAM dataset....\n" - ] - } - ], - "source": [ - "# NOTE: For some reason, there is strange behavior when trying to send within a loop.\n", - "# Ex : tag_x[i].send(compute_nodes[i])\n", - "# When resolved, this should be updated.\n", - "\n", - "for i in range(len(compute_nodes)):\n", - " shared_x = tag_img[i].send(compute_nodes[i], garbage_collect_data=False)\n", - " shared_y = tag_label[i].send(compute_nodes[i], garbage_collect_data=False)\n", - " print(\"X tensor pointers: \", shared_x, shared_y)\n" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Disconnect Nodes" - ] - }, - { - "cell_type": "code", - "execution_count": 116, - "metadata": {}, - "outputs": [], - "source": [ - "for i in range(len(compute_nodes)):\n", - " compute_nodes[i].close()" - ] - } - ], - "metadata": { - "hide_input": false, - "kernelspec": { - "display_name": "Python 3", - "language": "python", - "name": "python3" - }, - "language_info": { - "codemirror_mode": { - "name": "ipython", - "version": 3 - }, - "file_extension": ".py", - "mimetype": "text/x-python", - "name": "python", - "nbconvert_exporter": "python", - "pygments_lexer": "ipython3", - "version": "3.7.5" - }, - "toc": { - "base_numbering": 1, - "nav_menu": {}, - "number_sections": true, - "sideBar": true, - "skip_h1_title": true, - "title_cell": "Table of Contents", - "title_sidebar": "Contents", - "toc_cell": false, - "toc_position": {}, - "toc_section_display": true, - "toc_window_display": false - }, - "varInspector": { - "cols": { - "lenName": 16, - "lenType": 16, - "lenVar": 40 - }, - "kernels_config": { - "python": { - "delete_cmd_postfix": "", - "delete_cmd_prefix": "del ", - "library": "var_list.py", - "varRefreshCmd": "print(var_dic_list())" - }, - "r": { - "delete_cmd_postfix": ") ", - "delete_cmd_prefix": "rm(", - "library": "var_list.r", - "varRefreshCmd": "cat(var_dic_list()) " - } - }, - "types_to_exclude": [ - "module", - "function", - "builtin_function_or_method", - "instance", - "_Feature" - ], - "window_display": false - } - }, - "nbformat": 4, - "nbformat_minor": 2 -} diff --git a/examples/tutorials/advanced/Federated_SMS_Spam_prediction/Federated_SMS_Spam_prediction [Part 2] - Train a Model.ipynb b/examples/tutorials/advanced/Federated_SMS_Spam_prediction/Federated_SMS_Spam_prediction [Part 2] - Train a Model.ipynb deleted file mode 100644 index 24b2f5fdd..000000000 --- a/examples/tutorials/advanced/Federated_SMS_Spam_prediction/Federated_SMS_Spam_prediction [Part 2] - Train a Model.ipynb +++ /dev/null @@ -1,373 +0,0 @@ -{ - "cells": [ - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "# Federated Learning - SMS spam prediction with a GRU model" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "In this notebook, we will train a model using federated approach.\n", - "\n", - "**NOTE:** At the time of running this notebook, we were running the grid components in background mode. \n", - "\n", - "**NOTE:**\n", - "Components:\n", - " - Grid Gateway(http://localhost:8080)\n", - " - Grid Node Bob (http://localhost:3000)\n", - " - Grid Node Anne (http://localhost:3001)\n", - " \n", - "To **start the gateway**:\n", - "* ```cd gateway```\n", - "* ```python gateway.py --start_local_db --port=8080```\n", - "\n", - "To **start one grid node**:\n", - "\n", - "* ```cd app/websocket/```\n", - "\n", - "* ```python websocket_app.py --start_local_db --id=anne --port=3001 --gateway_url=http://localhost:8080```\n", - " \n", - "This notebook was made based on [Federated SMS Spam prediction](https://github.com/OpenMined/PySyft/tree/master/examples/tutorials/advanced/Federated%20SMS%20Spam%20prediction).\n", - "\n", - "Authors:\n", - "* André Macedo Farias: Github: [@andrelmfarias](https://github.com/andrelmfarias) | Twitter: [@andrelmfarias](https://twitter.com/andrelmfarias)\n", - "* George Muraru: Github [@gmuraru](https://github.com/gmuraru) | Twitter: [@georgemuraru](https://twitter.com/georgemuraru) | Facebook: [@George Cristian Muraru](https://www.facebook.com/georgecmuraru)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Useful imports" - ] - }, - { - "cell_type": "code", - "execution_count": 408, - "metadata": { - "ExecuteTime": { - "end_time": "2019-06-14T22:55:56.381002Z", - "start_time": "2019-06-14T22:55:52.562283Z" - } - }, - "outputs": [], - "source": [ - "import numpy as np\n", - "\n", - "import syft as sy\n", - "import grid as gr\n", - "\n", - "import torch as th\n", - "from torch import optim\n", - "\n", - "import warnings\n", - "\n", - "warnings.filterwarnings(\"ignore\")" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Connecting to Grid Network" - ] - }, - { - "cell_type": "code", - "execution_count": 409, - "metadata": {}, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "WARNING:root:Torch was already hooked... skipping hooking process\n" - ] - } - ], - "source": [ - "hook = sy.TorchHook(th)\n", - "\n", - "my_grid = gr.GridNetwork(\"http://localhost:8080\")" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Seach a dataset" - ] - }, - { - "cell_type": "code", - "execution_count": 410, - "metadata": {}, - "outputs": [], - "source": [ - "data = my_grid.search(\"#X\", \"#spam\", \"#dataset\")\n", - "target = my_grid.search(\"#Y\", \"#spam\", \"#dataset\")" - ] - }, - { - "cell_type": "code", - "execution_count": 411, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "[[(Wrapper)>[PointerTensor | me:53716591731 -> bob:81837175413]],\n", - " [(Wrapper)>[PointerTensor | me:70032216725 -> anne:44834606227]]]" - ] - }, - "execution_count": 411, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "data" - ] - }, - { - "cell_type": "code", - "execution_count": 412, - "metadata": { - "scrolled": true - }, - "outputs": [ - { - "data": { - "text/plain": [ - "[[(Wrapper)>[PointerTensor | me:70943240410 -> bob:41763767662]],\n", - " [(Wrapper)>[PointerTensor | me:20617297975 -> anne:46155488760]]]" - ] - }, - "execution_count": 412, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "target" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Load the model" - ] - }, - { - "cell_type": "code", - "execution_count": 413, - "metadata": { - "ExecuteTime": { - "end_time": "2019-06-03T19:33:42.613017Z", - "start_time": "2019-06-03T19:33:42.598004Z" - } - }, - "outputs": [], - "source": [ - "from handcrafted_GRU import GRU" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Parameters" - ] - }, - { - "cell_type": "code", - "execution_count": 414, - "metadata": {}, - "outputs": [], - "source": [ - "VOCAB_SIZE = 0\n", - "for data_comp in data:\n", - " VOCAB_SIZE = max(VOCAB_SIZE, int(data_comp[0].max().get()))\n", - " \n", - "VOCAB_SIZE += 1\n", - "HIDDEN_DIM = 10\n", - "EMBEDDING_DIM = 50\n", - "BATCH_SIZE = 128\n", - "CLIP = 5 # gradient clipping - to avoid gradient explosion (frequent in RNNs)\n", - "DROPOUT = 0.2\n", - "EPOCHS = 15\n", - "LR = 0.1" - ] - }, - { - "cell_type": "code", - "execution_count": 415, - "metadata": { - "ExecuteTime": { - "end_time": "2019-06-03T19:33:42.638046Z", - "start_time": "2019-06-03T19:33:42.617601Z" - } - }, - "outputs": [], - "source": [ - "# Initiating the model\n", - "model = GRU(vocab_size=VOCAB_SIZE, hidden_dim=HIDDEN_DIM, embedding_dim=EMBEDDING_DIM, dropout=DROPOUT)\n", - "\n", - "# And the optimizer\n", - "optimizer = optim.SGD(model.parameters(), lr=LR)\n", - "\n", - "# And the loss\n", - "criterion = nn.BCELoss()" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Perform train" - ] - }, - { - "cell_type": "code", - "execution_count": 416, - "metadata": { - "ExecuteTime": { - "end_time": "2019-06-03T20:00:23.084933Z", - "start_time": "2019-06-03T20:00:23.078688Z" - } - }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Train Epoch: 0 [0/5572 (0%)]\tLoss: 14.413047\n", - "Train Epoch: 0 [2786/5572 (50%)]\tLoss: 10.590258\n", - "Train Epoch: 1 [0/5572 (0%)]\tLoss: 9.518043\n", - "Train Epoch: 1 [2786/5572 (50%)]\tLoss: 9.040479\n", - "Train Epoch: 2 [0/5572 (0%)]\tLoss: 8.841945\n", - "Train Epoch: 2 [2786/5572 (50%)]\tLoss: 8.660154\n", - "Train Epoch: 3 [0/5572 (0%)]\tLoss: 8.662314\n", - "Train Epoch: 3 [2786/5572 (50%)]\tLoss: 8.526029\n", - "Train Epoch: 4 [0/5572 (0%)]\tLoss: 8.523282\n", - "Train Epoch: 4 [2786/5572 (50%)]\tLoss: 8.358135\n", - "Train Epoch: 5 [0/5572 (0%)]\tLoss: 8.402678\n", - "Train Epoch: 5 [2786/5572 (50%)]\tLoss: 8.199387\n", - "Train Epoch: 6 [0/5572 (0%)]\tLoss: 8.255481\n", - "Train Epoch: 6 [2786/5572 (50%)]\tLoss: 8.066721\n", - "Train Epoch: 7 [0/5572 (0%)]\tLoss: 8.121440\n", - "Train Epoch: 7 [2786/5572 (50%)]\tLoss: 7.857515\n", - "Train Epoch: 8 [0/5572 (0%)]\tLoss: 7.965773\n", - "Train Epoch: 8 [2786/5572 (50%)]\tLoss: 7.629926\n", - "Train Epoch: 9 [0/5572 (0%)]\tLoss: 7.752881\n", - "Train Epoch: 9 [2786/5572 (50%)]\tLoss: 7.477828\n", - "Train Epoch: 10 [0/5572 (0%)]\tLoss: 7.517532\n", - "Train Epoch: 10 [2786/5572 (50%)]\tLoss: 7.405692\n", - "Train Epoch: 11 [0/5572 (0%)]\tLoss: 7.388840\n", - "Train Epoch: 11 [2786/5572 (50%)]\tLoss: 7.096998\n", - "Train Epoch: 12 [0/5572 (0%)]\tLoss: 7.160784\n", - "Train Epoch: 12 [2786/5572 (50%)]\tLoss: 6.764374\n", - "Train Epoch: 13 [0/5572 (0%)]\tLoss: 6.968186\n", - "Train Epoch: 13 [2786/5572 (50%)]\tLoss: 6.587626\n", - "Train Epoch: 14 [0/5572 (0%)]\tLoss: 6.689532\n", - "Train Epoch: 14 [2786/5572 (50%)]\tLoss: 6.453083\n" - ] - } - ], - "source": [ - "import math # Needed for separating into batches\n", - "\n", - "def train(epoch):\n", - " dataset_size = sum([len(data[i][0]) for i in range(len(data))])\n", - " model.train()\n", - " \n", - " for i in range(len(data)):\n", - " loss_cum = 0\n", - " nr_batches = math.ceil(len(data[i][0]) / BATCH_SIZE)\n", - " for batch_idx in range(nr_batches):\n", - " # Extract the batch for training and target\n", - " data_batch = data[i][0][BATCH_SIZE * batch_idx : BATCH_SIZE * (batch_idx + 1), :]\n", - " target_batch = target[i][0][BATCH_SIZE * batch_idx : BATCH_SIZE * (batch_idx + 1)]\n", - " \n", - " # Send the model to the worker\n", - " worker = data_batch.location\n", - " model.send(worker)\n", - " h = th.Tensor(np.zeros((data_batch.shape[0], HIDDEN_DIM))).send(worker)\n", - " \n", - " optimizer.zero_grad()\n", - " pred, _ = model(data_batch, h)\n", - " loss = criterion(pred.squeeze(), target_batch.float())\n", - " loss.backward()\n", - " optimizer.step()\n", - " model.get()\n", - " \n", - " # Cumulate the loss\n", - " loss_cum += loss.get().item()\n", - " \n", - " print('Train Epoch: {} [{}/{} ({:.0f}%)]\\tLoss: {:.6f}'.format(\n", - " epoch, i * data[i][0].shape[0], dataset_size,\n", - " 100. * (i * data[i][0].shape[0]) / dataset_size, loss_cum))\n", - "\n", - "for epoch in range(EPOCHS):\n", - " train(epoch)" - ] - } - ], - "metadata": { - "hide_input": false, - "kernelspec": { - "display_name": "Python 3", - "language": "python", - "name": "python3" - }, - "toc": { - "base_numbering": 1, - "nav_menu": {}, - "number_sections": true, - "sideBar": true, - "skip_h1_title": true, - "title_cell": "Table of Contents", - "title_sidebar": "Contents", - "toc_cell": false, - "toc_position": {}, - "toc_section_display": true, - "toc_window_display": false - }, - "varInspector": { - "cols": { - "lenName": 16, - "lenType": 16, - "lenVar": 40 - }, - "kernels_config": { - "python": { - "delete_cmd_postfix": "", - "delete_cmd_prefix": "del ", - "library": "var_list.py", - "varRefreshCmd": "print(var_dic_list())" - }, - "r": { - "delete_cmd_postfix": ") ", - "delete_cmd_prefix": "rm(", - "library": "var_list.r", - "varRefreshCmd": "cat(var_dic_list()) " - } - }, - "types_to_exclude": [ - "module", - "function", - "builtin_function_or_method", - "instance", - "_Feature" - ], - "window_display": false - } - }, - "nbformat": 4, - "nbformat_minor": 2 -} diff --git a/examples/tutorials/advanced/Federated_SMS_Spam_prediction/handcrafted_GRU.py b/examples/tutorials/advanced/Federated_SMS_Spam_prediction/handcrafted_GRU.py deleted file mode 100644 index 47797aeae..000000000 --- a/examples/tutorials/advanced/Federated_SMS_Spam_prediction/handcrafted_GRU.py +++ /dev/null @@ -1,103 +0,0 @@ -import numpy as np - -import torch -from torch import nn -import torch.nn.functional as F - - -class GRUCell(nn.Module): - def __init__(self, input_size, hidden_size, bias=True): - super(GRUCell, self).__init__() - self.input_size = input_size - self.hidden_size = hidden_size - self.bias = bias - - # reset gate - self.fc_ir = nn.Linear(input_size, hidden_size, bias=bias) - self.fc_hr = nn.Linear(hidden_size, hidden_size, bias=bias) - - # update gate - self.fc_iz = nn.Linear(input_size, hidden_size, bias=bias) - self.fc_hz = nn.Linear(hidden_size, hidden_size, bias=bias) - - # new gate - self.fc_in = nn.Linear(input_size, hidden_size, bias=bias) - self.fc_hn = nn.Linear(hidden_size, hidden_size, bias=bias) - - self.init_parameters() - - def init_parameters(self): - std = 1.0 / np.sqrt(self.hidden_size) - for w in self.parameters(): - w.data.uniform_(-std, std) - - def forward(self, x, h): - - x = x.view(-1, x.shape[1]) - - i_r = self.fc_ir(x) - h_r = self.fc_hr(h) - i_z = self.fc_iz(x) - h_z = self.fc_hz(h) - i_n = self.fc_in(x) - h_n = self.fc_hn(h) - - resetgate = F.sigmoid(i_r + h_r) - inputgate = F.sigmoid(i_z + h_z) - newgate = F.tanh(i_n + (resetgate * h_n)) - - hy = newgate + inputgate * (h - newgate) - - return hy - - -class GRU(nn.Module): - def __init__( - self, - vocab_size, - output_size=1, - embedding_dim=50, - hidden_dim=10, - bias=True, - dropout=0.2, - ): - super(GRU, self).__init__() - - self.hidden_dim = hidden_dim - self.output_size = output_size - - # Dropout layer - self.dropout = nn.Dropout(p=dropout) - # Embedding layer - self.embedding = nn.Embedding(vocab_size, embedding_dim) - # GRU Cell - self.gru_cell = GRUCell(embedding_dim, hidden_dim) - # Fully-connected layer - self.fc = nn.Linear(hidden_dim, output_size) - # Sigmoid layer - self.sigmoid = nn.Sigmoid() - - def forward(self, x, h): - - batch_size = x.shape[0] - - # Deal with cases were the current batch_size is different from general batch_size - # It occurrs at the end of iteration with the Dataloaders - if h.shape[0] != batch_size: - h = h[:batch_size, :].contiguous() - - # Apply embedding - x = self.embedding(x) - - # GRU cells - for t in range(x.shape[1]): - h = self.gru_cell(x[:, t, :], h) - - # Output corresponds to the last hidden state - out = h.contiguous().view(-1, self.hidden_dim) - - # Dropout and fully-connected layers - out = self.dropout(out) - sig_out = self.sigmoid(self.fc(out)) - - return sig_out, h diff --git a/examples/tutorials/advanced/Federated_SMS_Spam_prediction/preprocess.py b/examples/tutorials/advanced/Federated_SMS_Spam_prediction/preprocess.py deleted file mode 100644 index ce3f543e3..000000000 --- a/examples/tutorials/advanced/Federated_SMS_Spam_prediction/preprocess.py +++ /dev/null @@ -1,45 +0,0 @@ -import numpy as np -import pandas as pd -import re - -# from nltk.corpus import stopwords - -STOPWORDS = set([]) # set(stopwords.words('english')) - - -def clean_text(text): - text = text.lower() - text = re.sub(r"[^a-z\s]", "", text) - text = " ".join([word for word in text.split() if word not in STOPWORDS]) - return text - - -def tokenize(text, word_to_idx): - tokens = [] - for word in text.split(): - tokens.append(word_to_idx[word]) - return tokens - - -def pad_and_truncate(messages, max_length=30): - features = np.zeros((len(messages), max_length), dtype=int) - for i, sms in enumerate(messages): - if len(sms): - features[i, -len(sms) :] = sms[:max_length] - return features - - -def preprocess_spam(): - data = pd.read_csv( - "./data/SMSSpamCollection", sep="\t", header=None, names=["label", "sms"] - ) - data.sms = data.sms.apply(clean_text) - words = set((" ".join(data.sms)).split()) - word_to_idx = {word: i for i, word in enumerate(words, 1)} - tokens = data.sms.apply(lambda x: tokenize(x, word_to_idx)) - inputs = pad_and_truncate(tokens) - - labels = np.array((data.label == "spam").astype(int)) - - np.save("./data/labels.npy", labels) - np.save("./data/inputs.npy", inputs)