diff --git a/python/ray/tune/BUILD b/python/ray/tune/BUILD index b013dc4e4..52e6d0ed1 100644 --- a/python/ray/tune/BUILD +++ b/python/ray/tune/BUILD @@ -87,7 +87,7 @@ py_test( py_test( name = "test_function_api", - size = "small", + size = "medium", srcs = ["tests/test_function_api.py"], deps = [":tune_lib"], tags = ["exclusive"], diff --git a/python/ray/tune/tests/test_convergence_gaussian_process.py b/python/ray/tune/tests/test_convergence_gaussian_process.py index c81eff8ef..c0abecdd3 100644 --- a/python/ray/tune/tests/test_convergence_gaussian_process.py +++ b/python/ray/tune/tests/test_convergence_gaussian_process.py @@ -1,3 +1,4 @@ +import math import numpy as np import ray @@ -15,33 +16,41 @@ def loss(config, reporter): class ConvergenceTest(unittest.TestCase): """Test convergence in gaussian process.""" + def shutDown(self): + ray.shutdown() + def test_convergence_gaussian_process(self): np.random.seed(0) ray.init(local_mode=True, num_cpus=1, num_gpus=1) - space = { - "x": (0, 20) # This is the space of parameters to explore - } + # This is the space of parameters to explore + space = {"x": tune.uniform(0, 20)} resources_per_trial = {"cpu": 1, "gpu": 0} # Following bayesian optimization - gp = BayesOptSearch( - space, metric="loss", mode="min", random_search_steps=10) + gp = BayesOptSearch(random_search_steps=10) gp.repeat_float_precision = 5 gp = ConcurrencyLimiter(gp, 1) # Execution of the BO. analysis = tune.run( loss, + metric="loss", + mode="min", # stop=EarlyStopping("loss", mode="min", patience=5), search_alg=gp, - config={}, + config=space, num_samples=100, # Number of iterations resources_per_trial=resources_per_trial, raise_on_failed_trial=False, fail_fast=True, verbose=1) - assert len(analysis.trials) == 41 + assert len(analysis.trials) in {13, 43} # it is 43 on the cluster? + assert math.isclose(analysis.best_config["x"], 0, abs_tol=1e-8) - ray.shutdown() + +if __name__ == "__main__": + import pytest + import sys + sys.exit(pytest.main(["-v", __file__])) diff --git a/python/ray/tune/tests/test_function_api.py b/python/ray/tune/tests/test_function_api.py index f7084a1fa..e18ee35e0 100644 --- a/python/ray/tune/tests/test_function_api.py +++ b/python/ray/tune/tests/test_function_api.py @@ -6,7 +6,6 @@ import tempfile import unittest import ray -import ray.cloudpickle as cloudpickle from ray.rllib import _register_all from ray import tune @@ -230,7 +229,7 @@ class FunctionCheckpointingTest(unittest.TestCase): new_trainable2 = wrapped(logger_creator=self.logger_creator) new_trainable2.restore(checkpoint) result = new_trainable2.train() - self.assertEquals(result[TRAINING_ITERATION], 1) + self.assertEqual(result[TRAINING_ITERATION], 1) checkpoint = new_trainable2.save() new_trainable2.stop() @@ -405,14 +404,15 @@ class FunctionApiTest(unittest.TestCase): def testEnabled(self): def train(config, checkpoint_dir=None): is_active = tune.is_session_enabled() + result = {"active": is_active} if is_active: - tune.report(active=is_active) - return is_active + tune.report(**result) + return result - assert train({}) is False + assert train({})["active"] is False analysis = tune.run(train) t = analysis.trials[0] - assert t.last_result["active"] + assert t.last_result["active"], t.last_result def testBlankCheckpoint(self): def train(config, checkpoint_dir=None): @@ -450,11 +450,11 @@ class FunctionApiTest(unittest.TestCase): trial_1, trial_2 = tune.run( with_parameters(train, data=data), num_samples=2).trials - self.assertEquals(data.data[101], 0) - self.assertEquals(trial_1.last_result["metric"], 500_000) - self.assertEquals(trial_1.last_result["hundred"], 1) - self.assertEquals(trial_2.last_result["metric"], 500_000) - self.assertEquals(trial_2.last_result["hundred"], 1) + self.assertEqual(data.data[101], 0) + self.assertEqual(trial_1.last_result["metric"], 500_000) + self.assertEqual(trial_1.last_result["hundred"], 1) + self.assertEqual(trial_2.last_result["metric"], 500_000) + self.assertEqual(trial_2.last_result["hundred"], 1) self.assertTrue(str(trial_1).startswith("train_")) # With checkpoint dir parameter @@ -465,11 +465,11 @@ class FunctionApiTest(unittest.TestCase): trial_1, trial_2 = tune.run( with_parameters(train, data=data), num_samples=2).trials - self.assertEquals(data.data[101], 0) - self.assertEquals(trial_1.last_result["metric"], 500_000) - 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") + self.assertEqual(data.data[101], 0) + self.assertEqual(trial_1.last_result["metric"], 500_000) + self.assertEqual(trial_1.last_result["cp"], "DIR") + self.assertEqual(trial_2.last_result["metric"], 500_000) + self.assertEqual(trial_2.last_result["cp"], "DIR") self.assertTrue(str(trial_1).startswith("train_")) def testWithParameters2(self): @@ -482,7 +482,9 @@ class FunctionApiTest(unittest.TestCase): tune.report(metric=len(data.data)) trainable = tune.with_parameters(train, data=Data()) - dumped = cloudpickle.dumps(trainable) + # ray.cloudpickle will crash for some reason + import cloudpickle as cp + dumped = cp.dumps(trainable) assert sys.getsizeof(dumped) < 100 * 1024 def testReturnAnonymous(self): @@ -494,8 +496,8 @@ class FunctionApiTest(unittest.TestCase): "a": tune.grid_search([4, 8]) }).trials - self.assertEquals(trial_1.last_result[DEFAULT_METRIC], 4) - self.assertEquals(trial_2.last_result[DEFAULT_METRIC], 8) + self.assertEqual(trial_1.last_result[DEFAULT_METRIC], 4) + self.assertEqual(trial_2.last_result[DEFAULT_METRIC], 8) def testReturnSpecific(self): def train(config): @@ -506,8 +508,8 @@ class FunctionApiTest(unittest.TestCase): "a": tune.grid_search([4, 8]) }).trials - self.assertEquals(trial_1.last_result["m"], 4) - self.assertEquals(trial_2.last_result["m"], 8) + self.assertEqual(trial_1.last_result["m"], 4) + self.assertEqual(trial_2.last_result["m"], 8) def testYieldAnonymous(self): def train(config): @@ -519,8 +521,8 @@ class FunctionApiTest(unittest.TestCase): "a": tune.grid_search([4, 8]) }).trials - self.assertEquals(trial_1.last_result[DEFAULT_METRIC], 4 + 9) - self.assertEquals(trial_2.last_result[DEFAULT_METRIC], 8 + 9) + self.assertEqual(trial_1.last_result[DEFAULT_METRIC], 4 + 9) + self.assertEqual(trial_2.last_result[DEFAULT_METRIC], 8 + 9) def testYieldSpecific(self): def train(config): @@ -532,5 +534,10 @@ class FunctionApiTest(unittest.TestCase): "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) + self.assertEqual(trial_1.last_result["m"], 4 + 9) + self.assertEqual(trial_2.last_result["m"], 8 + 9) + + +if __name__ == "__main__": + import pytest + sys.exit(pytest.main(["-v", __file__]))