From 81bed0fef8071b9776c6aa9dc738308efc2e8d02 Mon Sep 17 00:00:00 2001 From: Eric Liang Date: Sun, 26 Nov 2017 10:57:32 -0800 Subject: [PATCH] [tune] Add internal implementation overview + image for task timeline (#1254) --- doc/source/timeline.png | Bin 0 -> 54620 bytes doc/source/tune.rst | 2 +- doc/source/webui.rst | 5 +++++ python/ray/rllib/README.rst | 6 +++--- python/ray/tune/README.rst | 24 +++++++++++++++++++++++- 5 files changed, 32 insertions(+), 5 deletions(-) create mode 100644 doc/source/timeline.png diff --git a/doc/source/timeline.png b/doc/source/timeline.png new file mode 100644 index 0000000000000000000000000000000000000000..8acabda9d190944e56ce858efd055aa777ff22d7 GIT binary patch literal 54620 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 z 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 XN#bf}f)o%fB5aO!uC{cWi^+ci1|o~p literal 0 HcmV?d00001 diff --git a/doc/source/tune.rst b/doc/source/tune.rst index 78a4e1e17..593416d0c 100644 --- a/doc/source/tune.rst +++ b/doc/source/tune.rst @@ -1,4 +1,4 @@ -Ray.tune: Efficient distributed hyperparameter search +Ray.tune: Efficient Distributed Hyperparameter Search ===================================================== This document describes Ray.tune, a hyperparameter tuning tool for long-running tasks such as RL and deep learning training. It has the following features: diff --git a/doc/source/webui.rst b/doc/source/webui.rst index cd4cb1b3a..5db73cf52 100644 --- a/doc/source/webui.rst +++ b/doc/source/webui.rst @@ -1,6 +1,11 @@ Web UI ====== +The Ray web UI includes tools for debugging Ray jobs. The following +image shows an example of using the task timeline for performance debugging: + +.. image:: timeline.png + Dependencies ------------ diff --git a/python/ray/rllib/README.rst b/python/ray/rllib/README.rst index 56e27c718..7eb108287 100644 --- a/python/ray/rllib/README.rst +++ b/python/ray/rllib/README.rst @@ -1,5 +1,5 @@ -RLLib: Ray's modular and scalable reinforcement learning library -================================================================ +RLLib: A Scalable Reinforcement Learning Library +================================================ Getting Started --------------- @@ -28,4 +28,4 @@ The available algorithms are: `A3C `__ based on `the OpenAI starter agent `__. -Documentation can be `found here `__. +User documentation can be `found here `__. diff --git a/python/ray/tune/README.rst b/python/ray/tune/README.rst index 9c3970264..697ad6973 100644 --- a/python/ray/tune/README.rst +++ b/python/ray/tune/README.rst @@ -3,4 +3,26 @@ Ray.tune: Efficient distributed hyperparameter search Ray.tune is a hyperparameter tuning tool for long-running tasks such as RL and deep learning training. -Documentation can be `found here `__. +User documentation can be `found here `__. + +Implementation overview +----------------------- + +At a high level, Ray.tune takes in JSON experiment configs (e.g. that defines the grid or random search) +and compiles them into a number of `Trial` objects. It schedules trials on the Ray cluster using a given +`TrialScheduler` implementation (e.g. median stopping rule or HyperBand). + +This is implemented as follows: + +- `variant_generator.py `__ + parses the config and generates the trial variants. + +- `trial.py `__ manages the lifecycle + of the Ray actor responsible for executing the trial. + +- `trial_runner.py `__ tracks scheduling + state for all the trials of an experiment. TrialRunners are usually + created automatically by ``run_experiments(experiment_json)``, which parses and starts the experiments. + +- `trial_scheduler.py `__ + plugs into TrialRunner to implement custom prioritization or early stopping algorithms.