mirror of
https://github.com/wassname/ray.git
synced 2026-08-11 11:24:51 +08:00
[tune] Async restores and S3/GCP-capable trial FT (#6376)
* Initial commit for asynchronous save/restore * Set stage for cloud checkpointable trainable. * Refactor log_sync and sync_client. * Add durable trainable impl. * Support delete in cmd based client * Fix some tests and such * Cleanup, comments. * Use upload_dir instead. * Revert files belonging to other PR in split. * Pass upload_dir into trainable init. * Pickle checkpoint at driver, more robust checkpoint_dir discovery. * Cleanup trainable helper functions, fix tests. * Addressed comments. * Fix bugs from cluster testing, add parameterized cluster tests. * Add trainable util test * package_ref * pbt_address * Fix bug after running pbt example (_save returning dir). * get cluster tests running, other bug fixes. * raise_errors * Fix deleter bug, add durable trainable example. * Fix cluster test bugs. * filelock * save/restore bug fixes * . * Working cluster tests. * Lint, revert to tracking memory checkpoints. * Documentation, cleanup * fixinitialsync * fix_one_test * Fix cluster test bug * nit * lint * Revert tune md change * Fix basename bug for directories. * lint * fix_tests * nit_fix * Add __init__ file. * Move to utils package Co-authored-by: Richard Liaw <rliaw@berkeley.edu>
This commit is contained in:
committed by
Richard Liaw
co-authored by
Richard Liaw
parent
57061a15cf
commit
ca651af1d7
@@ -10,7 +10,7 @@ import six
|
||||
import types
|
||||
|
||||
from ray.tune.error import TuneError
|
||||
from ray.tune.registry import register_trainable
|
||||
from ray.tune.registry import register_trainable, get_trainable_cls
|
||||
from ray.tune.result import DEFAULT_RESULTS_DIR
|
||||
from ray.tune.sample import sample_from
|
||||
|
||||
@@ -34,6 +34,22 @@ def _raise_deprecation_note(deprecated, replacement, soft=False):
|
||||
raise DeprecationWarning(error_msg)
|
||||
|
||||
|
||||
def _raise_on_durable(trainable_name, sync_to_driver, upload_dir):
|
||||
trainable_cls = get_trainable_cls(trainable_name)
|
||||
from ray.tune.durable_trainable import DurableTrainable
|
||||
if issubclass(trainable_cls, DurableTrainable):
|
||||
if sync_to_driver is not False:
|
||||
raise ValueError(
|
||||
"EXPERIMENTAL: DurableTrainable will automatically sync "
|
||||
"results to the provided upload_dir. "
|
||||
"Set `sync_to_driver=False` to avoid data inconsistencies.")
|
||||
if not upload_dir:
|
||||
raise ValueError(
|
||||
"EXPERIMENTAL: DurableTrainable will automatically sync "
|
||||
"results to the provided upload_dir. "
|
||||
"`upload_dir` must be provided.")
|
||||
|
||||
|
||||
class Experiment:
|
||||
"""Tracks experiment specifications.
|
||||
|
||||
@@ -109,6 +125,14 @@ class Experiment:
|
||||
|
||||
config = config or {}
|
||||
self._run_identifier = Experiment.register_if_needed(run)
|
||||
self.name = name or self._run_identifier
|
||||
if upload_dir:
|
||||
self.remote_checkpoint_dir = os.path.join(upload_dir, self.name)
|
||||
else:
|
||||
self.remote_checkpoint_dir = None
|
||||
|
||||
_raise_on_durable(self._run_identifier, sync_to_driver, upload_dir)
|
||||
|
||||
spec = {
|
||||
"run": self._run_identifier,
|
||||
"stop": stop,
|
||||
@@ -118,6 +142,7 @@ class Experiment:
|
||||
"local_dir": os.path.abspath(
|
||||
os.path.expanduser(local_dir or DEFAULT_RESULTS_DIR)),
|
||||
"upload_dir": upload_dir,
|
||||
"remote_checkpoint_dir": self.remote_checkpoint_dir,
|
||||
"trial_name_creator": trial_name_creator,
|
||||
"loggers": loggers,
|
||||
"sync_to_driver": sync_to_driver,
|
||||
@@ -131,8 +156,6 @@ class Experiment:
|
||||
"restore": os.path.abspath(os.path.expanduser(restore))
|
||||
if restore else None
|
||||
}
|
||||
|
||||
self.name = name or self._run_identifier
|
||||
self.spec = spec
|
||||
|
||||
@classmethod
|
||||
@@ -204,11 +227,6 @@ class Experiment:
|
||||
if self.local_dir:
|
||||
return os.path.join(self.local_dir, self.name)
|
||||
|
||||
@property
|
||||
def remote_checkpoint_dir(self):
|
||||
if self.spec["upload_dir"]:
|
||||
return os.path.join(self.spec["upload_dir"], self.name)
|
||||
|
||||
@property
|
||||
def run_identifier(self):
|
||||
"""Returns a string representing the trainable identifier."""
|
||||
|
||||
Reference in New Issue
Block a user