Exemple #1
0
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()
Exemple #2
0
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()