From 2ee342af11eb6b7ee05fab2cc8057835200ef830 Mon Sep 17 00:00:00 2001
From: Jeffrey Wigger <jeffrey.wigger@epfl.ch>
Date: Thu, 17 Feb 2022 15:10:46 +0100
Subject: [PATCH] removing the n_proc config option and the code that replaces
 it

---
 eval/epoch_configs/config_celeba.ini       |  1 -
 eval/epoch_configs/config_celeba_100.ini   |  1 -
 eval/epoch_configs/config_celeba_grow.ini  |  1 -
 eval/epoch_configs/config_femnist.ini      |  1 -
 eval/epoch_configs/config_femnist_100.ini  |  1 -
 eval/epoch_configs/config_femnist_grow.ini |  1 -
 eval/step_configs/config_celeba.ini        |  1 -
 eval/step_configs/config_celeba_100.ini    |  1 -
 eval/step_configs/config_celeba_grow.ini   |  1 -
 eval/step_configs/config_femnist.ini       |  1 -
 eval/step_configs/config_femnist_100.ini   |  1 -
 eval/step_configs/config_femnist_grow.ini  |  1 -
 src/decentralizepy/datasets/Celeba.py      | 16 +++++++---------
 src/decentralizepy/datasets/Dataset.py     | 19 +++++++++----------
 src/decentralizepy/datasets/Femnist.py     | 15 +++++++--------
 src/decentralizepy/mappings/Mapping.py     | 12 ++++++++++++
 src/decentralizepy/node/Node.py            |  2 --
 17 files changed, 35 insertions(+), 41 deletions(-)

diff --git a/eval/epoch_configs/config_celeba.ini b/eval/epoch_configs/config_celeba.ini
index 782de8a..0a6e715 100644
--- a/eval/epoch_configs/config_celeba.ini
+++ b/eval/epoch_configs/config_celeba.ini
@@ -2,7 +2,6 @@
 dataset_package = decentralizepy.datasets.Celeba
 dataset_class = Celeba
 model_class = CNN
-n_procs = 96
 images_dir = /home/risharma/leaf/data/celeba/data/raw/img_align_celeba
 train_dir = /home/risharma/leaf/data/celeba/per_user_data/train
 test_dir = /home/risharma/leaf/data/celeba/data/test
diff --git a/eval/epoch_configs/config_celeba_100.ini b/eval/epoch_configs/config_celeba_100.ini
index 3a8ea47..8fed4d6 100644
--- a/eval/epoch_configs/config_celeba_100.ini
+++ b/eval/epoch_configs/config_celeba_100.ini
@@ -2,7 +2,6 @@
 dataset_package = decentralizepy.datasets.Celeba
 dataset_class = Celeba
 model_class = CNN
-n_procs = 96
 images_dir = /home/risharma/leaf/data/celeba/data/raw/img_align_celeba
 train_dir = /home/risharma/leaf/data/celeba/per_user_data/train
 test_dir = /home/risharma/leaf/data/celeba/data/test
diff --git a/eval/epoch_configs/config_celeba_grow.ini b/eval/epoch_configs/config_celeba_grow.ini
index 8f0b718..9c2dfef 100644
--- a/eval/epoch_configs/config_celeba_grow.ini
+++ b/eval/epoch_configs/config_celeba_grow.ini
@@ -2,7 +2,6 @@
 dataset_package = decentralizepy.datasets.Celeba
 dataset_class = Celeba
 model_class = CNN
-n_procs = 96
 images_dir = /home/risharma/leaf/data/celeba/data/raw/img_align_celeba
 train_dir = /home/risharma/leaf/data/celeba/per_user_data/train
 test_dir = /home/risharma/leaf/data/celeba/data/test
diff --git a/eval/epoch_configs/config_femnist.ini b/eval/epoch_configs/config_femnist.ini
index b16bd9a..13569c1 100644
--- a/eval/epoch_configs/config_femnist.ini
+++ b/eval/epoch_configs/config_femnist.ini
@@ -2,7 +2,6 @@
 dataset_package = decentralizepy.datasets.Femnist
 dataset_class = Femnist
 model_class = CNN
-n_procs = 16
 train_dir = /home/risharma/leaf/data/femnist/per_user_data/train
 test_dir = /home/risharma/leaf/data/femnist/data/test
 ; python list of fractions below
diff --git a/eval/epoch_configs/config_femnist_100.ini b/eval/epoch_configs/config_femnist_100.ini
index 0f7dd02..4e05952 100644
--- a/eval/epoch_configs/config_femnist_100.ini
+++ b/eval/epoch_configs/config_femnist_100.ini
@@ -2,7 +2,6 @@
 dataset_package = decentralizepy.datasets.Femnist
 dataset_class = Femnist
 model_class = CNN
-n_procs = 16
 train_dir = /home/risharma/leaf/data/femnist/per_user_data/train
 test_dir = /home/risharma/leaf/data/femnist/data/test
 ; python list of fractions below
diff --git a/eval/epoch_configs/config_femnist_grow.ini b/eval/epoch_configs/config_femnist_grow.ini
index b240c84..75fb9d1 100644
--- a/eval/epoch_configs/config_femnist_grow.ini
+++ b/eval/epoch_configs/config_femnist_grow.ini
@@ -2,7 +2,6 @@
 dataset_package = decentralizepy.datasets.Femnist
 dataset_class = Femnist
 model_class = CNN
-n_procs = 16
 train_dir = /home/risharma/leaf/data/femnist/per_user_data/train
 test_dir = /home/risharma/leaf/data/femnist/data/test
 ; python list of fractions below
diff --git a/eval/step_configs/config_celeba.ini b/eval/step_configs/config_celeba.ini
index d58052e..5cadf01 100644
--- a/eval/step_configs/config_celeba.ini
+++ b/eval/step_configs/config_celeba.ini
@@ -2,7 +2,6 @@
 dataset_package = decentralizepy.datasets.Celeba
 dataset_class = Celeba
 model_class = CNN
-n_procs = 96
 images_dir = /home/risharma/leaf/data/celeba/data/raw/img_align_celeba
 train_dir = /home/risharma/leaf/data/celeba/per_user_data/train
 test_dir = /home/risharma/leaf/data/celeba/data/test
diff --git a/eval/step_configs/config_celeba_100.ini b/eval/step_configs/config_celeba_100.ini
index 2e351a4..70e14bb 100644
--- a/eval/step_configs/config_celeba_100.ini
+++ b/eval/step_configs/config_celeba_100.ini
@@ -2,7 +2,6 @@
 dataset_package = decentralizepy.datasets.Celeba
 dataset_class = Celeba
 model_class = CNN
-n_procs = 96
 images_dir = /home/risharma/leaf/data/celeba/data/raw/img_align_celeba
 train_dir = /home/risharma/leaf/data/celeba/per_user_data/train
 test_dir = /home/risharma/leaf/data/celeba/data/test
diff --git a/eval/step_configs/config_celeba_grow.ini b/eval/step_configs/config_celeba_grow.ini
index a9cd92c..be0812e 100644
--- a/eval/step_configs/config_celeba_grow.ini
+++ b/eval/step_configs/config_celeba_grow.ini
@@ -2,7 +2,6 @@
 dataset_package = decentralizepy.datasets.Celeba
 dataset_class = Celeba
 model_class = CNN
-n_procs = 96
 images_dir = /home/risharma/leaf/data/celeba/data/raw/img_align_celeba
 train_dir = /home/risharma/leaf/data/celeba/per_user_data/train
 test_dir = /home/risharma/leaf/data/celeba/data/test
diff --git a/eval/step_configs/config_femnist.ini b/eval/step_configs/config_femnist.ini
index 0bd4a55..43bb07d 100644
--- a/eval/step_configs/config_femnist.ini
+++ b/eval/step_configs/config_femnist.ini
@@ -2,7 +2,6 @@
 dataset_package = decentralizepy.datasets.Femnist
 dataset_class = Femnist
 model_class = CNN
-n_procs = 16
 train_dir = /home/risharma/leaf/data/femnist/per_user_data/train
 test_dir = /home/risharma/leaf/data/femnist/data/test
 ; python list of fractions below
diff --git a/eval/step_configs/config_femnist_100.ini b/eval/step_configs/config_femnist_100.ini
index becf623..4e3e9ba 100644
--- a/eval/step_configs/config_femnist_100.ini
+++ b/eval/step_configs/config_femnist_100.ini
@@ -2,7 +2,6 @@
 dataset_package = decentralizepy.datasets.Femnist
 dataset_class = Femnist
 model_class = CNN
-n_procs = 16
 train_dir = /home/risharma/leaf/data/femnist/per_user_data/train
 test_dir = /home/risharma/leaf/data/femnist/data/test
 ; python list of fractions below
diff --git a/eval/step_configs/config_femnist_grow.ini b/eval/step_configs/config_femnist_grow.ini
index 018cdc7..9f18ad9 100644
--- a/eval/step_configs/config_femnist_grow.ini
+++ b/eval/step_configs/config_femnist_grow.ini
@@ -2,7 +2,6 @@
 dataset_package = decentralizepy.datasets.Femnist
 dataset_class = Femnist
 model_class = CNN
-n_procs = 16
 train_dir = /home/risharma/leaf/data/femnist/per_user_data/train
 test_dir = /home/risharma/leaf/data/femnist/data/test
 ; python list of fractions below
diff --git a/src/decentralizepy/datasets/Celeba.py b/src/decentralizepy/datasets/Celeba.py
index 10b99cb..61a77c6 100644
--- a/src/decentralizepy/datasets/Celeba.py
+++ b/src/decentralizepy/datasets/Celeba.py
@@ -15,6 +15,7 @@ import decentralizepy.utils as utils
 from decentralizepy.datasets.Data import Data
 from decentralizepy.datasets.Dataset import Dataset
 from decentralizepy.datasets.Partitioner import DataPartitioner
+from decentralizepy.mappings.Mapping import Mapping
 from decentralizepy.models.Model import Model
 
 IMAGE_DIM = 84
@@ -185,10 +186,9 @@ class Celeba(Dataset):
 
     def __init__(
         self,
-        rank,
-        machine_id,
-        mapping,
-        n_procs="",
+        rank: int,
+        machine_id: int,
+        mapping: Mapping,
         train_dir="",
         test_dir="",
         images_dir="",
@@ -205,12 +205,11 @@ class Celeba(Dataset):
         machine_id : int
             Machine ID
         mapping : decentralizepy.mappings.Mapping
-            Mapping to conver rank, machine_id -> uid for data partitioning
-        n_procs : int, optional
-            The number of processes among which to divide the data. Default value is assigned 1
+            Mapping to convert rank, machine_id -> uid for data partitioning
+            It also provides the total number of global processes
         train_dir : str, optional
             Path to the training data files. Required to instantiate the training set
-            The training set is partitioned according to n_procs and sizes
+            The training set is partitioned according to the number of global processes and sizes
         test_dir : str. optional
             Path to the testing data files Required to instantiate the testing set
         sizes : list(int), optional
@@ -224,7 +223,6 @@ class Celeba(Dataset):
             rank,
             machine_id,
             mapping,
-            n_procs,
             train_dir,
             test_dir,
             sizes,
diff --git a/src/decentralizepy/datasets/Dataset.py b/src/decentralizepy/datasets/Dataset.py
index 28c36e5..5d91f52 100644
--- a/src/decentralizepy/datasets/Dataset.py
+++ b/src/decentralizepy/datasets/Dataset.py
@@ -1,5 +1,5 @@
 from decentralizepy import utils
-
+from decentralizepy.mappings.Mapping import Mapping
 
 class Dataset:
     """
@@ -10,10 +10,9 @@ class Dataset:
 
     def __init__(
         self,
-        rank,
-        machine_id,
-        mapping,
-        n_procs="",
+        rank: int,
+        machine_id: int,
+        mapping: Mapping,
         train_dir="",
         test_dir="",
         sizes="",
@@ -29,12 +28,11 @@ class Dataset:
         machine_id : int
             Machine ID
         mapping : decentralizepy.mappings.Mapping
-            Mapping to conver rank, machine_id -> uid for data partitioning
-        n_procs : int, optional
-            The number of processes among which to divide the data. Default value is assigned 1
+            Mapping to convert rank, machine_id -> uid for data partitioning
+            It also provides the total number of global processes
         train_dir : str, optional
             Path to the training data files. Required to instantiate the training set
-            The training set is partitioned according to n_procs and sizes
+            The training set is partitioned according to the number of global processes and sizes
         test_dir : str. optional
             Path to the testing data files Required to instantiate the testing set
         sizes : list(int), optional
@@ -47,7 +45,8 @@ class Dataset:
         self.rank = rank
         self.machine_id = machine_id
         self.mapping = mapping
-        self.n_procs = utils.conditional_value(n_procs, "", 1)
+        # the number of global processes, needed to split-up the dataset
+        self.n_procs = mapping.get_n_procs()
         self.train_dir = utils.conditional_value(train_dir, "", None)
         self.test_dir = utils.conditional_value(test_dir, "", None)
         self.sizes = utils.conditional_value(sizes, "", None)
diff --git a/src/decentralizepy/datasets/Femnist.py b/src/decentralizepy/datasets/Femnist.py
index 2e80096..23e9704 100644
--- a/src/decentralizepy/datasets/Femnist.py
+++ b/src/decentralizepy/datasets/Femnist.py
@@ -13,6 +13,7 @@ from torch.utils.data import DataLoader
 from decentralizepy.datasets.Data import Data
 from decentralizepy.datasets.Dataset import Dataset
 from decentralizepy.datasets.Partitioner import DataPartitioner
+from decentralizepy.mappings.Mapping import Mapping
 from decentralizepy.models.Model import Model
 
 NUM_CLASSES = 62
@@ -179,9 +180,9 @@ class Femnist(Dataset):
 
     def __init__(
         self,
-        rank,
-        machine_id,
-        mapping,
+        rank: int,
+        machine_id: int,
+        mapping: Mapping,
         n_procs="",
         train_dir="",
         test_dir="",
@@ -198,12 +199,11 @@ class Femnist(Dataset):
         machine_id : int
             Machine ID
         mapping : decentralizepy.mappings.Mapping
-            Mapping to conver rank, machine_id -> uid for data partitioning
-        n_procs : int, optional
-            The number of processes among which to divide the data. Default value is assigned 1
+            Mapping to convert rank, machine_id -> uid for data partitioning
+            It also provides the total number of global processes
         train_dir : str, optional
             Path to the training data files. Required to instantiate the training set
-            The training set is partitioned according to n_procs and sizes
+            The training set is partitioned according to the number of global processes and sizes
         test_dir : str. optional
             Path to the testing data files Required to instantiate the testing set
         sizes : list(int), optional
@@ -217,7 +217,6 @@ class Femnist(Dataset):
             rank,
             machine_id,
             mapping,
-            n_procs,
             train_dir,
             test_dir,
             sizes,
diff --git a/src/decentralizepy/mappings/Mapping.py b/src/decentralizepy/mappings/Mapping.py
index b979eb9..9f764ed 100644
--- a/src/decentralizepy/mappings/Mapping.py
+++ b/src/decentralizepy/mappings/Mapping.py
@@ -18,6 +18,18 @@ class Mapping:
         """
         self.n_procs = n_procs
 
+    def get_n_procs(self):
+        """
+        Gives the global sum of all processes that are spawned on the machines
+
+        Returns
+        -------
+        int
+            the number of global processes
+        """
+
+        return self.n_procs
+
     def get_uid(self, rank: int, machine_id: int):
         """
         Gives the global unique identifier of the node
diff --git a/src/decentralizepy/node/Node.py b/src/decentralizepy/node/Node.py
index e7aa916..0ef54cd 100644
--- a/src/decentralizepy/node/Node.py
+++ b/src/decentralizepy/node/Node.py
@@ -394,8 +394,6 @@ class Node:
             Rank of process local to the machine
         machine_id : int
             Machine ID on which the process in running
-        n_procs_local : int
-            Number of processes on current machine
         mapping : decentralizepy.mappings
             The object containing the mapping rank <--> uid
         graph : decentralizepy.graphs
-- 
GitLab