Spaces:
Sleeping
Sleeping
import argparse | |
import copy | |
import os | |
import yaml | |
import sys | |
sys.path.append('.') | |
from configs import parse_config | |
if __name__ == '__main__': | |
# parse arguments | |
parser = argparse.ArgumentParser(description='Config Generator') | |
parser.add_argument('--input', type=str, required=True) | |
parser.add_argument('--output_folder', type=str, required=True) | |
args = parser.parse_args() | |
with open(args.input, 'rt') as f: | |
template_config = yaml.safe_load(f) | |
if not os.path.exists(args.output_folder): | |
os.makedirs(args.output_folder) | |
# check template and copy config | |
config = copy.deepcopy(template_config) | |
group_sizes = [] | |
for key in config: | |
if 'option_group' in config[key]: | |
group_sizes.append(len(config[key]['option_group'])) | |
del config[key]['option_group'] | |
is_same_size = True | |
for i in range(1, len(group_sizes)): | |
is_same_size = is_same_size and group_sizes[i] == group_sizes[i - 1] | |
assert len(group_sizes) > 0, 'Template config should have at least one option group.' | |
assert is_same_size, 'All option groups should have the same size.' | |
# generate all configs | |
cmds = [] | |
for idx in range(group_sizes[0]): | |
dst_config = copy.deepcopy(config) | |
for key in dst_config: | |
if 'option_group' in template_config[key]: | |
for option, value in template_config[key]['option_group'][idx].items(): | |
dst_config[key][option] = value | |
dst_config['common']['name'] += f'{idx:02d}' | |
dst_fn = dst_config['common']['name'] | |
dst_path = os.path.join(args.output_folder, dst_fn + '.yaml') | |
with open(dst_path, 'wt') as f: | |
yaml.safe_dump(dst_config, f) | |
cmds.append(f'nohup python3 train.py --cfg_file {dst_path} > stdio/{dst_fn}.log 2>&1 &') | |
# try to load config | |
try: | |
parse_config(dst_path) | |
except Exception as e: | |
print('\033[1;31m==========\nError:\033[0m', e, '\n\033[1;31m==========\033[0m') | |
exit(-1) | |
for cmd in cmds: | |
print('') | |
print(cmd) | |