From d16b6f6a324eb1ac0f7876f9a6941e50f20b642d Mon Sep 17 00:00:00 2001 From: Michael Tu Date: Fri, 24 Aug 2018 15:05:24 -0700 Subject: [PATCH] [tune] Rename 'repeat' to 'num_samples' (#2698) Deprecates the `repeat` argument and introduces `num_samples`. Also updates docs accordingly. --- doc/source/tune-usage.rst | 8 ++++---- python/ray/rllib/train.py | 2 +- .../tuned_examples/hyperband-cartpole.yaml | 2 +- .../regression_tests/regression_test.py | 2 +- python/ray/tune/config_parser.py | 2 +- .../tune/examples/async_hyperband_example.py | 2 +- python/ray/tune/examples/hyperband_example.py | 2 +- python/ray/tune/examples/hyperopt_example.py | 2 +- python/ray/tune/examples/pbt_example.py | 2 +- python/ray/tune/examples/pbt_ppo_example.py | 2 +- .../examples/pbt_tune_cifar10_with_keras.py | 2 +- .../examples/tune_mnist_async_hyperband.py | 4 ++-- python/ray/tune/examples/tune_mnist_keras.py | 2 +- .../tune/examples/tune_mnist_ray_hyperband.py | 4 ++-- python/ray/tune/experiment.py | 19 ++++++++++++++++--- python/ray/tune/suggest/basic_variant.py | 2 +- python/ray/tune/suggest/hyperopt.py | 2 +- python/ray/tune/suggest/suggestion.py | 2 +- python/ray/tune/test/trial_runner_test.py | 6 +++--- 19 files changed, 41 insertions(+), 28 deletions(-) diff --git a/doc/source/tune-usage.rst b/doc/source/tune-usage.rst index b3be494a8..a765ca23e 100644 --- a/doc/source/tune-usage.rst +++ b/doc/source/tune-usage.rst @@ -72,7 +72,7 @@ dictionary. Tune will convert the dict into an ``ray.tune.Experiment`` object. "beta": tune.grid_search([1, 2]), }, "trial_resources": { "cpu": 1, "gpu": 0 }, - "repeat": 10, + "num_samples": 10, "local_dir": "~/ray_results", "upload_dir": "s3://your_bucket/path", "checkpoint_freq": 10, @@ -165,7 +165,7 @@ For more information on variant generation, see `basic_variant.py >> "cpu": 1, >>> "gpu": 0 >>> }, - >>> repeat=10, + >>> num_samples=10, >>> local_dir="~/ray_results", >>> upload_dir="s3://your_bucket/path", >>> checkpoint_freq=10, @@ -73,6 +78,7 @@ class Experiment(object): config=None, trial_resources=None, repeat=1, + num_samples=1, local_dir=None, upload_dir="", checkpoint_freq=0, @@ -83,7 +89,7 @@ class Experiment(object): "stop": stop or {}, "config": config or {}, "trial_resources": trial_resources, - "repeat": repeat, + "num_samples": num_samples, "local_dir": local_dir or DEFAULT_RESULTS_DIR, "upload_dir": upload_dir, "checkpoint_freq": checkpoint_freq, @@ -105,6 +111,13 @@ class Experiment(object): if "run" not in spec: raise TuneError("No trainable specified!") + if "repeat" in spec: + raise DeprecationWarning("The parameter `repeat` is deprecated; \ + converting to `num_samples`. `repeat` will be removed in \ + future versions of Ray.") + spec["num_samples"] = spec["repeat"] + del spec["repeat"] + # Special case the `env` param for RLlib by automatically # moving it into the `config` section. if "env" in spec: diff --git a/python/ray/tune/suggest/basic_variant.py b/python/ray/tune/suggest/basic_variant.py index 4cb652be4..63bdbb7bb 100644 --- a/python/ray/tune/suggest/basic_variant.py +++ b/python/ray/tune/suggest/basic_variant.py @@ -65,7 +65,7 @@ class BasicVariantGenerator(SearchAlgorithm): if "run" not in unresolved_spec: raise TuneError("Must specify `run` in {}".format(unresolved_spec)) - for _ in range(unresolved_spec.get("repeat", 1)): + for _ in range(unresolved_spec.get("num_samples", 1)): for resolved_vars, spec in generate_variants(unresolved_spec): experiment_tag = str(self._counter) if resolved_vars: diff --git a/python/ray/tune/suggest/hyperopt.py b/python/ray/tune/suggest/hyperopt.py index 26291c1ef..45fe9753e 100644 --- a/python/ray/tune/suggest/hyperopt.py +++ b/python/ray/tune/suggest/hyperopt.py @@ -39,7 +39,7 @@ class HyperOptSearch(SuggestionAlgorithm): >>> config = { >>> "my_exp": { >>> "run": "exp", - >>> "repeat": 10 if args.smoke_test else 1000, + >>> "num_samples": 10 if args.smoke_test else 1000, >>> "stop": { >>> "training_iteration": 100 >>> }, diff --git a/python/ray/tune/suggest/suggestion.py b/python/ray/tune/suggest/suggestion.py index d2c682b22..31ab844cd 100644 --- a/python/ray/tune/suggest/suggestion.py +++ b/python/ray/tune/suggest/suggestion.py @@ -81,7 +81,7 @@ class SuggestionAlgorithm(SearchAlgorithm): """ if "run" not in experiment_spec: raise TuneError("Must specify `run` in {}".format(experiment_spec)) - for _ in range(experiment_spec.get("repeat", 1)): + for _ in range(experiment_spec.get("num_samples", 1)): trial_id = Trial.generate_id() while True: suggested_config = self._suggest(trial_id) diff --git a/python/ray/tune/test/trial_runner_test.py b/python/ray/tune/test/trial_runner_test.py index e7814a20c..d2930a0b3 100644 --- a/python/ray/tune/test/trial_runner_test.py +++ b/python/ray/tune/test/trial_runner_test.py @@ -522,7 +522,7 @@ class VariantGeneratorTest(unittest.TestCase): def testParseToTrials(self): trials = self.generate_trials({ "run": "PPO", - "repeat": 2, + "num_samples": 2, "max_failures": 5, "config": { "env": "Pong-v0", @@ -651,7 +651,7 @@ class VariantGeneratorTest(unittest.TestCase): """Checks that next_trials() supports throttling.""" experiment_spec = { "run": "PPO", - "repeat": 6, + "num_samples": 6, } experiments = [Experiment.from_json("test", experiment_spec)] @@ -1133,7 +1133,7 @@ class TrialRunnerTest(unittest.TestCase): ray.init(num_cpus=4, num_gpus=2) experiment_spec = { "run": "__fake", - "repeat": 3, + "num_samples": 3, "stop": { "training_iteration": 1 }