[tune] Support yield and return statements (#10857)

* Support `yield` and `return` statements in Tune trainable functions

* Support anonymous metric with ``tune.report(value)``

* Raise on invalid return/yield value

* Fix end to end reporter test
This commit is contained in:
Kai Fricke
2020-09-17 20:18:35 -07:00
committed by GitHub
parent 5cbc411e38
commit 508cfa3540
5 changed files with 172 additions and 45 deletions
@@ -467,3 +467,53 @@ class FunctionApiTest(unittest.TestCase):
self.assertEquals(trial_1.last_result["cp"], "DIR")
self.assertEquals(trial_2.last_result["metric"], 500_000)
self.assertEquals(trial_2.last_result["cp"], "DIR")
def test_return_anonymous(self):
def train(config):
return config["a"]
trial_1, trial_2 = tune.run(
train, config={
"a": tune.grid_search([4, 8])
}).trials
self.assertEquals(trial_1.last_result["_metric"], 4)
self.assertEquals(trial_2.last_result["_metric"], 8)
def test_return_specific(self):
def train(config):
return {"m": config["a"]}
trial_1, trial_2 = tune.run(
train, config={
"a": tune.grid_search([4, 8])
}).trials
self.assertEquals(trial_1.last_result["m"], 4)
self.assertEquals(trial_2.last_result["m"], 8)
def test_yield_anonymous(self):
def train(config):
for i in range(10):
yield config["a"] + i
trial_1, trial_2 = tune.run(
train, config={
"a": tune.grid_search([4, 8])
}).trials
self.assertEquals(trial_1.last_result["_metric"], 4 + 9)
self.assertEquals(trial_2.last_result["_metric"], 8 + 9)
def test_yield_specific(self):
def train(config):
for i in range(10):
yield {"m": config["a"] + i}
trial_1, trial_2 = tune.run(
train, config={
"a": tune.grid_search([4, 8])
}).trials
self.assertEquals(trial_1.last_result["m"], 4 + 9)
self.assertEquals(trial_2.last_result["m"], 8 + 9)
+37 -35
View File
@@ -48,6 +48,8 @@ END_TO_END_COMMAND = """
import ray
from ray import tune
reporter = tune.progress_reporter.CLIReporter(metric_columns=["done"])
def f(config):
return {"done": True}
@@ -71,7 +73,7 @@ tune.run_experiments({
"c": tune.grid_search(list(range(10))),
},
},
}, verbose=1)"""
}, verbose=1, progress_reporter=reporter)"""
EXPECTED_END_TO_END_START = """Number of trials: 1/30 (1 RUNNING)
+---------------+----------+-------+-----+
@@ -81,40 +83,40 @@ EXPECTED_END_TO_END_START = """Number of trials: 1/30 (1 RUNNING)
+---------------+----------+-------+-----+"""
EXPECTED_END_TO_END_END = """Number of trials: 30/30 (30 TERMINATED)
+---------------+------------+-------+-----+-----+-----+
| Trial name | status | loc | a | b | c |
|---------------+------------+-------+-----+-----+-----|
| f_xxxxx_00000 | TERMINATED | | 0 | | |
| f_xxxxx_00001 | TERMINATED | | 1 | | |
| f_xxxxx_00002 | TERMINATED | | 2 | | |
| f_xxxxx_00003 | TERMINATED | | 3 | | |
| f_xxxxx_00004 | TERMINATED | | 4 | | |
| f_xxxxx_00005 | TERMINATED | | 5 | | |
| f_xxxxx_00006 | TERMINATED | | 6 | | |
| f_xxxxx_00007 | TERMINATED | | 7 | | |
| f_xxxxx_00008 | TERMINATED | | 8 | | |
| f_xxxxx_00009 | TERMINATED | | 9 | | |
| f_xxxxx_00010 | TERMINATED | | | 0 | |
| f_xxxxx_00011 | TERMINATED | | | 1 | |
| f_xxxxx_00012 | TERMINATED | | | 2 | |
| f_xxxxx_00013 | TERMINATED | | | 3 | |
| f_xxxxx_00014 | TERMINATED | | | 4 | |
| f_xxxxx_00015 | TERMINATED | | | 5 | |
| f_xxxxx_00016 | TERMINATED | | | 6 | |
| f_xxxxx_00017 | TERMINATED | | | 7 | |
| f_xxxxx_00018 | TERMINATED | | | 8 | |
| f_xxxxx_00019 | TERMINATED | | | 9 | |
| f_xxxxx_00020 | TERMINATED | | | | 0 |
| f_xxxxx_00021 | TERMINATED | | | | 1 |
| f_xxxxx_00022 | TERMINATED | | | | 2 |
| f_xxxxx_00023 | TERMINATED | | | | 3 |
| f_xxxxx_00024 | TERMINATED | | | | 4 |
| f_xxxxx_00025 | TERMINATED | | | | 5 |
| f_xxxxx_00026 | TERMINATED | | | | 6 |
| f_xxxxx_00027 | TERMINATED | | | | 7 |
| f_xxxxx_00028 | TERMINATED | | | | 8 |
| f_xxxxx_00029 | TERMINATED | | | | 9 |
+---------------+------------+-------+-----+-----+-----+"""
+---------------+------------+-------+-----+-----+-----+--------+
| Trial name | status | loc | a | b | c | done |
|---------------+------------+-------+-----+-----+-----+--------|
| f_xxxxx_00000 | TERMINATED | | 0 | | | True |
| f_xxxxx_00001 | TERMINATED | | 1 | | | True |
| f_xxxxx_00002 | TERMINATED | | 2 | | | True |
| f_xxxxx_00003 | TERMINATED | | 3 | | | True |
| f_xxxxx_00004 | TERMINATED | | 4 | | | True |
| f_xxxxx_00005 | TERMINATED | | 5 | | | True |
| f_xxxxx_00006 | TERMINATED | | 6 | | | True |
| f_xxxxx_00007 | TERMINATED | | 7 | | | True |
| f_xxxxx_00008 | TERMINATED | | 8 | | | True |
| f_xxxxx_00009 | TERMINATED | | 9 | | | True |
| f_xxxxx_00010 | TERMINATED | | | 0 | | True |
| f_xxxxx_00011 | TERMINATED | | | 1 | | True |
| f_xxxxx_00012 | TERMINATED | | | 2 | | True |
| f_xxxxx_00013 | TERMINATED | | | 3 | | True |
| f_xxxxx_00014 | TERMINATED | | | 4 | | True |
| f_xxxxx_00015 | TERMINATED | | | 5 | | True |
| f_xxxxx_00016 | TERMINATED | | | 6 | | True |
| f_xxxxx_00017 | TERMINATED | | | 7 | | True |
| f_xxxxx_00018 | TERMINATED | | | 8 | | True |
| f_xxxxx_00019 | TERMINATED | | | 9 | | True |
| f_xxxxx_00020 | TERMINATED | | | | 0 | True |
| f_xxxxx_00021 | TERMINATED | | | | 1 | True |
| f_xxxxx_00022 | TERMINATED | | | | 2 | True |
| f_xxxxx_00023 | TERMINATED | | | | 3 | True |
| f_xxxxx_00024 | TERMINATED | | | | 4 | True |
| f_xxxxx_00025 | TERMINATED | | | | 5 | True |
| f_xxxxx_00026 | TERMINATED | | | | 6 | True |
| f_xxxxx_00027 | TERMINATED | | | | 7 | True |
| f_xxxxx_00028 | TERMINATED | | | | 8 | True |
| f_xxxxx_00029 | TERMINATED | | | | 9 | True |
+---------------+------------+-------+-----+-----+-----+--------+"""
EXPECTED_END_TO_END_AC = """Number of trials: 30/30 (30 TERMINATED)
+---------------+------------+-------+-----+-----+-----+