From 471882dc869e57a87fcbb2f5b8c61121f6bb46be Mon Sep 17 00:00:00 2001 From: Eric Liang Date: Mon, 27 May 2019 20:59:36 -0700 Subject: [PATCH 1/9] disallow it --- python/ray/tune/trainable.py | 2 +- python/ray/tune/trial.py | 14 +++++++++++--- 2 files changed, 12 insertions(+), 4 deletions(-) diff --git a/python/ray/tune/trainable.py b/python/ray/tune/trainable.py index c10934896bcc..4fbf7da18853 100644 --- a/python/ray/tune/trainable.py +++ b/python/ray/tune/trainable.py @@ -96,7 +96,7 @@ def default_resource_request(cls, config): allocation, so the user does not need to. """ - return Resources(cpu=1, gpu=0) + return None @classmethod def resource_help(cls, config): diff --git a/python/ray/tune/trial.py b/python/ray/tune/trial.py index 91ea941b8cf0..fe1f12564835 100644 --- a/python/ray/tune/trial.py +++ b/python/ray/tune/trial.py @@ -275,9 +275,17 @@ def __init__(self, self.config = config or {} self.local_dir = local_dir # This remains unexpanded for syncing. self.experiment_tag = experiment_tag - self.resources = ( - resources - or self._get_trainable_cls().default_resource_request(self.config)) + trainable_cls = self._get_trainable_cls() + self.resources = trainable_cls.default_resource_request(self.config) + if self.resources: + if resources: + raise ValueError( + "Resources for {} have been automatically set to {} " + "by its `default_resource_request()` method. Please " + "clear the `resources_per_trial` option.".format( + trainable_cls, self.resources)) + else: + self.resources = Resources(cpu=1, gpu=0) self.stopping_criterion = stopping_criterion or {} self.upload_dir = upload_dir self.loggers = loggers From d8752f35bfc8427da8645cb94788f1aec6e1b7c5 Mon Sep 17 00:00:00 2001 From: Eric Liang Date: Mon, 27 May 2019 21:03:54 -0700 Subject: [PATCH 2/9] import fix --- python/ray/tune/trainable.py | 1 - 1 file changed, 1 deletion(-) diff --git a/python/ray/tune/trainable.py b/python/ray/tune/trainable.py index 4fbf7da18853..bb70e2b39434 100644 --- a/python/ray/tune/trainable.py +++ b/python/ray/tune/trainable.py @@ -21,7 +21,6 @@ TIMESTEPS_THIS_ITER, DONE, TIMESTEPS_TOTAL, EPISODES_THIS_ITER, EPISODES_TOTAL, TRAINING_ITERATION, RESULT_DUPLICATE) -from ray.tune.trial import Resources logger = logging.getLogger(__name__) From b7d7b6d487f7105bb2c2c28a914b1df1a8ccc5a4 Mon Sep 17 00:00:00 2001 From: Eric Liang Date: Mon, 27 May 2019 21:08:05 -0700 Subject: [PATCH 3/9] fix example --- python/ray/rllib/examples/custom_train_fn.py | 16 ++++++---------- python/ray/tune/trial.py | 3 +++ 2 files changed, 9 insertions(+), 10 deletions(-) diff --git a/python/ray/rllib/examples/custom_train_fn.py b/python/ray/rllib/examples/custom_train_fn.py index 3ae418ee7252..cc7b55e70d5d 100644 --- a/python/ray/rllib/examples/custom_train_fn.py +++ b/python/ray/rllib/examples/custom_train_fn.py @@ -40,13 +40,9 @@ def my_train_fn(config, reporter): if __name__ == "__main__": ray.init() - tune.run( - my_train_fn, - resources_per_trial={ - "cpu": 1, - }, - config={ - "lr": 0.01, - "num_workers": 0, - }, - ) + config = { + "lr": 0.01, + "num_workers": 0, + } + resources = PPOTrainer.default_resource_request(config).to_json() + tune.run(my_train_fn, resources_per_trial=resources, config=config) diff --git a/python/ray/tune/trial.py b/python/ray/tune/trial.py index fe1f12564835..bd7b7876fa62 100644 --- a/python/ray/tune/trial.py +++ b/python/ray/tune/trial.py @@ -139,6 +139,9 @@ def subtract(cls, original, to_remove): return Resources(cpu, gpu, extra_cpu, extra_gpu, new_custom_res, extra_custom_res) + def to_json(self): + return resources_to_json(self) + def json_to_resources(data): if data is None or data == "null": From 879d12facd1376660b18c37425050d056c806d83 Mon Sep 17 00:00:00 2001 From: Eric Liang Date: Wed, 29 May 2019 15:12:04 -0700 Subject: [PATCH 4/9] fix test --- python/ray/tune/trial.py | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/python/ray/tune/trial.py b/python/ray/tune/trial.py index bd7b7876fa62..d28de0d8bb68 100644 --- a/python/ray/tune/trial.py +++ b/python/ray/tune/trial.py @@ -279,7 +279,12 @@ def __init__(self, self.local_dir = local_dir # This remains unexpanded for syncing. self.experiment_tag = experiment_tag trainable_cls = self._get_trainable_cls() - self.resources = trainable_cls.default_resource_request(self.config) + if trainable_cls and hasattr(trainable_cls, + "default_resource_request"): + self.resources = trainable_cls.default_resource_request( + self.config) + else: + self.resources = None if self.resources: if resources: raise ValueError( From 6060f9a1093a4357148c577a1d16380aea0c0eba Mon Sep 17 00:00:00 2001 From: Eric Liang Date: Wed, 29 May 2019 17:53:34 -0700 Subject: [PATCH 5/9] fix tests --- python/ray/rllib/agents/mock.py | 3 +++ 1 file changed, 3 insertions(+) diff --git a/python/ray/rllib/agents/mock.py b/python/ray/rllib/agents/mock.py index 8cd8c08b4695..3b8d7a83ddac 100644 --- a/python/ray/rllib/agents/mock.py +++ b/python/ray/rllib/agents/mock.py @@ -20,6 +20,9 @@ class _MockTrainer(Trainer): "num_workers": 0, }) + def default_resource_request(cls, config): + return None + def _init(self, config, env_creator): self.info = None self.restored = False From 4393d3dd40b90987be33ac73a51b733bc019f754 Mon Sep 17 00:00:00 2001 From: Eric Liang Date: Wed, 29 May 2019 20:28:30 -0700 Subject: [PATCH 6/9] Update mock.py --- python/ray/rllib/agents/mock.py | 1 + 1 file changed, 1 insertion(+) diff --git a/python/ray/rllib/agents/mock.py b/python/ray/rllib/agents/mock.py index 3b8d7a83ddac..0b7d77c2a76f 100644 --- a/python/ray/rllib/agents/mock.py +++ b/python/ray/rllib/agents/mock.py @@ -20,6 +20,7 @@ class _MockTrainer(Trainer): "num_workers": 0, }) + @classmethod def default_resource_request(cls, config): return None From ea470e9a714e13d579ee9cee8254217a960d8a60 Mon Sep 17 00:00:00 2001 From: Eric Liang Date: Thu, 30 May 2019 10:44:10 -0700 Subject: [PATCH 7/9] fix --- python/ray/tune/trial.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/python/ray/tune/trial.py b/python/ray/tune/trial.py index d28de0d8bb68..158c8aa53fe4 100644 --- a/python/ray/tune/trial.py +++ b/python/ray/tune/trial.py @@ -293,7 +293,7 @@ def __init__(self, "clear the `resources_per_trial` option.".format( trainable_cls, self.resources)) else: - self.resources = Resources(cpu=1, gpu=0) + self.resources = resources or Resources(cpu=1, gpu=0) self.stopping_criterion = stopping_criterion or {} self.upload_dir = upload_dir self.loggers = loggers From 70350a70e6be219047bd859393cc69c48e72d992 Mon Sep 17 00:00:00 2001 From: Eric Liang Date: Sat, 1 Jun 2019 18:04:55 +0900 Subject: [PATCH 8/9] make less convoluted --- python/ray/tune/trial.py | 13 +++++-------- 1 file changed, 5 insertions(+), 8 deletions(-) diff --git a/python/ray/tune/trial.py b/python/ray/tune/trial.py index 158c8aa53fe4..ec65c56d4c9f 100644 --- a/python/ray/tune/trial.py +++ b/python/ray/tune/trial.py @@ -281,19 +281,16 @@ def __init__(self, trainable_cls = self._get_trainable_cls() if trainable_cls and hasattr(trainable_cls, "default_resource_request"): - self.resources = trainable_cls.default_resource_request( + default_resources = trainable_cls.default_resource_request( self.config) - else: - self.resources = None - if self.resources: - if resources: + if default_resources and resources: raise ValueError( "Resources for {} have been automatically set to {} " "by its `default_resource_request()` method. Please " "clear the `resources_per_trial` option.".format( - trainable_cls, self.resources)) - else: - self.resources = resources or Resources(cpu=1, gpu=0) + trainable_cls, default_resources)) + resources = default_resources + self.resources = resources or Resources(cpu=1, gpu=0) self.stopping_criterion = stopping_criterion or {} self.upload_dir = upload_dir self.loggers = loggers From 00f2a6694daa2cf18683b37eaf19f9218cc3a87a Mon Sep 17 00:00:00 2001 From: Eric Liang Date: Sun, 2 Jun 2019 15:09:33 +0900 Subject: [PATCH 9/9] fix tests --- python/ray/tune/trial.py | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/python/ray/tune/trial.py b/python/ray/tune/trial.py index ec65c56d4c9f..cb9351f9adf8 100644 --- a/python/ray/tune/trial.py +++ b/python/ray/tune/trial.py @@ -283,13 +283,14 @@ def __init__(self, "default_resource_request"): default_resources = trainable_cls.default_resource_request( self.config) - if default_resources and resources: - raise ValueError( - "Resources for {} have been automatically set to {} " - "by its `default_resource_request()` method. Please " - "clear the `resources_per_trial` option.".format( - trainable_cls, default_resources)) - resources = default_resources + if default_resources: + if resources: + raise ValueError( + "Resources for {} have been automatically set to {} " + "by its `default_resource_request()` method. Please " + "clear the `resources_per_trial` option.".format( + trainable_cls, default_resources)) + resources = default_resources self.resources = resources or Resources(cpu=1, gpu=0) self.stopping_criterion = stopping_criterion or {} self.upload_dir = upload_dir