Skip to content
Snippets Groups Projects
Commit 7b367239 authored by Rishi Sharma's avatar Rishi Sharma
Browse files

Add RandomAlpha, Regular Graph

parent 5aaa9722
No related branches found
No related tags found
No related merge requests found
import networkx as nx
from decentralizepy.graphs.Graph import Graph
class Regular(Graph):
"""
The class for generating a Regular topology
"""
def __init__(self, n_procs, degree, seed=None):
"""
Constructor. Generates a Ring graph
Parameters
----------
n_procs : int
total number of nodes in the graph
degree : int
Neighbors of each node
"""
super().__init__(n_procs)
G = nx.random_regular_graph(degree, n_procs, seed)
adj = G.adjacency()
for i, l in adj:
self.adj_list[i] = set() # new set
for k in l:
self.adj_list[i].add(k)
if not nx.is_connected(G):
self.connect_graph()
import random
from decentralizepy.sharing.PartialModel import PartialModel
class RandomAlpha(PartialModel):
"""
This class implements the partial model sharing with a random alpha each iteration.
"""
def __init__(
self,
rank,
machine_id,
communication,
mapping,
graph,
model,
dataset,
log_dir,
dict_ordered=True,
save_shared=False,
metadata_cap=1.0,
):
"""
Constructor
Parameters
----------
rank : int
Local rank
machine_id : int
Global machine id
communication : decentralizepy.communication.Communication
Communication module used to send and receive messages
mapping : decentralizepy.mappings.Mapping
Mapping (rank, machine_id) -> uid
graph : decentralizepy.graphs.Graph
Graph reprensenting neighbors
model : decentralizepy.models.Model
Model to train
dataset : decentralizepy.datasets.Dataset
Dataset for sharing data. Not implemented yet! TODO
log_dir : str
Location to write shared_params (only writing for 2 procs per machine)
dict_ordered : bool
Specifies if the python dict maintains the order of insertion
save_shared : bool
Specifies if the indices of shared parameters should be logged
metadata_cap : float
Share full model when self.alpha > metadata_cap
"""
super().__init__(
rank,
machine_id,
communication,
mapping,
graph,
model,
dataset,
log_dir,
1.0,
dict_ordered,
save_shared,
metadata_cap,
)
def step(self):
"""
Perform a sharing step. Implements D-PSGD with alpha randomly chosen.
"""
random.seed(
self.mapping.get_uid(self.rank, self.machine_id) + self.communication_round
)
self.alpha = random.randint(1, 7) / 10.0
super().step()
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment