def test_load_yaml_opts():
    """ Load options using static method (no singleton)
    """
    reset_options_instance()
    opt = Options.load_yaml_opts('tests/default.yaml')
    assert (opt == OptionsDict({'message': 'default'}))
    assert Options._Options__instance is None
Example #2
0
    def train(self):
        self.status = 'training'
        Logger()('training {}'.format(self.path_opts))

        if self.generation == 0:
            opts = Options.load_yaml_opts(self.path_opts)
            nb_epochs = opts['engine']['nb_epochs']
            # we can start training from scratch or from checkpoint
            ckpt_name = '' if opts['exp']['resume'] is None else opts['exp'][
                'resume']
        else:
            # load parent options
            opts = Options.load_yaml_opts(self.parent)
            nb_epochs = opts['engine']['nb_epochs'] + Options(
            )['pbt']['mutation_rate']
            ckpt_name, path_ckpt = find_ckpt(self.exp_dir,
                                             Options()['pbt']['resume'])
            # if we start training from best epoch and not last epoch,
            # we must remove some extra data in logs.json
            if Options()['pbt']['resume'] != 'last':
                ckpt = torch.load(path_ckpt)
                path_logs = os.path.join(self.exp_dir, 'logs.json')
                logs = json.load(open(path_logs))
                for k, v in logs.items():
                    if 'train_epoch' in k or 'eval_epoch' in k:
                        logs[k] = logs[k][:ckpt['epoch'] + 1]
                with open(path_logs, 'w') as f:
                    json.dump(logs, f)

        cmd = '{} -o {} --exp.dir {} --exp.resume {} --engine.nb_epochs {}'.format(
            Options()['pbt']['cmd']['train'], self.path_opts, self.exp_dir,
            ckpt_name, nb_epochs)
        Logger()(cmd)

        job_id = slurm_submit(cmd)
        while True:
            status = get_job_status(job_id)
            Logger()('training job {} is {} in {}'.format(
                job_id, status, self.exp_dir))
            if slurm_is_idle(job_id):
                break
            time.sleep(10)
        self.status = 'trained'
"""
# Load options using static method (no singleton)

- cli: `python test/test_options4.py`
- expected behavior:
```
OptionsDict({'message': 'default'})
OptionsDict({'message': 'adam', 'sgd': True, 'nested': OptionsDict({'message': 'lol'}), 'adam': True})
OptionsDict({'message': 'sgd', 'nested': OptionsDict({'message': 'save'}), 'sgd': True})
```
"""
from bootstrap.lib.options import Options

if __name__ == '__main__':
    print(Options.load_yaml_opts('test/default.yaml'))
    print(Options.load_yaml_opts('test/adam.yaml'))
    print(Options.load_yaml_opts('test/saved.yaml'))