{ "cells": [ { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "from datasets.Femnist import Femnist\n", "from graphs import SmallWorld\n", "from collections import defaultdict\n", "import os\n", "import json\n", "import numpy as np\n" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "a = FEMNIST\n", "a" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "b = SmallWorld(6, 2, 2, 1)" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "b.adj_list" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "for i in range(12):\n", " print(b.neighbors(i))" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "clients = []" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "num_samples = []\n", "data = defaultdict(lambda : None)" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "datadir = \"./leaf/data/femnist/data/train\"\n", "files = os.listdir(datadir)\n", "total_users=0\n", "users = set()" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "files = os.listdir(datadir)[0:1]" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "for f in files:\n", " file_path = os.path.join(datadir, f)\n", " print(file_path)\n", " with open(file_path, 'r') as inf:\n", " client_data = json.load(inf)\n", " current_users = len(client_data['users'])\n", " print(\"Current_Users: \", current_users)\n", " total_users += current_users\n", " users.update(client_data['users'])\n", "\n", "print(\"total_users: \", total_users)\n", "print(\"total_users: \", len(users))\n", "print(client_data['user_data'].keys())\n", "print(np.array(client_data['user_data']['f3408_47']['x']).shape)\n", "print(np.array(client_data['user_data']['f3408_47']['y']).shape)\n", "print(np.array(client_data['user_data']['f3327_11']['x']).shape)\n", "print(np.array(client_data['user_data']['f3327_11']['y']).shape)\n", "print(np.unique(np.array(client_data['user_data']['f3327_11']['y'])))" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "file = 'run.py'\n", "with open(file, 'r') as inf:\n", " print(inf.readline().strip())\n", " print(inf.readlines())" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "def f(l):\n", " l[2] = 'c'\n", "\n", "a = ['a', 'a', 'a']\n", "print(a)\n", "f(a)\n", "print(a)" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "l = ['a', 'b', 'c']\n", "print(l[:-1])" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "from localconfig import LocalConfig\n", "\n", "def read_ini(file_path):\n", " config = LocalConfig(file_path)\n", " for section in config:\n", " print(\"Section: \", section)\n", " for key, value in config.items(section):\n", " print((key, value))\n", " print(dict(config.items('DATASET')))\n", " return config\n", " \n", "config = read_ini(\"config.ini\")\n", "for section in config:\n", " print(section)\n", "#d = dict(config.sections())" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "def func(a = 1, b = 2, c = 3):\n", " print(a + b + c)\n", "\n", "l = [3, 5, 7]\n", "\n", "func(*l)" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "from torch import multiprocessing as mp\n", "\n", "mp.spawn(fn = func, nprocs = 2, args = [], kwargs = {'a': 4, 'b': 5, 'c': 6})" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "l = '[0.4, 0.2, 0.3, 0.1]'\n", "type(eval(l))\n", "\n" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "from decentralizepy.datasets.Femnist import Femnist\n", "f1 = Femnist(0, 1, 'leaf/data/femnist/data/train')\n", "ts = f1.get_trainset(1)\n", "for data, target in ts:\n", " print(data)\n", " break" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "from decentralizepy.datasets.Femnist import Femnist\n", "from decentralizepy.graphs.SmallWorld import SmallWorld\n", "from decentralizepy.mappings.Linear import Linear\n", "\n", "f = Femnist(2, 'leaf/data/femnist/data/train', sizes=[0.6, 0.4])\n", "g = SmallWorld(4, 1, 0.5)\n", "l = Linear(2, 2)" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "from decentralizepy.node.Node import Node\n", "from torch import multiprocessing as mp\n", "import logging\n", "n1 = Node(0, l, g, f, \"./results\", logging.DEBUG)\n", "n2 = Node(1, l, g, f, \"./results\", logging.DEBUG)\n", "# mp.spawn(fn = Node, nprocs = 2, args=[l,g,f])" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "from testing import f" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "from torch import multiprocessing as mp\n", "import torch\n", "m1 = torch.nn.Linear(1,1)\n", "o1 = torch.optim.SGD(m1.parameters(), 0.6)\n", "print(m1)\n", "\n", "\n", "mp.spawn(fn = f, nprocs = 2, args=[m1, o1])\n", "\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "o1.param_groups" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "with torch.no_grad():\n", " o1.param_groups[0][\"params\"][0].copy_(torch.zeros(1,))" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "o1.param_groups" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "m1.state_dict()" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "import torch\n", "loss = getattr(torch.nn.functional, 'nll_loss')" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "loss" ] }, { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Section: GRAPH\n", "('package', 'decentralizepy.graphs.SmallWorld')\n", "('graph_class', 'SmallWorld')\n", "Section: DATASET\n", "('dataset_package', 'decentralizepy.datasets.Femnist')\n", "('dataset_class', 'Femnist')\n", "('model_class', 'CNN')\n", "('n_procs', 36)\n", "('train_dir', 'leaf/data/femnist/per_user_data/train')\n", "('test_dir', 'leaf/data/femnist/data/test')\n", "('sizes', '')\n", "Section: OPTIMIZER_PARAMS\n", "('optimizer_package', 'torch.optim')\n", "('optimizer_class', 'Adam')\n", "('lr', 0.01)\n", "Section: TRAIN_PARAMS\n", "('training_package', 'decentralizepy.training.Training')\n", "('training_class', 'Training')\n", "('epochs_per_round', 1)\n", "('batch_size', 1024)\n", "('shuffle', True)\n", "('loss_package', 'torch.nn')\n", "('loss_class', 'CrossEntropyLoss')\n", "Section: COMMUNICATION\n", "('comm_package', 'decentralizepy.communication.TCP')\n", "('comm_class', 'TCP')\n", "('addresses_filepath', 'ip_addr.json')\n", "Section: SHARING\n", "('sharing_package', 'decentralizepy.sharing.Sharing')\n", "('sharing_class', 'Sharing')\n", "{'dataset_package': 'decentralizepy.datasets.Femnist', 'dataset_class': 'Femnist', 'model_class': 'CNN', 'n_procs': 36, 'train_dir': 'leaf/data/femnist/per_user_data/train', 'test_dir': 'leaf/data/femnist/data/test', 'sizes': ''}\n" ] }, { "ename": "IndexError", "evalue": "list index out of range", "output_type": "error", "traceback": [ "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", "\u001b[0;31mIndexError\u001b[0m Traceback (most recent call last)", "\u001b[0;32m/tmp/ipykernel_2255475/3991202644.py\u001b[0m in \u001b[0;36m<module>\u001b[0;34m\u001b[0m\n\u001b[1;32m 27\u001b[0m \u001b[0;31m#f = Femnist(2, 'leaf/data/femnist/data/train', sizes=[0.6, 0.4])\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 28\u001b[0m \u001b[0mg\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mGraph\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---> 29\u001b[0;31m \u001b[0mg\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mread_graph_from_file\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m\"36_nodes.edges\"\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m\"edges\"\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[0ml\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mLinear\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;36m1\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;36m36\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;34m\u001b[0m\u001b[0m\n", "\u001b[0;32m~/Gitlab/decentralizepy/src/decentralizepy/graphs/Graph.py\u001b[0m in \u001b[0;36mread_graph_from_file\u001b[0;34m(self, file, type, force_connect)\u001b[0m\n\u001b[1;32m 70\u001b[0m \u001b[0;32mfor\u001b[0m \u001b[0mline\u001b[0m \u001b[0;32min\u001b[0m \u001b[0mlines\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 71\u001b[0m \u001b[0mx\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0my\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mmap\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mint\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mline\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mstrip\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0msplit\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---> 72\u001b[0;31m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m__insert_edge__\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mx\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0my\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 73\u001b[0m \u001b[0;32melif\u001b[0m \u001b[0mtype\u001b[0m \u001b[0;34m==\u001b[0m \u001b[0;34m\"adjacency\"\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 74\u001b[0m \u001b[0mnode_id\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0;36m0\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", "\u001b[0;32m~/Gitlab/decentralizepy/src/decentralizepy/graphs/Graph.py\u001b[0m in \u001b[0;36m__insert_edge__\u001b[0;34m(self, x, y)\u001b[0m\n\u001b[1;32m 39\u001b[0m \u001b[0mThe\u001b[0m \u001b[0mdestination\u001b[0m \u001b[0mvertex\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 40\u001b[0m \"\"\"\n\u001b[0;32m---> 41\u001b[0;31m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0madj_list\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0mx\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0madd\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0my\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 42\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0madj_list\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0my\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0madd\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mx\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 43\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n", "\u001b[0;31mIndexError\u001b[0m: list index out of range" ] } ], "source": [ "%matplotlib inline\n", "\n", "from decentralizepy.node.Node import Node\n", "from decentralizepy.graphs.SmallWorld import SmallWorld\n", "from decentralizepy.graphs.Graph import Graph\n", "from decentralizepy.mappings.Linear import Linear\n", "from torch import multiprocessing as mp\n", "import torch\n", "import logging\n", "\n", "from localconfig import LocalConfig\n", "\n", "def read_ini(file_path):\n", " config = LocalConfig(file_path)\n", " for section in config:\n", " print(\"Section: \", section)\n", " for key, value in config.items(section):\n", " print((key, value))\n", " print(dict(config.items('DATASET')))\n", " return config\n", " \n", "config = read_ini(\"config.ini\")\n", "my_config = dict()\n", "for section in config:\n", " my_config[section] = dict(config.items(section))\n", "\n", "#f = Femnist(2, 'leaf/data/femnist/data/train', sizes=[0.6, 0.4])\n", "g = Graph()\n", "g.read_graph_from_file(\"36_nodes.edges\", \"edges\")\n", "l = Linear(1, 36)\n", "\n", "#Node(0, 0, l, g, my_config, 20, \"results\", logging.DEBUG)\n", "\n", "mp.spawn(fn = Node, nprocs = g.n_procs, args=[0,l,g,my_config,20,\"results\",logging.INFO])\n", "\n", "# mp.spawn(fn = Node, args = [l, g, config, 10, \"results\", logging.DEBUG], nprocs=2)\n" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "from decentralizepy.mappings.Linear import Linear\n", "from testing import f\n", "from torch import multiprocessing as mp\n", "\n", "l = Linear(1, 2)\n", "mp.spawn(fn = f, nprocs = 2, args = [0, 2, \"ip_addr.json\", l])\n" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "from decentralizepy.datasets.Femnist import Femnist\n", "\n", "f = Femnist()\n", "\n", "f.file_per_user('leaf/data/femnist/data/train','leaf/data/femnist/per_user_data/train')\n" ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [], "source": [ "a = set()\n", "a.update([2, 3, 4, 5])" ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "{2, 3, 4, 5}" ] }, "execution_count": 3, "metadata": {}, "output_type": "execute_result" } ], "source": [ "a" ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "2 3 4 5\n" ] } ], "source": [ "print(*a)" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "from decentralizepy.graphs.SmallWorld import SmallWorld\n", "\n", "s = SmallWorld(36, 2, .5)" ] } ], "metadata": { "interpreter": { "hash": "996934296aa9d79be6c3d800a38d8fdb7dfa8fe7bb07df178f1397cde2cb8742" }, "kernelspec": { "display_name": "Python 3.9.7 64-bit ('tff': conda)", "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.9.7" }, "orig_nbformat": 4 }, "nbformat": 4, "nbformat_minor": 2 }