[tune] Ray Tune API cleanup (#1454)

Remove rllib dep: trainable is now a standalone abstract class that can be easily subclassed.

Clean up hyperband: fix debug string and add an example.

Remove YAML api / ScriptRunner: this was never really used.

Move ray.init() out of run_experiments(): This provides greater flexibility and should be less confusing since there isn't an implicit init() done there. Note that this is a breaking API change for tune.
This commit is contained in:
Eric Liang
2018-01-24 16:55:17 -08:00
committed by GitHub
parent a1b01ee7fb
commit 173f1d629a
24 changed files with 486 additions and 421 deletions
+18 -20
View File
@@ -2,6 +2,7 @@ from __future__ import absolute_import
from __future__ import division
from __future__ import print_function
import collections
import numpy as np
from ray.tune.trial_scheduler import FIFOScheduler, TrialScheduler
@@ -61,7 +62,8 @@ class HyperBandScheduler(FIFOScheduler):
max_t (int): max time units per trial. Trials will be stopped after
max_t time units (determined by time_attr) have passed.
The HyperBand scheduler automatically tries to determine a
reasonable number of brackets based on this.
reasonable number of brackets based on this. The scheduler will
terminate trials after this time has passed.
"""
def __init__(
@@ -210,7 +212,8 @@ class HyperBandScheduler(FIFOScheduler):
List of trials not used since all trials are tracked as state
of scheduler. If iteration is occupied (ie, no trials to run),
then look into next iteration."""
then look into next iteration.
"""
for hyperband in self._hyperbands:
for bracket in sorted(hyperband,
@@ -222,18 +225,14 @@ class HyperBandScheduler(FIFOScheduler):
return None
def debug_string(self):
# TODO(rliaw): This debug string needs work
brackets = [
"({0}/{1})".format(
len(bracket._live_trials), len(bracket._all_trials))
for band in self._hyperbands for bracket in band]
return " ".join([
"Using HyperBand:",
"num_stopped={}".format(self._num_stopped),
"total_brackets={}".format(
sum(len(band) for band in self._hyperbands)),
" ".join(brackets)
])
out = "Using HyperBand: "
out += "num_stopped={} total_brackets={}".format(
self._num_stopped, sum(len(band) for band in self._hyperbands))
for i, band in enumerate(self._hyperbands):
out += "\nRound #{}:".format(i)
for bracket in band:
out += "\n {}".format(bracket)
return out
class Bracket():
@@ -370,10 +369,9 @@ class Bracket():
status = ", ".join([
"n={}".format(self._n),
"r={}".format(self._r),
"progress={}".format(self.completion_percentage())
"completed={}%".format(int(100 * self.completion_percentage()))
])
return "Bracket({})".format(status)
def debug_string(self):
trials = ", ".join([t.status for t in self._live_trials])
return "{}[{}]".format(self, trials)
counts = collections.Counter()
for t in self._all_trials:
counts[t.status] += 1
return "Bracket({}): {}".format(status, dict(counts))