-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathrunMultipleJobs.py
68 lines (50 loc) · 2.39 KB
/
runMultipleJobs.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
import json
import pandas as pd
import os
import argparse
'''
Example:
python ./runMultipleJobs.py --default_configs ./configs/cGAN/default_configs.json --hyper_parameters_tuning ./configs/cGAN/multi_runs.csv --run_file runCGAN.py --run_on_cluster false
'''
def str2bool(v):
if v.lower() in ('yes', 'true', 't', 'y', '1'):
return True
elif v.lower() in ('no', 'false', 'f', 'n', '0'):
return False
else:
raise argparse.ArgumentTypeError('Boolean value expected.')
parser = argparse.ArgumentParser(description='Recommendation Systems')
parser.add_argument('--default_configs', nargs="?", type=str, required=True, help='')
parser.add_argument('--hyper_parameters_tuning', nargs="?", type=str, required=True, help='')
parser.add_argument('--run_file', nargs="?", type=str, required=True, help='')
parser.add_argument('--run_on_cluster', nargs="?", type=str2bool, required=True, help='')
parser.add_argument('--dataset', nargs="?", type=str, required=False, help='')
args = parser.parse_args()
bash_script_location = './scripts/run_on_cluster.sh'
with open(args.default_configs, 'r') as json_configs:
default_config = json.load(json_configs)
with open(args.hyper_parameters_tuning, 'r') as hparams:
df = pd.read_csv(hparams)
params = json.loads(df.to_json(orient='records'))
for hyper_param in params:
json_merged = {**default_config, **hyper_param}
json_merged = json.dumps(json_merged)
# Sorry for the lazy hack
json_merged = json_merged.replace(' ', '')
json_merged = json_merged.replace('\"[', '[')
json_merged = json_merged.replace(']\"', ']')
json_merged = json.loads(json_merged)
# Experiment name (Only mention changeable variables)
experiment_name = ''
for key, value in hyper_param.items():
if len(key) > 3:
key = key[:3]
experiment_name += f'{key}_{value}_'
json_merged['experiment_name'] = os.path.join(json_merged['experiment_name'], experiment_name)
json_merged = json.dumps(json_merged)
if args.run_on_cluster:
assert args.dataset in ['ml-1m', 'ml-25m']
os.system(f"sbatch {bash_script_location} {args.run_file} {args.dataset} '{json_merged}'")
else:
os.environ["MKL_SERVICE_FORCE_INTEL"] = "1"
os.system(f"python {args.run_file} --json_configs_string '{json_merged}'")