in cluster-trace-gpu-v2020/simulator/cluster.py [0:0]
def __init__(self, node_list=None, num_nodes=None, num_gpus=20,
num_cpus=20, pattern=1, period=124, job_list=None,
random_seed=0, num_spare_node=None,
export_cluster_util=False):
if node_list is not None:
node_list = node_list
elif num_nodes is not None:
node_list = [Node(id=i) for i in range(num_nodes)]
else:
node_list = [Node(id=0, num_gpus=num_gpus, num_cpus=num_cpus)]
temp_node_dict = dict()
self.num_gpus, self.num_cpus = 0, 0
for node in node_list:
self.num_gpus += node.num_gpus
self.num_cpus += node.num_cpus
temp_node_dict[node.id] = node
self.node_dict = OrderedDict(sorted(temp_node_dict.items(),
key=lambda t: t[1].id))
self.cur_time = 0
self.svc = {'num_gpu': 0, 'num_cpu': 0} # high-priority service
self.svc_former_ratio = 0
# self.job_full_list = job_list # all jobs received from all times
self.job_full_list = large_job_pruning(job_list, self.num_gpus, self.num_cpus)
self.job_full_list.sort(key=lambda j: -j['submit_time'])
self.job_list = []
self.retrieve_job_from_full_list() # feed self.user_job_queue into self.job_list
self.job_history = JobHistory()
# Capacity changing pattern & period
self.pattern = pattern
self.period = period
# Spare specific node
self.num_spare_node = num_spare_node
self.spare_node_id = []
if num_spare_node is not None:
for i in range(num_spare_node):
spare_node_index = random_seed % len(node_list)
spare_node_id = node_list[spare_node_index].id
while spare_node_id in self.spare_node_id:
random_seed += 29741 # a random prime number
spare_node_index = random_seed % len(node_list)
spare_node_id = node_list[spare_node_index].id
self.spare_node_id.append(spare_node_id) # indicate which node to spare
random_seed += 29741 # a random prime number
self.export_cluster_util = export_cluster_util
self.cluster_time = []
self.cluster_cpu = []
self.cluster_gpu = []
self.idle_cluster_counter = 0