Exemple #1
0
def runing(config, _log, game_name):

    # config 파일로 부터 args 정보를 로드 합니다.
    _config = args_sanity_check(config, _log)
    args = SN(**config)
    args.device = "cuda" if args.use_cuda else "cpu"

    env_name = get_env_name(game_name)

    # log 기능을 활성화 합니다.
    logger = Logger(_log)
    unique_token = "{}__{}".format(
        args.name,
        datetime.datetime.now().strftime("%Y-%m-%d_%H-%M-%S"))
    args.unique_token = unique_token

    # 텐서보드 기능을 준비 합니다.
    args.unique_token = unique_token
    if args.use_tensorboard:
        tb_logs_direc = os.path.join(dirname(dirname(abspath(__file__))),
                                     "results", "tb_logs/{}".format(game_name))
        tb_exp_direc = os.path.join(tb_logs_direc, "{}").format(unique_token)
        logger.setup_tb(tb_exp_direc)

    # 실험을 시작 합니다.
    run_sequential(args, logger, env_name)
Exemple #2
0
def my_main(_run, _config, _log):
    global mongo_client

    import datetime
    unique_token = "{}__{}".format(_config["name"], datetime.datetime.now().strftime("%Y-%m-%d_%H-%M-%S"))
    # run the framework
    # run(_run, _config, _log, mongo_client, unique_token)
    arglist = parse_args()

    logger = Logger(_log)
    # configure tensorboard logger
    unique_token = "{}__{}".format(arglist.exp_name, datetime.datetime.now().strftime("%Y-%m-%d_%H-%M-%S"))
    use_tensorboard = False
    if use_tensorboard:
        tb_logs_direc = os.path.join(dirname(dirname(abspath(__file__))), "results", "tb_logs")
        tb_exp_direc = os.path.join(tb_logs_direc, "{}").format(unique_token)
        logger.setup_tb(tb_exp_direc)
    logger.setup_sacred(_run)

    train(arglist, logger, _config)
    # arglist = convert(_config)
    #train(arglist)

    # force exit
    os._exit(0)
Exemple #3
0
def run(_run, _config, _log):
    """
    运行,被main函数调用过来
    :param _run:
    :type _run:
    :param _config:
    :type _config:
    :param _log:
    :type _log:
    :return:
    :rtype:
    """
    # 更改一些config中的默认配置,例如cuda,batch等
    _config = args_sanity_check(_config, _log)
    # 改成Namespace范围的参数
    args = SN(**_config)
    args.device = "cuda" if args.use_cuda else "cpu"

    #配置日志
    logger = Logger(_log)

    _log.info("打印实验参数: ")
    experiment_params = pprint.pformat(_config,
                                       indent=4,
                                       width=1)
    _log.info("\n\n" + experiment_params + "\n")

    # 配置Tensorboard Logger , eg: 'qmix_env=8_adam_td_lambda__2021-04-28_09-40-29'
    unique_token = "{}__{}".format(args.name, datetime.datetime.now().strftime("%Y-%m-%d_%H-%M-%S"))
    args.unique_token = unique_token
    # 是否使用tensorboard,使用的话,就配置下存储信息
    if args.use_tensorboard:
        tb_logs_direc = os.path.join(dirname(dirname(abspath(__file__))), "results", "tb_logs")
        tb_exp_direc = os.path.join(tb_logs_direc, "{}").format(unique_token)
        logger.setup_tb(tb_exp_direc)

    # 默认情况下日志sacred来管理
    logger.setup_sacred(_run)

    # 运行和训练
    run_sequential(args=args, logger=logger)

    # Clean up after finishing
    print("退出主程序")

    print("停止所有线程")
    for t in threading.enumerate():
        if t.name != "MainThread":
            print("Thread {} is alive! Is daemon: {}".format(t.name, t.daemon))
            t.join(timeout=1)
            print("Thread joined")

    print("退出 script")

    # 确实退出状态
    os._exit(os.EX_OK)
Exemple #4
0
def run(_run, _config, _log):
    # check args sanity
    _config = args_sanity_check(_config, _log)

    args = SN(**_config)
    args.device = "cuda" if args.use_cuda else "cpu"
    set_device = os.getenv('SET_DEVICE')
    if args.use_cuda and set_device != '-1':
        if set_device is None:
            args.device = "cuda"
        else:
            args.device = f"cuda:{set_device}"
    else:
        args.device = "cpu"

    # setup loggers
    logger = Logger(_log)

    _log.info("Experiment Parameters:")
    experiment_params = pprint.pformat(_config, indent=4, width=1)
    _log.info("\n\n" + experiment_params + "\n")

    # configure tensorboard logger
    unique_token = "{}__{}".format(
        args.name,
        datetime.datetime.now().strftime("%Y-%m-%d_%H-%M-%S"))
    args.unique_token = unique_token
    if args.use_tensorboard:
        tb_logs_direc = os.path.join(dirname(dirname(abspath(__file__))),
                                     "results", "tb_logs")
        tb_exp_direc = os.path.join(tb_logs_direc, "{}").format(unique_token)
        logger.setup_tb(tb_exp_direc)

    # sacred is on by default
    logger.setup_sacred(_run)

    # Run and train
    run_sequential(args=args, logger=logger)

    # Clean up after finishing
    print("Exiting Main")

    print("Stopping all threads")
    for t in threading.enumerate():
        if t.name != "MainThread":
            print("Thread {} is alive! Is daemon: {}".format(t.name, t.daemon))
            t.join(timeout=1)
            print("Thread joined")

    print("Exiting script")

    # Making sure framework really exits
    os._exit(os.EX_OK)
Exemple #5
0
def run(_run, _config, _log):

    # check args sanity
    _config = args_sanity_check(_config, _log)

    args = SN(**_config)
    args.device = "cuda" if args.use_cuda else "cpu"
    if args.use_cuda:
        th.cuda.set_device(args.device_num)

    # setup loggers
    logger = Logger(_log)

    _log.info("Experiment Parameters:")
    experiment_params = pprint.pformat(_config, indent=4, width=1)
    _log.info("\n\n" + experiment_params + "\n")

    # configure tensorboard logger
    unique_token = "{}__{}".format(
        args.name,
        datetime.datetime.now().strftime("%Y-%m-%d_%H-%M-%S"))
    args.unique_token = unique_token
    if args.use_tensorboard:
        tb_logs_direc = os.path.join(dirname(dirname(abspath(__file__))),
                                     "results", "tb_logs")
        tb_exp_direc = os.path.join(tb_logs_direc, "{}").format(unique_token)
        args.tb_logs = tb_exp_direc
        # args.latent_role_direc = os.path.join(tb_exp_direc, "{}").format('latent_role')
        logger.setup_tb(tb_exp_direc)
        #dump config to the tb directory
        with open(os.path.join(tb_exp_direc, "config.yaml"), "w") as f:
            yaml.dump(_config, f, default_flow_style=False)

    # sacred is on by default
    logger.setup_sacred(_run)

    # Run and train
    run_sequential(args=args, logger=logger)

    # Clean up after finishing
    print("Exiting Main")

    print("Stopping all threads")
    for t in threading.enumerate():
        if t.name != "MainThread":
            print("Thread {} is alive! Is daemon: {}".format(t.name, t.daemon))
            t.join(timeout=1)
            print("Thread joined")

    print("Exiting script")

    # Making sure framework really exits
    os._exit(os.EX_OK)
Exemple #6
0
def run(_run, _config, _log):

    # check args sanity
    _config = args_sanity_check(_config, _log)

    args = SN(**_config)
    args.device = "cuda" if args.use_cuda else "cpu"

    # setup loggers
    logger = Logger(_log)

    _log.info("Experiment Parameters:")
    experiment_params = pprint.pformat(_config, indent=4, width=1)
    _log.info("\n\n" + experiment_params + "\n")

    # configure tensorboard logger
    # unique_token = "{}__{}".format(args.name, datetime.datetime.now().strftime("%Y-%m-%d_%H-%M-%S"))

    try:
        map_name = _config["env_args"]["map_name"]
    except:
        map_name = _config["env_args"]["key"]
    unique_token = f"{_config['name']}_seed{_config['seed']}_{map_name}_{datetime.datetime.now()}"

    args.unique_token = unique_token
    if args.use_tensorboard:
        tb_logs_direc = os.path.join(dirname(dirname(abspath(__file__))),
                                     "results", "tb_logs")
        tb_exp_direc = os.path.join(tb_logs_direc, "{}").format(unique_token)
        logger.setup_tb(tb_exp_direc)

    # sacred is on by default
    logger.setup_sacred(_run)

    # Run and train
    run_sequential(args=args, logger=logger)

    # Clean up after finishing
    print("Exiting Main")

    print("Stopping all threads")
    for t in threading.enumerate():
        if t.name != "MainThread":
            print("Thread {} is alive! Is daemon: {}".format(t.name, t.daemon))
            t.join(timeout=1)
            print("Thread joined")

    print("Exiting script")
Exemple #7
0
def standard_run(_config, _log, game_name):

    # check args sanity
    _config = args_sanity_check(_config, _log)

    args = SN(**_config)

    # use_cuda=True by default in default.yaml
    args.device = "cuda" if args.use_cuda else "cpu"
    #args.device = f"cuda:{args.device_num}" if args.use_cuda else "cpu"

    # setup loggers
    logger = Logger(_log)

    _log.info("Experiment Parameters:")
    experiment_params = pprint.pformat(_config, indent=4, width=1)
    _log.info("\n\n" + experiment_params + "\n")

    # configure tensorboard logger
    unique_token = f"{args.name}__{datetime.datetime.now():%Y-%m-%d_%H-%M-%S}"  # e.g. QMIX_2021-08-04_11-09-04
    args.unique_token = unique_token
    if args.use_tensorboard:
        tb_logs_direc = os.path.join(dirname(dirname(abspath(__file__))),
                                     "results", f"tb_logs/{game_name}")
        tb_exp_direc = os.path.join(tb_logs_direc, f"{unique_token}")
        logger.setup_tb(tb_exp_direc)

    # Run and train
    run_sequential(args=args, logger=logger)

    # Clean up after finishing
    print("Exiting Main")

    print("Stopping all threads")
    for t in threading.enumerate():
        if t.name != "MainThread":
            print(f"Thread {t.name} is alive! Is daemon: {t.daemon}")
            t.join(timeout=1)
            print("Thread joined")

    print("Exiting script")

    # Making sure framework really exits
    #os._exit(os.EX_OK) #The os.EX_* values are UNIX only.
    os._exit(0)  #For Windows
Exemple #8
0
def my_main(_run, _config, _log):
    global mongo_client

    import datetime

    # arglist = parse_args()
    # unique_token = "{}__{}".format(arglist.name, datetime.datetime.now().strftime("%Y-%m-%d_%H-%M-%S"))
    # run the framework
    # run(_run, _config, _log, mongo_client, unique_token)

    logger = Logger(_log)

    # configure tensorboard logger
    unique_token = "{}__{}".format(
        _config["label"],
        datetime.datetime.now().strftime("%Y-%m-%d_%H-%M-%S"))
    use_tensorboard = False
    if use_tensorboard:
        tb_logs_direc = os.path.join(dirname(dirname(abspath(__file__))),
                                     "results", "tb_logs")
        tb_exp_direc = os.path.join(tb_logs_direc, "{}").format(unique_token)
        logger.setup_tb(tb_exp_direc)
    logger.setup_sacred(_run)

    _log.info("Experiment Parameters:")
    import pprint
    experiment_params = pprint.pformat(_config, indent=4, width=1)
    _log.info("\n\n" + experiment_params + "\n")

    # START THE TRAINING PROCESS
    runner = Runner(logger)
    runner.load(_config)
    runner.reset()
    # args = vars(arglist)
    runner.run(_config)

    # runner.run(args)

    # train(arglist, logger, _config)
    # arglist = convert(_config)
    # train(arglist)

    # force exit
    os._exit(0)
Exemple #9
0
def run(_run, _config, _log, pymongo_client):

    # check args sanity
    _config = args_sanity_check(_config, _log)

    args = SN(**_config)
    args.device = "cuda" if args.use_cuda else "cpu"

    # setup loggers
    logger = Logger(_log)

    _log.info("Experiment Parameters:")
    experiment_params = pprint.pformat(_config, indent=4, width=1)
    _log.info("\n\n" + experiment_params + "\n")

    # configure tensorboard logger
    unique_token = "{}__{}".format(
        args.name,
        datetime.datetime.now().strftime("%Y-%m-%d_%H-%M-%S"))
    args.unique_token = unique_token
    if args.use_tensorboard:
        tb_logs_direc = os.path.join(dirname(dirname(abspath(__file__))),
                                     "results", "tb_logs")
        tb_exp_direc = os.path.join(tb_logs_direc, "{}").format(unique_token)
        logger.setup_tb(tb_exp_direc)

    # sacred is on by default
    logger.setup_sacred(_run)

    # Run and train
    if args.cross_play and args.evaluate:
        run_sequential_cross(args=args, logger=logger)
    else:
        run_sequential(args=args, logger=logger)

    # Clean up after finishing
    print("Exiting Main")

    if pymongo_client is not None:
        print("Attempting to close mongodb client")
        pymongo_client.close()
    print("Mongodb client closed")
Exemple #10
0
def run(_run, _config, _log):

    # check args sanity
    _config = args_sanity_check(_config, _log)

    args = SN(**_config)
    args.device = "cuda" if args.use_cuda else "cpu"

    # setup loggers
    logger = Logger(_log)

    _log.info("Experiment Parameters:")
    experiment_params = pprint.pformat(_config, indent=4, width=1)
    _log.info("\n\n" + experiment_params + "\n")

    print("\n=================")
    auto_describe = 'env_' + args.env_args['map_name'] + '_' + args.name.split(
        '_')[0] + '_'  # env map algo
    if args.name.split('_')[0] == 'smix':
        auto_describe = auto_describe + args.mixer + '_'
    # average and sub-average
    if args.SubAVG_Agent_flag == 0 and args.SubAVG_Mixer_flag == 0:
        pass
    else:
        if args.SubAVG_Agent_flag == 1:
            auto_describe = auto_describe + 'average' + str(
                args.SubAVG_Agent_K)
            if args.SubAVG_Agent_flag_select < 0:
                auto_describe = auto_describe + 'neg' + (
                    "Mean" if args.SubAVG_Agent_name_select_replacement
                    == 'mean' else "Zero_start2") + '_'
            elif args.SubAVG_Agent_flag_select > 0:
                auto_describe = auto_describe + 'pos' + (
                    "Mean" if args.SubAVG_Agent_name_select_replacement
                    == 'mean' else "Zero_start2") + '_'
        if args.SubAVG_Mixer_flag == 1:
            auto_describe = auto_describe + 'mix' + str(args.SubAVG_Mixer_K)
            if args.SubAVG_Mixer_flag_select < 0:
                auto_describe = auto_describe + 'neg' + (
                    "Mean" if args.SubAVG_Mixer_name_select_replacement
                    == 'mean' else "Zero_start2") + '_'
            elif args.SubAVG_Mixer_flag_select > 0:
                auto_describe = auto_describe + 'pos' + (
                    "Mean" if args.SubAVG_Mixer_name_select_replacement
                    == 'mean' else "Zero_start2") + '_'
    # double
    if args.double_q:
        auto_describe = auto_describe + 'Double'
    else:
        auto_describe = auto_describe + 'vanilla'

    args.z_auto_describe = auto_describe
    print(auto_describe)

    print(args.z_describe)

    print("using Sub-AVG Agent:", end=' ')
    print("Yes  K: %d" %
          args.SubAVG_Agent_K if args.SubAVG_Agent_flag else "No",
          end=' | ')
    print("select > or < average:", end=' ')
    print("Yes  signal: %d" % args.SubAVG_Agent_flag_select
          if args.SubAVG_Agent_flag_select else "No",
          end=' | ')
    print("replace average_select by :", end=' ')
    print("mean" if args.SubAVG_Agent_name_select_replacement ==
          'mean' else "zero")

    print("using Sub-AVG Mixer:", end=' ')
    print("Yes  K: %d" %
          args.SubAVG_Mixer_K if args.SubAVG_Mixer_flag else "No",
          end=' | ')
    print("mixer: select > or <:", end=' ')
    print("Yes  signal: %d" % args.SubAVG_Mixer_flag_select
          if args.SubAVG_Mixer_flag_select else "No",
          end=' | ')
    print("replace mixer_select by :", end=' ')
    print("mean" if args.SubAVG_Mixer_name_select_replacement ==
          'mean' else "zero")

    print("using double_q: ", end=' ')
    print('Yes' if args.double_q else "No", end=' | ')

    # -----------------------------
    print("\n==================\n")

    # configure tensorboard logger
    unique_token = "{}__{}".format(
        args.name,
        datetime.datetime.now().strftime("%Y-%m-%d_%H-%M-%S"))
    args.unique_token = unique_token
    if args.use_tensorboard:
        tb_logs_direc = os.path.join(dirname(dirname(abspath(__file__))),
                                     "results", "tb_logs")
        tb_exp_direc = os.path.join(tb_logs_direc, "{}").format(unique_token)
        logger.setup_tb(tb_exp_direc)

    # sacred is on by default
    logger.setup_sacred(_run)

    # Run and train
    run_sequential(args=args, logger=logger)

    # Clean up after finishing
    print("Exiting Main")

    print("Stopping all threads")
    for t in threading.enumerate():
        if t.name != "MainThread":
            print("Thread {} is alive! Is daemon: {}".format(t.name, t.daemon))
            t.join(timeout=1)
            print("Thread joined")

    print("Exiting script")

    # Making sure framework really exits
    os._exit(os.EX_OK)