def main(): # parse args first parser = argparse.ArgumentParser() parser.add_argument('-m') parser.add_argument('-cfg', nargs='*') args = parser.parse_args() if args.m: cfg.mode = args.m parse_arg_cfg(args) if cfg.mode == 'validate' or cfg.mode == 'adjust': assert (cfg.eval_load_path != 'to be input') cfg.gpt_path = cfg.eval_load_path if cfg.mode == 'adjust': cfg.mode = 'train' else: # train if cfg.exp_path in ['', 'to be generated']: experiments_path = './experiments' cfg.exp_path = os.path.join( experiments_path, '{}_sd{}_lr{}_bs{}_ga{}_ctx{}'.format( cfg.exp_no, cfg.seed, cfg.lr, cfg.batch_size, cfg.gradient_accumulation_steps, cfg.context_scheme)) if cfg.save_log: if not os.path.exists(cfg.exp_path): os.mkdir(cfg.exp_path) # to gpt later cfg.model_path = os.path.join(cfg.exp_path, 'model.pkl') cfg.result_path = os.path.join(cfg.exp_path, 'result.csv') cfg.vocab_path_eval = os.path.join(cfg.exp_path, 'vocab') cfg.eval_load_path = cfg.exp_path cfg._init_logging_handler(args.m) #fix random seed torch.manual_seed(cfg.seed) torch.cuda.manual_seed(cfg.seed) random.seed(cfg.seed) np.random.seed(cfg.seed) #initialize model m = UBARdoc(cfg.device) if cfg.mode == 'train': m.train() elif cfg.mode == 'validate': m.validate() print('done') return 0
def main(): if not os.path.exists('./experiments'): os.mkdir('./experiments') if not os.path.exists('./experiments_21'): os.mkdir('./experiments_21') parser = argparse.ArgumentParser() parser.add_argument('-mode') parser.add_argument('-cfg', nargs='*') args = parser.parse_args() cfg.mode = args.mode if args.mode == 'test' or args.mode == 'adjust': parse_arg_cfg(args) # cfg.model_path = cfg.eval_load_path cfg.gpt_path = cfg.eval_load_path else: # train parse_arg_cfg(args) if cfg.exp_path in ['', 'to be generated']: # log file path, control the factors: seed, learning_rate, batch_size, early_stop_count, weight decay... # cfg.exp_path = 'experiments/{}_{}_sd{}_lr{}_bs{}_sp{}_dc{}/'.format('-'.join(cfg.exp_domains), # cfg.exp_no, cfg.seed, cfg.lr, cfg.batch_size, # cfg.early_stop_count, cfg.weight_decay_count) experiments_path = './experiments' if 'all' in cfg.exp_domains else './experiments_Xdomain' cfg.exp_path = os.path.join( experiments_path, '{}_{}_sd{}_lr{}_bs{}_ga{}'.format( '-'.join(cfg.exp_domains), cfg.exp_no, cfg.seed, cfg.lr, cfg.batch_size, cfg.gradient_accumulation_steps)) logging.info('save path:', cfg.exp_path) if cfg.save_log: if not os.path.exists(cfg.exp_path): os.mkdir(cfg.exp_path) # to gpt later cfg.model_path = os.path.join(cfg.exp_path, 'model.pkl') cfg.result_path = os.path.join(cfg.exp_path, 'result.csv') cfg.vocab_path_eval = os.path.join(cfg.exp_path, 'vocab') cfg.eval_load_path = cfg.exp_path cfg._init_logging_handler(args.mode) if cfg.cuda: if len(cfg.cuda_device) == 1: cfg.multi_gpu = False # torch.cuda.set_device(cfg.cuda_device[0]) device = torch.device("cuda:{}".format(cfg.cuda_device[0])) else: pass # multi-gpu else: device = torch.device('cpu') logging.info('Device: {}'.format(torch.cuda.current_device())) # fix random seed torch.manual_seed(cfg.seed) torch.cuda.manual_seed(cfg.seed) random.seed(cfg.seed) np.random.seed(cfg.seed) # initialize model m = Modal(device) if args.mode == 'train': # train if cfg.save_log: # save cfg details. pass if cfg.context_scheme == 'UBARU': m.train() elif cfg.context_scheme == 'URURU': m.train_URURU() else: logging.info('Invalid context Scheme. must be UBARU or URURU') exit() elif args.mode == 'adjuest': pass else: # test logging.info( "Generate setting: \n\t use true_prev_bspn={} \n\t use true_prev_aspn={} \n\t use true_db_pointer={} \n\t use true_prev_resp={} \n\t use true_curr_bspn={} \n\t use true_curr_aspn={} \n\t use_all_previous_context={}" .format(cfg.use_true_prev_bspn, cfg.use_true_prev_aspn, cfg.use_true_db_pointer, cfg.use_true_prev_resp, cfg.use_true_curr_bspn, cfg.use_true_curr_aspn, cfg.use_all_previous_context)) if cfg.context_scheme == 'UBARU': m.validate() m.validate('test') elif cfg.context_scheme == 'URURU': m.validate_URURU() m.validate_URURU('test')
def main(): if not os.path.exists('./experiments'): os.mkdir('./experiments') parser = argparse.ArgumentParser() parser.add_argument('-mode') parser.add_argument('-cfg', nargs='*') args = parser.parse_args() cfg.mode = args.mode if args.mode == 'test' or args.mode == 'adjust': parse_arg_cfg(args) cfg_load = json.loads( open(os.path.join(cfg.eval_load_path, 'config.json'), 'r').read()) for k, v in cfg_load.items(): if k in [ 'mode', 'cuda', 'cuda_device', 'eval_load_path', 'eval_per_domain', 'use_true_pv_resp', 'use_true_prev_bspn', 'use_true_prev_aspn', 'use_true_curr_bspn', 'use_true_curr_aspn', 'name_slot_unable', 'book_slot_unable', 'count_req_dials_only', 'log_time', 'model_path', 'result_path', 'model_parameters', 'multi_gpu', 'use_true_bspn_for_ctr_eval', 'nbest', 'limit_bspn_vocab', 'limit_aspn_vocab', 'same_eval_as_cambridge', 'beam_width', 'use_true_domain_for_ctr_eval', 'use_true_prev_dspn', 'aspn_decode_mode', 'beam_diverse_param', 'same_eval_act_f1_as_hdsa', 'topk_num', 'nucleur_p', 'act_selection_scheme', 'beam_penalty_type', 'record_mode' ]: continue setattr(cfg, k, v) cfg.model_path = os.path.join(cfg.eval_load_path, 'model.pkl') cfg.result_path = os.path.join(cfg.eval_load_path, 'result.csv') else: parse_arg_cfg(args) if cfg.exp_path in ['', 'to be generated']: cfg.exp_path = 'experiments/{}_{}_sd{}_lr{}_bs{}_sp{}_dc{}/'.format( '-'.join(cfg.exp_domains), cfg.exp_no, cfg.seed, cfg.lr, cfg.batch_size, cfg.early_stop_count, cfg.weight_decay_count) if cfg.save_log: os.mkdir(cfg.exp_path) cfg.model_path = os.path.join(cfg.exp_path, 'model.pkl') cfg.result_path = os.path.join(cfg.exp_path, 'result.csv') cfg.vocab_path_eval = os.path.join(cfg.exp_path, 'vocab') cfg.eval_load_path = cfg.exp_path cfg._init_logging_handler(args.mode) if cfg.cuda: if len(cfg.cuda_device) == 1: cfg.multi_gpu = False torch.cuda.set_device(cfg.cuda_device[0]) else: # cfg.batch_size *= len(cfg.cuda_device) cfg.multi_gpu = True torch.cuda.set_device(cfg.cuda_device[0]) logging.info('Device: {}'.format(torch.cuda.current_device())) torch.manual_seed(cfg.seed) torch.cuda.manual_seed(cfg.seed) random.seed(cfg.seed) np.random.seed(cfg.seed) m = Model() cfg.model_parameters = m.count_params() logging.info(str(cfg)) if args.mode == 'train': if cfg.save_log: # open(cfg.exp_path + 'config.json', 'w').write(str(cfg)) m.reader.vocab.save_vocab(cfg.vocab_path_eval) with open(os.path.join(cfg.exp_path, 'config.json'), 'w') as f: json.dump(cfg.__dict__, f, indent=2) # m.load_glove_embedding() m.train() elif args.mode == 'adjust': m.load_model(cfg.model_path) m.train() elif args.mode == 'test': m.load_model(cfg.model_path) # m.train() m.eval(data='test')