def run(): args = argparser() path = utils.create_log_dir(sys.argv) utils.start(args.http_port) env = Env(args) agents = [Agent(args) for _ in range(args.n_agent)] master = Master(args) for agent in agents: master.add_agent(agent) master.add_env(env) success_list = [] time_list = [] for idx in range(args.n_episode): print('=' * 80) print("Episode {}".format(idx + 1)) # 서버의 stack, timer 초기화 print("서버를 초기화하는중...") master.reset(path) # 에피소드 시작 master.start() # 에이전트 학습 master.train() print('=' * 80) success_list.append(master.infos["is_success"]) time_list.append(master.infos["end_time"] - master.infos["start_time"]) if (idx + 1) % args.print_interval == 0: print("=" * 80) print("EPISODE {}: Avg. Success Rate / Time: {:.2} / {:.2}".format( idx + 1, np.mean(success_list), np.mean(time_list))) success_list.clear() time_list.clear() print("=" * 80) if (idx + 1) % args.checkpoint_interval == 0: utils.save_checkpoints(path, agents, idx + 1) if args.visual: visualize(path, args) print("끝") utils.close()
class Dart: def __init__(self, dartfile, flags): self.df = DartFile(dartfile) if flags["preprocessed"]: print self.df.preprocessed sys.exit(0) self.verbose = flags["verbose"] self.emulab = Emulab(self.df.pid, self.df.eid, self.df.nsfile, self.df.eipsfile, self.df.iipsfile, self.verbose) self.eips = [] self.iips = [] self.mastereip = None self.masteriip = None self.slaveeips = [] self.slaveiips = [] self.numnodes = -1 self.master = None def map_vnns(self, vnns, type): assert (type == EXTERNAL_IPS or type == INTERNAL_IPS) if type == EXTERNAL_IPS: allips = self.eips else: allips = self.iips ips = [] if vnns == "*": ips = allips else: for vnn in vnns: ips.append(allips[vnn]) return ips def emulab_setup(self): self.emulab.mkexp() self.emulab.setup() def emulab_teardown(self): self.emulab.rmexp() def emulab_setips(self): # Assumes emulab_setup() in prior execution self.eips, self.iips = self.emulab.read_ipfiles() self.mastereip = self.eips[0] self.masteriip = self.iips[0] self.slaveeips = self.eips[1:] self.slaveiips = self.iips[1:] self.numnodes = len(self.eips) def emulab_faults(self): import tempfile s = StringIO.StringIO() for i in range(len(self.df.faults)): f = self.df.faults[i] eips = self.map_vnns(f["vnns"], EXTERNAL_IPS) if f["type"] == "node" and f["subtype"] == "reboot": # Node reboot s.write("(sleep %d;" % f["time"]) s.write("/usr/testbed/bin/node_reboot -w ") for ip in eips: m = re.search("^(pc.*?)\.", socket.gethostbyaddr(ip)[0]) nodeid = m.group(1) # (e.g., "pc15") s.write("%s " % nodeid) s.write("; ) &\n") tmp = tempfile.mktemp(".dart") self.emulab.xfer_buf_to(s.getvalue(), tmp) # NOTE: no setsid on Emulab! self.emulab.rexec_detached("sh %s" % tmp) def dart_setup(self): self.emulab_setips() self.master = Master(self, verbose=self.verbose) self.master.setup() def dart_run(self): self.emulab_setips() self.master = Master(self, verbose=self.verbose) self.master.run() def dart_reset(self): self.emulab_setips() self.master = Master(self, verbose=self.verbose) self.master.reset()