def read_spec_and_run(spec_file, spec_name, lab_mode): '''Read a spec and run it in lab mode''' logger.info( f'Running lab spec_file:{spec_file} spec_name:{spec_name} in mode:{lab_mode}' ) if lab_mode in TRAIN_MODES: spec = spec_util.get(spec_file, spec_name) else: # eval mode if '@' in lab_mode: lab_mode, prename = lab_mode.split('@') spec = spec_util.get_eval_spec(spec_file, spec_name, prename) else: spec = spec_util.get(spec_file, spec_name) if 'spec_params' not in spec: run_spec(spec, lab_mode) else: # spec is parametrized; run them in parallel param_specs = spec_util.get_param_specs(spec) num_pro = spec['meta']['param_spec_process'] # can't use Pool since it cannot spawn nested Process, which is needed for VecEnv and parallel sessions. So these will run and wait by chunks workers = [ mp.Process(target=run_spec, args=(spec, lab_mode)) for spec in param_specs ] for chunk_w in ps.chunk(workers, num_pro): for w in chunk_w: w.start() for w in chunk_w: w.join()
rgi_queue = PriorityQueue(maxsize=0) rgo_queue = PriorityQueue(maxsize=0) app = Flask(__name__) os.environ['lab_mode'] = 'eval' spec_file = sys.argv[1] spec_name = sys.argv[2] lab_mode = sys.argv[3] if '@' in lab_mode: lab_mode, prename = lab_mode.split('@') spec = spec_util.get_eval_spec(spec_file, spec_name, prename) else: spec = spec_util.get(spec_file, spec_name) # # lab_mode, prename = sys.argv[3].split('@') # spec = spec_util.get_eval_spec(spec_file, prename) spec = spec_util.override_eval_spec(spec) agent_spec = spec['agent'][0] env = make_env(spec) body = Body(env, spec['agent']) agent = DialogAgent(spec, body) # last_obs = 'hi' # agent.reset(last_obs) # obs = 'hi can you find me a hotel in the west?' # action = agent.act(obs) # next_obs = 'we have six people'