syne_tune.optimizer.schedulers.pbt module
- class syne_tune.optimizer.schedulers.pbt.PBTTrialState(trial, last_score=None, last_checkpoint=None, last_perturbation_time=0, stopped=False)[source]
Bases:
object
Internal PBT state tracked per-trial.
-
last_score:
float
= None
-
last_checkpoint:
int
= None
-
last_perturbation_time:
int
= 0
-
stopped:
bool
= False
-
last_score:
- class syne_tune.optimizer.schedulers.pbt.PopulationBasedTraining(config_space, custom_explore_fn=None, **kwargs)[source]
Bases:
FIFOScheduler
Implements the Population Based Training (PBT) algorithm. This is an adapted version of the Ray Tune implementation:
https://docs.ray.io/en/latest/tune/tutorials/tune-advanced-tutorial.html
PBT was originally presented in the following paper:
Population based training (PBT) maintains a population of models spread across an asynchronous set of workers and dynamically adjust their hyperparameters during training. Every time a worker reaches a user-defined milestone, it returns the performance of the currently evaluated network. If the network is within the top percentile of the population, the worker resumes its training until the next milestone. If not, PBT selects a model from the top percentile uniformly at random. The worker now continues with the latest checkpoint of this new model but mutates the hyperparameters.
The mutation happens as following. For each hyperparameter, we either resample its value uniformly at random, or otherwise increment (multiply by 1.2) or decrement (multiply by 0.8) the value (probability 0.5 each). For categorical hyperparameters, the value is always resampled uniformly.
Note: While this is implemented as child of
FIFOScheduler
, we requiresearcher="random"
(default), since the current code only supports a random searcher.Additional arguments on top of parent class
FIFOScheduler
.- Parameters:
resource_attr (str) – Name of resource attribute in results obtained via
on_trial_result
, defaults to “time_total_s”population_size (int, optional) – Size of the population, defaults to 4
perturbation_interval (float, optional) – Models will be considered for perturbation at this interval of
resource_attr
. Note that perturbation incurs checkpoint overhead, so you shouldn’t set this to be too frequent. Defaults to 60quantile_fraction (float, optional) – Parameters are transferred from the top
quantile_fraction
fraction of trials to the bottomquantile_fraction
fraction. Needs to be between 0 and 0.5. Setting it to 0 essentially implies doing no exploitation at all. Defaults to 0.25resample_probability (float, optional) – The probability of resampling from the original distribution when applying
_explore()
. If not resampled, the value will be perturbed by a factor of 1.2 or 0.8 if continuous, or changed to an adjacent value if discrete. Defaults to 0.25custom_explore_fn (function, optional) – Custom exploration function. This function is invoked as
f(config)
instead of the built-in perturbations, and should returnconfig
updated as needed. If this is given,resample_probability
is not used