adding hyperopt tuning

This commit is contained in:
Arec
2021-07-30 05:17:38 -07:00
parent e30d0ab1ba
commit 5fcd3f49da
2 changed files with 35 additions and 26 deletions

View File

@@ -3,6 +3,16 @@ from functools import partial
import os import os
opj = os.path.join opj = os.path.join
# set up ray tune
import ray
from ray import tune
from ray.tune import Analysis, ExperimentAnalysis
from ray.tune.schedulers import ASHAScheduler
from hyperopt import hp
from ray.tune.suggest.hyperopt import HyperOptSearch
from src.main import basestr, main from src.main import basestr, main
def parse_args(): def parse_args():
@@ -72,18 +82,18 @@ def get_ray_config(method:str)->dict:
""" """
if method == 'bc': if method == 'bc':
ray_config = { ray_config = {
"lr": tune.choice([1e-4, 1e-3, 1e-2, 1e-1]), "lr": tune.loguniform(1e-5, 1e-3),
"weight_decay": tune.choice([0.001, 0.01, 0.1, 0.5, 0.9]), "weight_decay": tune.choice([0, 0.1]),
"loss": tune.choice(['huber', 'mse']), "loss": tune.choice(['huber', 'mse']),
"train_batch_size": tune.choice([16,32,64]), "train_batch_size": tune.choice([16,32,64]),
"deepsets_phi_hidden_n": tune.choice([1,2,3]), "deepsets_phi_hidden_n": tune.randint(1,5),
"deepsets_phi_hidden_dim": tune.choice([16,32,64]), "deepsets_phi_hidden_dim": tune.lograndint(8,65),
"deepsets_latent_dim": tune.choice([16,32,64]), "deepsets_latent_dim": tune.lograndint(8,129),
"deepsets_rho_hidden_n": tune.choice([0,1,2]), "deepsets_rho_hidden_n": tune.randint(0,3),
"deepsets_rho_hidden_dim": tune.choice([16,32,64]), "deepsets_rho_hidden_dim": tune.lograndint(8,129),
"deepsets_output_dim": tune.choice([8,16,32,64]), "deepsets_output_dim": tune.lograndint(4,129),
"head_hidden_n": tune.choice([1,2,3]), "head_hidden_n": tune.randint(1,6),
"head_hidden_dim": tune.choice([16,32,64]), "head_hidden_dim": tune.lograndint(16,257),
"head_final_activation": tune.choice(['sigmoid', None]), "head_final_activation": tune.choice(['sigmoid', None]),
} }
else: else:
@@ -108,10 +118,6 @@ if __name__ == '__main__':
main(config, filestr=filestr, **kwargs) main(config, filestr=filestr, **kwargs)
elif kwargs['ray'] and kwargs['train']: elif kwargs['ray'] and kwargs['train']:
# set up ray tune
import ray
from ray import tune
from ray.tune.schedulers import ASHAScheduler
ray.shutdown() ray.shutdown()
ray.init(log_to_driver=False) ray.init(log_to_driver=False)
@@ -121,29 +127,31 @@ if __name__ == '__main__':
main(full_config, filestr='exp', datadir=datadir, **kwargs) main(full_config, filestr='exp', datadir=datadir, **kwargs)
datadir = os.path.abspath('./expert_data') datadir = os.path.abspath('./expert_data')
ray_config = get_ray_config(kwargs['method']) ray_config = get_ray_config(kwargs['method'])
custom_scheduler = ASHAScheduler( search = HyperOptSearch(ray_config, max_concurrent=8, metric='cv_loss',mode="min",)
metric='cv_loss', custom_scheduler = ASHAScheduler(metric='cv_loss', mode="min", grace_period=15)
mode="min",
grace_period=25,
)
analysis = tune.run( analysis = tune.run(
partial(ray_train, datadir=datadir), partial(ray_train, datadir=datadir),
config=ray_config, #config=ray_config,
search_alg=search,
scheduler=custom_scheduler, scheduler=custom_scheduler,
local_dir=outdir, local_dir=outdir,
#resources_per_trial={"cpu": 2}, #resources_per_trial={"cpu": 2},
time_budget_s=45*60, time_budget_s=120*60,
num_samples=2, num_samples=100,
) )
elif kwargs['ray'] and kwargs['test']: elif kwargs['ray'] and kwargs['test']:
import ray
from ray.tune import Analysis, ExperimentAnalysis
analysis = Analysis(outdir, default_metric="cv_loss", default_mode="min") analysis = Analysis(outdir, default_metric="cv_loss", default_mode="min")
config = analysis.get_best_config() config = analysis.get_best_config()
filepath = analysis.get_best_logdir() filepath = analysis.get_best_logdir()
filestr = opj(filepath, 'exp')
config_path = filestr+'_config.json'
with open(config_path, 'r') as cfg:
config = json5.load(cfg)
print(filepath) print(filepath)
main(None, filestr=opj(filepath, 'exp'), **kwargs) main(config, filestr=filestr, **kwargs)
else: else:
raise Exception('No valid config found') raise Exception('No valid config found')

View File

@@ -5,4 +5,5 @@ pytest
json5 json5
tqdm tqdm
tensorboard tensorboard
ray[tune] ray[tune]
hyperopt