ding.worker.coordinator.resource_manager¶
ding.worker.coordinator.resource_manager
¶
NaiveResourceManager
¶
Bases: object
Overview
the naive resource manager
Interface: init, assign_collector, assign_learner, update
__init__()
¶
Overview
init the resouce manager
assign_collector(collector_task)
¶
Overview
assign the collector_task randomly and return the resouce info
Arguments:
- collector_task (:obj:dict): the collector task to assign
assign_learner(learner_task)
¶
Overview
assign the learner_task randomly and return the resouce info
Arguments:
- learner_task (:obj:dict): the learner task to assign
update(name, worker_id, resource_info)
¶
Overview
update the reource info
Full Source Code
../ding/worker/coordinator/resource_manager.py
1import random 2 3 4class NaiveResourceManager(object): 5 r""" 6 Overview: 7 the naive resource manager 8 Interface: 9 __init__, assign_collector, assign_learner, update 10 """ 11 12 def __init__(self) -> None: 13 r""" 14 Overview: 15 init the resouce manager 16 """ 17 self._worker_type = ['collector', 'learner'] 18 self._resource_info = {k: {} for k in self._worker_type} 19 20 def assign_collector(self, collector_task: dict) -> dict: 21 r""" 22 Overview: 23 assign the collector_task randomly and return the resouce info 24 Arguments: 25 - collector_task (:obj:`dict`): the collector task to assign 26 """ 27 available_collector_list = list(self._resource_info['collector'].keys()) 28 if len(available_collector_list) > 0: 29 selected_collector = random.sample(available_collector_list, 1)[0] 30 info = self._resource_info['collector'].pop(selected_collector) 31 return {'collector_id': selected_collector, 'resource_info': info} 32 else: 33 return None 34 35 def assign_learner(self, learner_task: dict) -> dict: 36 r""" 37 Overview: 38 assign the learner_task randomly and return the resouce info 39 Arguments: 40 - learner_task (:obj:`dict`): the learner task to assign 41 """ 42 available_learner_list = list(self._resource_info['learner'].keys()) 43 if len(available_learner_list) > 0: 44 selected_learner = random.sample(available_learner_list, 1)[0] 45 info = self._resource_info['learner'].pop(selected_learner) 46 return {'learner_id': selected_learner, 'resource_info': info} 47 else: 48 return None 49 50 def have_assigned(self, name: id, worker_id: str) -> bool: 51 assert name in self._worker_type, "invalid worker_type: {}".format(name) 52 if name == 'collector': 53 return worker_id in self._resource_info['collector'] 54 elif name == 'learner': 55 return worker_id in self._resource_info['learner'] 56 57 def delete(self, name: id, worker_id: str) -> bool: 58 assert name in self._worker_type, "invalid worker_type: {}".format(name) 59 if worker_id in self._resource_info[name]: 60 self._resource_info.pop(worker_id) 61 return True 62 else: 63 return False 64 65 def update(self, name: str, worker_id: str, resource_info: dict) -> None: 66 r""" 67 Overview: 68 update the reource info 69 """ 70 assert name in self._worker_type, "invalid worker_type: {}".format(name) 71 self._resource_info[name][worker_id] = resource_info