From f0ed1c16740a9f95c8de5593fde762b1af8264b4 Mon Sep 17 00:00:00 2001 From: Richard Liaw Date: Mon, 2 Jul 2018 08:20:53 -0700 Subject: [PATCH] [rllib] Add more regression tests and autogenerate (#2324) --- .../generate_regression_tests.py | 29 +++++++++++ .../cartpole-a3c-pytorch.yaml | 1 + .../regression_tests/cartpole-a3c.yaml | 1 + .../regression_tests/cartpole-dqn.yaml | 1 + .../regression_tests/cartpole-pg.yaml | 1 + .../regression_tests/cartpole-ppo.yaml | 1 + .../regression_tests/pendulum-ddpg.yaml | 1 + .../regression_tests/pendulum-ppo.yaml | 19 +++++++ .../regression_tests/regression_test.py | 49 ------------------- test/jenkins_tests/run_rllib_asv.sh | 1 + 10 files changed, 55 insertions(+), 49 deletions(-) create mode 100755 python/ray/rllib/tuned_examples/generate_regression_tests.py create mode 100644 python/ray/rllib/tuned_examples/regression_tests/pendulum-ppo.yaml diff --git a/python/ray/rllib/tuned_examples/generate_regression_tests.py b/python/ray/rllib/tuned_examples/generate_regression_tests.py new file mode 100755 index 000000000..12cbe2d61 --- /dev/null +++ b/python/ray/rllib/tuned_examples/generate_regression_tests.py @@ -0,0 +1,29 @@ +#!/usr/bin/env python +# This script generates all the regression tests for RLlib. + +import glob +import re +import os +import os.path as osp + + +CONFIG_DIR = osp.join(osp.dirname(osp.abspath(__file__)), "regression_tests") + + +TEMPLATE = """ +class Test{name}(Regression): + _file = "{filename}" + + def setup_cache(self): + return _evaulate_config(self._file) + +""" + +if __name__ == '__main__': + os.chdir(CONFIG_DIR) + + with open("regression_test.py", "a") as f: + for filename in sorted(glob.glob("*.yaml")): + splits = re.findall(r"\w+", osp.splitext(filename)[0]) + test_name = "".join([s.capitalize() for s in splits]) + f.write(TEMPLATE.format(name=test_name, filename=filename)) diff --git a/python/ray/rllib/tuned_examples/regression_tests/cartpole-a3c-pytorch.yaml b/python/ray/rllib/tuned_examples/regression_tests/cartpole-a3c-pytorch.yaml index a25da3c77..8c38e1c90 100644 --- a/python/ray/rllib/tuned_examples/regression_tests/cartpole-a3c-pytorch.yaml +++ b/python/ray/rllib/tuned_examples/regression_tests/cartpole-a3c-pytorch.yaml @@ -1,6 +1,7 @@ cartpole-a3c: env: CartPole-v0 run: A3C + repeat: 3 stop: episode_reward_mean: 200 time_total_s: 600 diff --git a/python/ray/rllib/tuned_examples/regression_tests/cartpole-a3c.yaml b/python/ray/rllib/tuned_examples/regression_tests/cartpole-a3c.yaml index f20ea73c3..d59078acc 100644 --- a/python/ray/rllib/tuned_examples/regression_tests/cartpole-a3c.yaml +++ b/python/ray/rllib/tuned_examples/regression_tests/cartpole-a3c.yaml @@ -1,6 +1,7 @@ cartpole-a3c: env: CartPole-v0 run: A3C + repeat: 3 stop: episode_reward_mean: 200 time_total_s: 600 diff --git a/python/ray/rllib/tuned_examples/regression_tests/cartpole-dqn.yaml b/python/ray/rllib/tuned_examples/regression_tests/cartpole-dqn.yaml index 04aa2dc6e..413773c72 100644 --- a/python/ray/rllib/tuned_examples/regression_tests/cartpole-dqn.yaml +++ b/python/ray/rllib/tuned_examples/regression_tests/cartpole-dqn.yaml @@ -1,6 +1,7 @@ cartpole-dqn: env: CartPole-v0 run: DQN + repeat: 3 stop: episode_reward_mean: 200 time_total_s: 600 diff --git a/python/ray/rllib/tuned_examples/regression_tests/cartpole-pg.yaml b/python/ray/rllib/tuned_examples/regression_tests/cartpole-pg.yaml index 2bf9e7548..ab3af6eb3 100644 --- a/python/ray/rllib/tuned_examples/regression_tests/cartpole-pg.yaml +++ b/python/ray/rllib/tuned_examples/regression_tests/cartpole-pg.yaml @@ -1,6 +1,7 @@ cartpole-pg: env: CartPole-v0 run: PG + repeat: 3 stop: episode_reward_mean: 200 time_total_s: 300 diff --git a/python/ray/rllib/tuned_examples/regression_tests/cartpole-ppo.yaml b/python/ray/rllib/tuned_examples/regression_tests/cartpole-ppo.yaml index 425958e5c..9b2b5c8b1 100644 --- a/python/ray/rllib/tuned_examples/regression_tests/cartpole-ppo.yaml +++ b/python/ray/rllib/tuned_examples/regression_tests/cartpole-ppo.yaml @@ -1,6 +1,7 @@ cartpole-ppo: env: CartPole-v0 run: PPO + repeat: 3 stop: episode_reward_mean: 200 time_total_s: 300 diff --git a/python/ray/rllib/tuned_examples/regression_tests/pendulum-ddpg.yaml b/python/ray/rllib/tuned_examples/regression_tests/pendulum-ddpg.yaml index 124f756ec..9dd8ea845 100644 --- a/python/ray/rllib/tuned_examples/regression_tests/pendulum-ddpg.yaml +++ b/python/ray/rllib/tuned_examples/regression_tests/pendulum-ddpg.yaml @@ -1,6 +1,7 @@ pendulum-ddpg: env: Pendulum-v0 run: DDPG + repeat: 3 stop: episode_reward_mean: -160 time_total_s: 900 diff --git a/python/ray/rllib/tuned_examples/regression_tests/pendulum-ppo.yaml b/python/ray/rllib/tuned_examples/regression_tests/pendulum-ppo.yaml new file mode 100644 index 000000000..623b9c268 --- /dev/null +++ b/python/ray/rllib/tuned_examples/regression_tests/pendulum-ppo.yaml @@ -0,0 +1,19 @@ +pendulum-ppo: + env: Pendulum-v0 + run: PPO + repeat: 3 + stop: + episode_reward_mean: -160 + # expect -140 within 300-500k steps + timesteps_total: 600000 + config: + timesteps_per_batch: 2048 + num_workers: 4 + lambda: 0.1 + gamma: 0.95 + sgd_stepsize: 0.0003 + sgd_batchsize: 64 + num_sgd_iter: 10 + model: + fcnet_hiddens: [64, 64] + squash_to_range: True diff --git a/python/ray/rllib/tuned_examples/regression_tests/regression_test.py b/python/ray/rllib/tuned_examples/regression_tests/regression_test.py index dc2e7e940..cc726aa35 100644 --- a/python/ray/rllib/tuned_examples/regression_tests/regression_test.py +++ b/python/ray/rllib/tuned_examples/regression_tests/regression_test.py @@ -51,52 +51,3 @@ class Regression(): def track_iterations(self, result): return result["training_iteration"] - - -class TestCartPolePPO(Regression): - _file = "cartpole-ppo.yaml" - - def setup_cache(self): - return _evaulate_config(self._file) - - -class TestCartPolePG(Regression): - _file = "cartpole-pg.yaml" - - def setup_cache(self): - return _evaulate_config(self._file) - - -class TestPendulumDDPG(Regression): - _file = "pendulum-ddpg.yaml" - - def setup_cache(self): - return _evaulate_config(self._file) - - -class TestCartPoleES(Regression): - _file = "cartpole-es.yaml" - - def setup_cache(self): - return _evaulate_config(self._file) - - -class TestCartPoleDQN(Regression): - _file = "cartpole-dqn.yaml" - - def setup_cache(self): - return _evaulate_config(self._file) - - -class TestCartPoleA3C(Regression): - _file = "cartpole-a3c.yaml" - - def setup_cache(self): - return _evaulate_config(self._file) - - -class TestCartPoleA3CPyTorch(Regression): - _file = "cartpole-a3c-pytorch.yaml" - - def setup_cache(self): - return _evaulate_config(self._file) diff --git a/test/jenkins_tests/run_rllib_asv.sh b/test/jenkins_tests/run_rllib_asv.sh index 2788bc3c6..0eada92b0 100755 --- a/test/jenkins_tests/run_rllib_asv.sh +++ b/test/jenkins_tests/run_rllib_asv.sh @@ -22,6 +22,7 @@ asv machine --machine jenkins mkdir $RLLIB_RESULTS_DIR || true aws s3 cp s3://$BUCKET_NAME/RLLIB_RESULTS/benchmarks.json $RLLIB_RESULTS_DIR/benchmarks.json || true +./tuned_examples/generate_regression_tests.py asv run --show-stderr --python=same --force-record-commit=$COMMIT aws s3 cp $RLLIB_RESULTS_DIR/benchmarks.json s3://$BUCKET_NAME/RLLIB_RESULTS/benchmarks_$COMMIT.json