From d7220006a1007156ad7d216cc4f84a56b0171d34 Mon Sep 17 00:00:00 2001 From: Yunxuan Xiao Date: Thu, 18 May 2023 01:17:30 -0700 Subject: [PATCH] [AIR] Move Constants from tune/results.py to air/constants.py (#35404) Currently we have result-related constants stored in `ray/tune/result.py`, However, our Result object is defined in `ray/air/result.py`. When we are trying to import constants from `ray/tune/result.py` in `ray/air/result.py`, there will be a cyclic import error: ``` import Result -> import ray.tune.result -> ray.tune.init -> import ResultGrid -> import Result ``` This PR only moves the following constants and changed the import path in all affected files accordingly. In the future, we will gradually move the rest constants along with the module class. Signed-off-by: woshiyyya Signed-off-by: Yunxuan Xiao --- python/ray/air/constants.py | 30 ++++++++++++++++ python/ray/air/integrations/mlflow.py | 3 +- python/ray/train/_internal/checkpoint.py | 2 +- python/ray/train/_internal/session.py | 10 ++++-- python/ray/train/constants.py | 7 ---- python/ray/train/tests/test_examples.py | 2 +- python/ray/train/tests/test_gpu_examples.py | 2 +- python/ray/train/tests/test_mosaic_trainer.py | 2 +- .../ray/tune/analysis/experiment_analysis.py | 10 +++--- .../tune/automl/board/backend/collector.py | 6 ++-- python/ray/tune/cli/commands.py | 3 +- python/ray/tune/execution/trial_runner.py | 4 +-- python/ray/tune/experiment/trial.py | 11 ++++-- python/ray/tune/experimental/output.py | 2 +- python/ray/tune/logger/aim.py | 2 +- python/ray/tune/logger/csv.py | 2 +- python/ray/tune/logger/json.py | 9 +++-- python/ray/tune/logger/tensorboardx.py | 2 +- python/ray/tune/progress_reporter.py | 4 +-- python/ray/tune/result.py | 35 +++++++------------ python/ray/tune/schedulers/pbt.py | 3 +- .../ray/tune/search/optuna/optuna_search.py | 3 +- python/ray/tune/syncer.py | 4 +-- ...st_controller_checkpointing_integration.py | 3 +- .../test_controller_search_alg_integration.py | 2 +- python/ray/tune/tests/test_api.py | 3 +- .../ray/tune/tests/test_checkpoint_manager.py | 2 +- python/ray/tune/tests/test_function_api.py | 3 +- .../test_integration_pytorch_lightning.py | 2 +- python/ray/tune/tests/test_logger.py | 12 +++---- .../ray/tune/tests/test_ray_trial_executor.py | 3 +- python/ray/tune/tests/test_result_grid.py | 3 +- python/ray/tune/tests/test_searchers.py | 2 +- python/ray/tune/tests/test_syncer_callback.py | 3 +- python/ray/tune/tests/test_trial_runner_3.py | 2 +- .../tune/tests/test_trial_runner_callbacks.py | 2 +- python/ray/tune/tests/test_trial_scheduler.py | 2 +- .../ray/tune/trainable/function_trainable.py | 7 ++-- python/ray/tune/trainable/trainable.py | 8 +++-- python/ray/tune/utils/util.py | 2 +- .../horovod/train_horovod_multi_node_test.py | 2 +- 41 files changed, 130 insertions(+), 91 deletions(-) diff --git a/python/ray/air/constants.py b/python/ray/air/constants.py index f4a85ec59d66..c53d476c706b 100644 --- a/python/ray/air/constants.py +++ b/python/ray/air/constants.py @@ -45,6 +45,36 @@ # checkpointing. LAZY_CHECKPOINT_MARKER_FILE = ".lazy_checkpoint_marker" + +# The timestamp of when the result is generated. +# Default to when the result is processed by tune. +TIMESTAMP = "timestamp" + +# (Auto-filled) Time in seconds this iteration took to run. +# This may be overridden to override the system-computed time difference. +TIME_THIS_ITER_S = "time_this_iter_s" + +# (Auto-filled) The index of this training iteration. +TRAINING_ITERATION = "training_iteration" + +# File that stores parameters of the trial. +EXPR_PARAM_FILE = "params.json" + +# Pickle File that stores parameters of the trial. +EXPR_PARAM_PICKLE_FILE = "params.pkl" + +# File that stores the progress of the trial. +EXPR_PROGRESS_FILE = "progress.csv" + +# File that stores results of the trial. +EXPR_RESULT_FILE = "result.json" + +# File that stores the pickled error file +EXPR_ERROR_PICKLE_FILE = "error.pkl" + +# File that stores the error file +EXPR_ERROR_FILE = "error.txt" + # ================================================== # Environment Variables # ================================================== diff --git a/python/ray/air/integrations/mlflow.py b/python/ray/air/integrations/mlflow.py index 1308ebbf8c73..af4d81bf6009 100644 --- a/python/ray/air/integrations/mlflow.py +++ b/python/ray/air/integrations/mlflow.py @@ -6,8 +6,9 @@ from ray.air import session from ray.air._internal.mlflow import _MLflowLoggerUtil from ray.air._internal import usage as air_usage +from ray.air.constants import TRAINING_ITERATION from ray.tune.logger import LoggerCallback -from ray.tune.result import TIMESTEPS_TOTAL, TRAINING_ITERATION +from ray.tune.result import TIMESTEPS_TOTAL from ray.tune.experiment import Trial from ray.util.annotations import PublicAPI diff --git a/python/ray/train/_internal/checkpoint.py b/python/ray/train/_internal/checkpoint.py index 83b92b819cb7..82c25febb8b0 100644 --- a/python/ray/train/_internal/checkpoint.py +++ b/python/ray/train/_internal/checkpoint.py @@ -13,13 +13,13 @@ from ray.train._internal.utils import construct_path from ray.train.constants import ( CHECKPOINT_RANK_KEY, - TIMESTAMP, TRAIN_CHECKPOINT_SUBDIR, TUNE_CHECKPOINT_ID, TUNE_INSTALLED, CHECKPOINT_METADATA_KEY, LAZY_CHECKPOINT_MARKER_FILE, ) +from ray.air.constants import TIMESTAMP if TUNE_INSTALLED: from ray import tune diff --git a/python/ray/train/_internal/session.py b/python/ray/train/_internal/session.py index f13a5a4bb29a..64a4e36cabe1 100644 --- a/python/ray/train/_internal/session.py +++ b/python/ray/train/_internal/session.py @@ -15,7 +15,12 @@ import ray from ray.air._internal.util import StartTraceback, RunnerThread from ray.air.checkpoint import Checkpoint -from ray.air.constants import _RESULT_FETCH_TIMEOUT, _ERROR_FETCH_TIMEOUT +from ray.air.constants import ( + _RESULT_FETCH_TIMEOUT, + _ERROR_FETCH_TIMEOUT, + TIMESTAMP, + TIME_THIS_ITER_S, +) from ray.data import Dataset, DatasetPipeline from ray.train._internal.accelerator import Accelerator from ray.train.constants import ( @@ -26,11 +31,10 @@ WORKER_HOSTNAME, WORKER_NODE_IP, WORKER_PID, - TIME_THIS_ITER_S, TIME_TOTAL_S, - TIMESTAMP, LAZY_CHECKPOINT_MARKER_FILE, ) + from ray.train.error import SessionMisuseError from ray.train.session import _TrainSessionImpl from ray.util.annotations import DeveloperAPI diff --git a/python/ray/train/constants.py b/python/ray/train/constants.py index 1ddba37fd238..f91a9ba71e4a 100644 --- a/python/ray/train/constants.py +++ b/python/ray/train/constants.py @@ -18,13 +18,6 @@ ) # Autofilled session.report() metrics. Keys should be consistent with Tune. -# The train provided `TIME_THIS_ITER_S` and `TIMESTAMP` will triumph what's -# auto-filled by Tune session. -# TODO: Combine the following two with tune's, once there is a centralized -# file for both tune/train constants. -TIMESTAMP = "timestamp" -TIME_THIS_ITER_S = "time_this_iter_s" - TIME_TOTAL_S = "_time_total_s" WORKER_HOSTNAME = "_hostname" diff --git a/python/ray/train/tests/test_examples.py b/python/ray/train/tests/test_examples.py index ca0d6a6efbe4..c057792727bf 100644 --- a/python/ray/train/tests/test_examples.py +++ b/python/ray/train/tests/test_examples.py @@ -1,7 +1,7 @@ import pytest from ray.air.config import ScalingConfig -from ray.tune.result import TRAINING_ITERATION +from ray.air.constants import TRAINING_ITERATION from ray.train.examples.horovod.horovod_example import ( train_func as horovod_torch_train_func, diff --git a/python/ray/train/tests/test_gpu_examples.py b/python/ray/train/tests/test_gpu_examples.py index 6f506b5bdb92..c51e16fec99a 100644 --- a/python/ray/train/tests/test_gpu_examples.py +++ b/python/ray/train/tests/test_gpu_examples.py @@ -4,6 +4,7 @@ from ray.air import Checkpoint, session from ray.air.config import ScalingConfig +from ray.air.constants import TRAINING_ITERATION from ray.train.examples.horovod.horovod_example import ( train_func as horovod_torch_train_func, ) @@ -20,7 +21,6 @@ ) from ray.train.tensorflow.tensorflow_trainer import TensorflowTrainer from ray.train.torch.torch_trainer import TorchTrainer -from ray.tune.result import TRAINING_ITERATION def test_tensorflow_mnist_gpu(ray_start_4_cpus_2_gpus): diff --git a/python/ray/train/tests/test_mosaic_trainer.py b/python/ray/train/tests/test_mosaic_trainer.py index 2c50108f2cda..c5c00515947b 100644 --- a/python/ray/train/tests/test_mosaic_trainer.py +++ b/python/ray/train/tests/test_mosaic_trainer.py @@ -8,9 +8,9 @@ from ray.air import session from ray.air.config import ScalingConfig +from ray.air.constants import TRAINING_ITERATION import ray.train as train from ray.train.trainer import TrainingFailedError -from ray.tune.result import TRAINING_ITERATION scaling_config = ScalingConfig(num_workers=2, use_gpu=False) diff --git a/python/ray/tune/analysis/experiment_analysis.py b/python/ray/tune/analysis/experiment_analysis.py index f3a680ed8374..7e47d74242f8 100644 --- a/python/ray/tune/analysis/experiment_analysis.py +++ b/python/ray/tune/analysis/experiment_analysis.py @@ -15,6 +15,12 @@ ) from ray.air._internal.uri_utils import _join_path_or_uri, URI from ray.air.checkpoint import Checkpoint +from ray.air.constants import ( + EXPR_PROGRESS_FILE, + EXPR_RESULT_FILE, + EXPR_PARAM_FILE, + TRAINING_ITERATION, +) from ray.tune.syncer import SyncConfig from ray.tune.utils import flatten_dict from ray.tune.utils.serialization import TuneFunctionDecoder @@ -31,11 +37,7 @@ from ray.tune.error import TuneError from ray.tune.result import ( DEFAULT_METRIC, - EXPR_PROGRESS_FILE, - EXPR_RESULT_FILE, - EXPR_PARAM_FILE, CONFIG_PREFIX, - TRAINING_ITERATION, ) from ray.tune.experiment import Trial from ray.tune.execution.trial_runner import _find_newest_experiment_checkpoint diff --git a/python/ray/tune/automl/board/backend/collector.py b/python/ray/tune/automl/board/backend/collector.py index d545fc32171d..5f1368744a36 100644 --- a/python/ray/tune/automl/board/backend/collector.py +++ b/python/ray/tune/automl/board/backend/collector.py @@ -4,6 +4,10 @@ from threading import Thread +from ray.air.constants import ( + EXPR_PARAM_FILE, + EXPR_RESULT_FILE, +) from ray.tune.automl.board.common.exception import CollectorError from ray.tune.automl.board.common.utils import ( parse_json, @@ -14,8 +18,6 @@ from ray.tune.result import ( DEFAULT_RESULTS_DIR, JOB_META_FILE, - EXPR_PARAM_FILE, - EXPR_RESULT_FILE, EXPR_META_FILE, ) diff --git a/python/ray/tune/cli/commands.py b/python/ray/tune/cli/commands.py index f1a821c2571e..959e3e17b7ba 100644 --- a/python/ray/tune/cli/commands.py +++ b/python/ray/tune/cli/commands.py @@ -10,6 +10,7 @@ import pandas as pd from pandas.api.types import is_string_dtype, is_numeric_dtype +from ray.air.constants import EXPR_RESULT_FILE from ray.tune.result import ( DEFAULT_EXPERIMENT_INFO_KEYS, DEFAULT_RESULT_KEYS, @@ -223,7 +224,7 @@ def list_experiments( for experiment_dir in experiment_folders: num_trials = sum( - "result.json" in files + EXPR_RESULT_FILE in files for _, _, files in os.walk(os.path.join(base, experiment_dir)) ) diff --git a/python/ray/tune/execution/trial_runner.py b/python/ray/tune/execution/trial_runner.py index 196291a21a53..5c2e79ead672 100644 --- a/python/ray/tune/execution/trial_runner.py +++ b/python/ray/tune/execution/trial_runner.py @@ -12,8 +12,9 @@ import ray from ray.air._internal.uri_utils import URI -from ray.air.config import CheckpointConfig from ray.air._internal.checkpoint_manager import CheckpointStorage, _TrackedCheckpoint +from ray.air.config import CheckpointConfig +from ray.air.constants import TIME_THIS_ITER_S from ray.exceptions import RayTaskError from ray.tune.error import _TuneStopTrialError, _TuneRestoreError from ray.tune.execution.experiment_state import ( @@ -38,7 +39,6 @@ DEBUG_METRICS, DEFAULT_METRIC, DONE, - TIME_THIS_ITER_S, RESULT_DUPLICATE, SHOULD_CHECKPOINT, _get_defaults_results_dir, diff --git a/python/ray/tune/experiment/trial.py b/python/ray/tune/experiment/trial.py index c67bb045be42..2f34a4d073de 100644 --- a/python/ray/tune/experiment/trial.py +++ b/python/ray/tune/experiment/trial.py @@ -20,6 +20,12 @@ from ray.air import CheckpointConfig from ray.air._internal.uri_utils import URI from ray.air._internal.checkpoint_manager import _TrackedCheckpoint, CheckpointStorage +from ray.air.constants import ( + EXPR_ERROR_PICKLE_FILE, + EXPR_ERROR_FILE, + TRAINING_ITERATION, +) + import ray.cloudpickle as cloudpickle from ray.exceptions import RayActorError, RayTaskError from ray.tune import TuneError @@ -35,7 +41,6 @@ DONE, NODE_IP, PID, - TRAINING_ITERATION, TRIAL_ID, DEBUG_METRICS, TRIAL_INFO, @@ -924,10 +929,10 @@ def handle_error(self, exc: Optional[Union[TuneError, RayTaskError]] = None): self.num_failures += 1 if self.local_path: - self.error_filename = "error.txt" + self.error_filename = EXPR_ERROR_FILE if isinstance(exc, RayTaskError): # Piping through the actual error to result grid. - self.pickled_error_filename = "error.pkl" + self.pickled_error_filename = EXPR_ERROR_PICKLE_FILE with open(self.pickled_error_file, "wb") as f: cloudpickle.dump(exc, f) with open(self.error_file, "a+") as f: diff --git a/python/ray/tune/experimental/output.py b/python/ray/tune/experimental/output.py index cbd75aa45dfe..75f661126a3e 100644 --- a/python/ray/tune/experimental/output.py +++ b/python/ray/tune/experimental/output.py @@ -44,6 +44,7 @@ DataRow, ) from ray.air._internal.checkpoint_manager import _TrackedCheckpoint +from ray.air.constants import TRAINING_ITERATION from ray.tune.callback import Callback from ray.tune.result import ( AUTO_RESULT_KEYS, @@ -52,7 +53,6 @@ MEAN_LOSS, TIME_TOTAL_S, TIMESTEPS_TOTAL, - TRAINING_ITERATION, ) from ray.tune.experiment.trial import Trial diff --git a/python/ray/tune/logger/aim.py b/python/ray/tune/logger/aim.py index d90aecafa655..9c01a2d19698 100644 --- a/python/ray/tune/logger/aim.py +++ b/python/ray/tune/logger/aim.py @@ -3,9 +3,9 @@ import numpy as np from typing import TYPE_CHECKING, Dict, Optional, List, Union +from ray.air.constants import TRAINING_ITERATION from ray.tune.logger.logger import LoggerCallback from ray.tune.result import ( - TRAINING_ITERATION, TIME_TOTAL_S, TIMESTEPS_TOTAL, ) diff --git a/python/ray/tune/logger/csv.py b/python/ray/tune/logger/csv.py index b9357c7dd872..7449bf5740a7 100644 --- a/python/ray/tune/logger/csv.py +++ b/python/ray/tune/logger/csv.py @@ -4,8 +4,8 @@ from typing import TYPE_CHECKING, Dict, TextIO +from ray.air.constants import EXPR_PROGRESS_FILE from ray.tune.logger.logger import _LOGGER_DEPRECATION_WARNING, Logger, LoggerCallback -from ray.tune.result import EXPR_PROGRESS_FILE from ray.tune.utils import flatten_dict from ray.util.annotations import Deprecated, PublicAPI diff --git a/python/ray/tune/logger/json.py b/python/ray/tune/logger/json.py index efd04d431cd1..379953e6ba5b 100644 --- a/python/ray/tune/logger/json.py +++ b/python/ray/tune/logger/json.py @@ -5,15 +5,14 @@ from typing import TYPE_CHECKING, Dict, TextIO -import ray.cloudpickle as cloudpickle - -from ray.tune.logger.logger import _LOGGER_DEPRECATION_WARNING, Logger, LoggerCallback -from ray.tune.utils.util import SafeFallbackEncoder -from ray.tune.result import ( +from ray.air.constants import ( EXPR_PARAM_FILE, EXPR_PARAM_PICKLE_FILE, EXPR_RESULT_FILE, ) +import ray.cloudpickle as cloudpickle +from ray.tune.logger.logger import _LOGGER_DEPRECATION_WARNING, Logger, LoggerCallback +from ray.tune.utils.util import SafeFallbackEncoder from ray.util.annotations import Deprecated, PublicAPI if TYPE_CHECKING: diff --git a/python/ray/tune/logger/tensorboardx.py b/python/ray/tune/logger/tensorboardx.py index e4e3e25e8872..3b246cc13e98 100644 --- a/python/ray/tune/logger/tensorboardx.py +++ b/python/ray/tune/logger/tensorboardx.py @@ -3,10 +3,10 @@ from typing import TYPE_CHECKING, Dict +from ray.air.constants import TRAINING_ITERATION from ray.tune.logger.logger import _LOGGER_DEPRECATION_WARNING, Logger, LoggerCallback from ray.util.debug import log_once from ray.tune.result import ( - TRAINING_ITERATION, TIME_TOTAL_S, TIMESTEPS_TOTAL, ) diff --git a/python/ray/tune/progress_reporter.py b/python/ray/tune/progress_reporter.py index d829793ce0b7..38a4f3bf7c2e 100644 --- a/python/ray/tune/progress_reporter.py +++ b/python/ray/tune/progress_reporter.py @@ -19,6 +19,7 @@ from ray._private.thirdparty.tabulate.tabulate import tabulate from ray.experimental.tqdm_ray import safe_print from ray.air.util.node import _force_on_current_node +from ray.air.constants import EXPR_ERROR_FILE, TRAINING_ITERATION from ray.tune.callback import Callback from ray.tune.logger import pretty_print from ray.tune.result import ( @@ -33,7 +34,6 @@ PID, TIME_TOTAL_S, TIMESTEPS_TOTAL, - TRAINING_ITERATION, TRIAL_ID, ) from ray.tune.experiment.trial import DEBUG_PRINT_INTERVAL, Trial, _Location @@ -1373,7 +1373,7 @@ def print_result(self, trial: Trial, result: Dict, error: bool, done: bool): elif has_verbosity(Verbosity.V2_TRIAL_NORM): metric_name = self._metric or "_metric" metric_value = result.get(metric_name, -99.0) - error_file = os.path.join(trial.local_path, "error.txt") + error_file = os.path.join(trial.local_path, EXPR_ERROR_FILE) info = "" if done: diff --git a/python/ray/tune/result.py b/python/ray/tune/result.py index a1fb9c3e08c9..6fdcb51b4090 100644 --- a/python/ray/tune/result.py +++ b/python/ray/tune/result.py @@ -1,5 +1,18 @@ import os +# Importing for Backward Compatibility +from ray.air.constants import ( # noqa: F401 + TIMESTAMP, + TIME_THIS_ITER_S, + TRAINING_ITERATION, + EXPR_PARAM_FILE, + EXPR_PARAM_PICKLE_FILE, + EXPR_PROGRESS_FILE, + EXPR_RESULT_FILE, + EXPR_ERROR_PICKLE_FILE, + EXPR_ERROR_FILE, +) + # fmt: off # __sphinx_doc_begin__ # (Optional/Auto-filled) training is terminated. Filled only if not provided. @@ -41,25 +54,15 @@ # (Optional/Auto-filled) Accumulated number of episodes for this trial. EPISODES_TOTAL = "episodes_total" -# The timestamp of when the result is generated. -# Default to when the result is processed by tune. -TIMESTAMP = "timestamp" - # Number of timesteps in this iteration. TIMESTEPS_THIS_ITER = "timesteps_this_iter" # (Auto-filled) Accumulated number of timesteps for this entire trial. TIMESTEPS_TOTAL = "timesteps_total" -# (Auto-filled) Time in seconds this iteration took to run. -# This may be overridden to override the system-computed time difference. -TIME_THIS_ITER_S = "time_this_iter_s" - # (Auto-filled) Accumulated time in seconds for this entire trial. TIME_TOTAL_S = "time_total_s" -# (Auto-filled) The index of this training iteration. -TRAINING_ITERATION = "training_iteration" # __sphinx_doc_end__ # fmt: on @@ -144,17 +147,5 @@ def _get_defaults_results_dir() -> str: # by automlboard if exists. EXPR_META_FILE = "trial_status.json" -# File that stores parameters of the trial. -EXPR_PARAM_FILE = "params.json" - -# Pickle File that stores parameters of the trial. -EXPR_PARAM_PICKLE_FILE = "params.pkl" - -# File that stores the progress of the trial. -EXPR_PROGRESS_FILE = "progress.csv" - -# File that stores results of the trial. -EXPR_RESULT_FILE = "result.json" - # Config prefix when using ExperimentAnalysis. CONFIG_PREFIX = "config" diff --git a/python/ray/tune/schedulers/pbt.py b/python/ray/tune/schedulers/pbt.py index 69634ef277ad..d4fd77de48c2 100644 --- a/python/ray/tune/schedulers/pbt.py +++ b/python/ray/tune/schedulers/pbt.py @@ -8,9 +8,10 @@ from typing import Callable, Dict, List, Optional, Tuple, Union from ray.air._internal.checkpoint_manager import CheckpointStorage +from ray.air.constants import TRAINING_ITERATION from ray.tune.execution import trial_runner from ray.tune.error import TuneError -from ray.tune.result import DEFAULT_METRIC, TRAINING_ITERATION +from ray.tune.result import DEFAULT_METRIC from ray.tune.search import SearchGenerator from ray.tune.utils.util import SafeFallbackEncoder from ray.tune.search.sample import Domain, Function diff --git a/python/ray/tune/search/optuna/optuna_search.py b/python/ray/tune/search/optuna/optuna_search.py index 0c20fbb51abc..4483cc92e98b 100644 --- a/python/ray/tune/search/optuna/optuna_search.py +++ b/python/ray/tune/search/optuna/optuna_search.py @@ -6,7 +6,8 @@ from packaging import version from typing import Any, Callable, Dict, List, Optional, Tuple, Union -from ray.tune.result import DEFAULT_METRIC, TRAINING_ITERATION +from ray.air.constants import TRAINING_ITERATION +from ray.tune.result import DEFAULT_METRIC from ray.tune.search.sample import ( Categorical, Domain, diff --git a/python/ray/tune/syncer.py b/python/ray/tune/syncer.py index ce8c9644812b..7260d4a03113 100644 --- a/python/ray/tune/syncer.py +++ b/python/ray/tune/syncer.py @@ -39,11 +39,11 @@ delete_at_uri, is_non_local_path_uri, ) -from ray.air.constants import LAZY_CHECKPOINT_MARKER_FILE +from ray.air.constants import LAZY_CHECKPOINT_MARKER_FILE, TRAINING_ITERATION from ray.exceptions import RayActorError from ray.tune import TuneError from ray.tune.callback import Callback -from ray.tune.result import TRAINING_ITERATION, TIME_TOTAL_S +from ray.tune.result import TIME_TOTAL_S from ray.tune.utils.file_transfer import sync_dir_between_nodes from ray.util import log_once from ray.util.annotations import PublicAPI, DeveloperAPI diff --git a/python/ray/tune/tests/execution/test_controller_checkpointing_integration.py b/python/ray/tune/tests/execution/test_controller_checkpointing_integration.py index 2e13f5d84574..75d91747350a 100644 --- a/python/ray/tune/tests/execution/test_controller_checkpointing_integration.py +++ b/python/ray/tune/tests/execution/test_controller_checkpointing_integration.py @@ -9,10 +9,11 @@ from ray.air import CheckpointConfig from ray.air._internal.checkpoint_manager import _TrackedCheckpoint, CheckpointStorage from ray.air.execution import FixedResourceManager, PlacementGroupResourceManager +from ray.air.constants import TRAINING_ITERATION from ray.tune import PlacementGroupFactory from ray.tune.execution.tune_controller import TuneController from ray.tune.experiment import Trial -from ray.tune.result import TRAINING_ITERATION, DONE +from ray.tune.result import DONE from ray.tune.schedulers import FIFOScheduler from ray.tune.search import BasicVariantGenerator from ray.tune.trainable import TrainableUtil diff --git a/python/ray/tune/tests/execution/test_controller_search_alg_integration.py b/python/ray/tune/tests/execution/test_controller_search_alg_integration.py index fc3e3e2cd0ed..454c4707fab9 100644 --- a/python/ray/tune/tests/execution/test_controller_search_alg_integration.py +++ b/python/ray/tune/tests/execution/test_controller_search_alg_integration.py @@ -6,11 +6,11 @@ import sys import ray +from ray.air.constants import TRAINING_ITERATION from ray.air.execution import FixedResourceManager, PlacementGroupResourceManager from ray.tune import Experiment, PlacementGroupFactory from ray.tune.execution.tune_controller import TuneController from ray.tune.experiment import Trial -from ray.tune.result import TRAINING_ITERATION from ray.tune.schedulers import FIFOScheduler, TrialScheduler from ray.tune.search import Searcher, ConcurrencyLimiter, Repeater, SearchGenerator from ray.tune.search._mock import _MockSuggestionAlgorithm diff --git a/python/ray/tune/tests/test_api.py b/python/ray/tune/tests/test_api.py index fd28f68b6023..66418f27b192 100644 --- a/python/ray/tune/tests/test_api.py +++ b/python/ray/tune/tests/test_api.py @@ -17,6 +17,7 @@ from ray import tune from ray.air import CheckpointConfig, ScalingConfig from ray.air._internal.remote_storage import _ensure_directory +from ray.air.constants import TIME_THIS_ITER_S, TRAINING_ITERATION from ray.rllib import _register_all from ray.tune import ( register_env, @@ -39,9 +40,7 @@ NODE_IP, PID, EPISODES_TOTAL, - TRAINING_ITERATION, TIMESTEPS_THIS_ITER, - TIME_THIS_ITER_S, TIME_TOTAL_S, TRIAL_ID, EXPERIMENT_TAG, diff --git a/python/ray/tune/tests/test_checkpoint_manager.py b/python/ray/tune/tests/test_checkpoint_manager.py index 49ef55de859d..d1afc6490d95 100644 --- a/python/ray/tune/tests/test_checkpoint_manager.py +++ b/python/ray/tune/tests/test_checkpoint_manager.py @@ -12,7 +12,7 @@ logger, CheckpointStorage, ) -from ray.tune.result import TRAINING_ITERATION +from ray.air.constants import TRAINING_ITERATION from ray.tune.execution.checkpoint_manager import _CheckpointManager diff --git a/python/ray/tune/tests/test_function_api.py b/python/ray/tune/tests/test_function_api.py index 1697cdcbae50..0b502401a070 100644 --- a/python/ray/tune/tests/test_function_api.py +++ b/python/ray/tune/tests/test_function_api.py @@ -6,6 +6,7 @@ import unittest import ray +from ray.air.constants import TRAINING_ITERATION from ray.rllib import _register_all from ray import tune @@ -13,7 +14,7 @@ from ray.tune.execution.placement_groups import PlacementGroupFactory from ray.tune.trainable.util import TrainableUtil from ray.tune.trainable import with_parameters, wrap_function, FuncCheckpointUtil -from ray.tune.result import DEFAULT_METRIC, TRAINING_ITERATION +from ray.tune.result import DEFAULT_METRIC from ray.tune.schedulers import ResourceChangingScheduler diff --git a/python/ray/tune/tests/test_integration_pytorch_lightning.py b/python/ray/tune/tests/test_integration_pytorch_lightning.py index 502d6693178c..5eacd4326688 100644 --- a/python/ray/tune/tests/test_integration_pytorch_lightning.py +++ b/python/ray/tune/tests/test_integration_pytorch_lightning.py @@ -4,7 +4,7 @@ import unittest import pytorch_lightning as pl import torch -from ray.tune.result import TRAINING_ITERATION +from ray.air.constants import TRAINING_ITERATION from torch.utils.data import DataLoader, Dataset diff --git a/python/ray/tune/tests/test_logger.py b/python/ray/tune/tests/test_logger.py index 9384f2b73d7a..c354a5d1d7a1 100644 --- a/python/ray/tune/tests/test_logger.py +++ b/python/ray/tune/tests/test_logger.py @@ -11,6 +11,12 @@ import numpy as np import ray +from ray.air.constants import ( + EXPR_PARAM_FILE, + EXPR_PARAM_PICKLE_FILE, + EXPR_PROGRESS_FILE, + EXPR_RESULT_FILE, +) from ray.cloudpickle import cloudpickle from ray.tune.logger import ( CSVLoggerCallback, @@ -21,12 +27,6 @@ TBXLogger, ) from ray.tune.logger.aim import AimLoggerCallback -from ray.tune.result import ( - EXPR_PARAM_FILE, - EXPR_PARAM_PICKLE_FILE, - EXPR_PROGRESS_FILE, - EXPR_RESULT_FILE, -) from ray.tune.utils import flatten_dict diff --git a/python/ray/tune/tests/test_ray_trial_executor.py b/python/ray/tune/tests/test_ray_trial_executor.py index b289bcd2bd49..8217cee84b0a 100644 --- a/python/ray/tune/tests/test_ray_trial_executor.py +++ b/python/ray/tune/tests/test_ray_trial_executor.py @@ -8,6 +8,7 @@ import ray from ray import tune from ray.air._internal.checkpoint_manager import CheckpointStorage +from ray.air.constants import TRAINING_ITERATION from ray.air.execution import PlacementGroupResourceManager, FixedResourceManager from ray.rllib import _register_all from ray.tune import Trainable @@ -18,7 +19,7 @@ RayTrialExecutor, ) from ray.tune.registry import _global_registry, TRAINABLE_CLASS, register_trainable -from ray.tune.result import PID, TRAINING_ITERATION, TRIAL_ID +from ray.tune.result import PID, TRIAL_ID from ray.tune.search import BasicVariantGenerator from ray.tune.experiment import Trial from ray.cluster_utils import Cluster diff --git a/python/ray/tune/tests/test_result_grid.py b/python/ray/tune/tests/test_result_grid.py index c32fec617c2f..61d8f16e87e7 100644 --- a/python/ray/tune/tests/test_result_grid.py +++ b/python/ray/tune/tests/test_result_grid.py @@ -12,6 +12,7 @@ from ray.air._internal.checkpoint_manager import CheckpointStorage, _TrackedCheckpoint from ray import air, tune from ray.air import Checkpoint, session +from ray.air.constants import EXPR_ERROR_FILE from ray.air.result import Result from ray.tune.registry import get_trainable_cls from ray.tune.result_grid import ResultGrid @@ -332,7 +333,7 @@ def f(config): def test_num_errors_terminated(tmpdir): - error_filename = "error.txt" + error_filename = EXPR_ERROR_FILE trials = [Trial("foo", experiment_path=str(tmpdir), stub=True) for i in range(10)] diff --git a/python/ray/tune/tests/test_searchers.py b/python/ray/tune/tests/test_searchers.py index 1bf0521ef3f2..aee1fc183aa3 100644 --- a/python/ray/tune/tests/test_searchers.py +++ b/python/ray/tune/tests/test_searchers.py @@ -9,7 +9,7 @@ import ray from ray import tune -from ray.tune.result import TRAINING_ITERATION +from ray.air.constants import TRAINING_ITERATION from ray.tune.search import ConcurrencyLimiter diff --git a/python/ray/tune/tests/test_syncer_callback.py b/python/ray/tune/tests/test_syncer_callback.py index e86f69d12fdf..bd3429143895 100644 --- a/python/ray/tune/tests/test_syncer_callback.py +++ b/python/ray/tune/tests/test_syncer_callback.py @@ -10,10 +10,11 @@ import ray.util from ray.air._internal.checkpoint_manager import CheckpointStorage, _TrackedCheckpoint +from ray.air.constants import TRAINING_ITERATION from ray.exceptions import RayActorError from ray.tune import TuneError from ray.tune.logger import NoopLogger -from ray.tune.result import TRAINING_ITERATION, TIME_TOTAL_S +from ray.tune.result import TIME_TOTAL_S from ray.tune.syncer import ( DEFAULT_SYNC_PERIOD, SyncConfig, diff --git a/python/ray/tune/tests/test_trial_runner_3.py b/python/ray/tune/tests/test_trial_runner_3.py index 35e8575e872b..2788de846b72 100644 --- a/python/ray/tune/tests/test_trial_runner_3.py +++ b/python/ray/tune/tests/test_trial_runner_3.py @@ -15,13 +15,13 @@ import ray from ray.air import CheckpointConfig from ray.air.execution import PlacementGroupResourceManager, FixedResourceManager +from ray.air.constants import TRAINING_ITERATION from ray.rllib import _register_all from ray.rllib.algorithms.callbacks import DefaultCallbacks from ray.tune import TuneError, PlacementGroupFactory from ray.tune.execution.ray_trial_executor import RayTrialExecutor from ray.tune.impl.placeholder import create_resolvers_map, inject_placeholders -from ray.tune.result import TRAINING_ITERATION from ray.tune.schedulers import TrialScheduler, FIFOScheduler from ray.tune.experiment import Experiment from ray.tune.search import BasicVariantGenerator diff --git a/python/ray/tune/tests/test_trial_runner_callbacks.py b/python/ray/tune/tests/test_trial_runner_callbacks.py index 0fb01bb5a849..a43fc8037b14 100644 --- a/python/ray/tune/tests/test_trial_runner_callbacks.py +++ b/python/ray/tune/tests/test_trial_runner_callbacks.py @@ -10,6 +10,7 @@ import ray from ray import tune from ray.air._internal.checkpoint_manager import _TrackedCheckpoint, CheckpointStorage +from ray.air.constants import TRAINING_ITERATION from ray.rllib import _register_all from ray.tune.logger import DEFAULT_LOGGERS, LoggerCallback, LegacyLoggerCallback from ray.tune.execution.ray_trial_executor import ( @@ -17,7 +18,6 @@ _ExecutorEventType, RayTrialExecutor, ) -from ray.tune.result import TRAINING_ITERATION from ray.tune.syncer import SyncConfig, SyncerCallback from ray.tune.callback import warnings diff --git a/python/ray/tune/tests/test_trial_scheduler.py b/python/ray/tune/tests/test_trial_scheduler.py index 26fb21becc67..504cf236e966 100644 --- a/python/ray/tune/tests/test_trial_scheduler.py +++ b/python/ray/tune/tests/test_trial_scheduler.py @@ -16,10 +16,10 @@ from ray import tune from ray.air import CheckpointConfig from ray.air._internal.checkpoint_manager import _TrackedCheckpoint, CheckpointStorage +from ray.air.constants import TRAINING_ITERATION from ray.tune import Trainable, PlacementGroupFactory from ray.tune.execution.checkpoint_manager import _CheckpointManager from ray.tune.execution.ray_trial_executor import RayTrialExecutor -from ray.tune.result import TRAINING_ITERATION from ray.tune.schedulers import ( FIFOScheduler, HyperBandScheduler, diff --git a/python/ray/tune/trainable/function_trainable.py b/python/ray/tune/trainable/function_trainable.py index 6783a5c8f720..77510b0d9039 100644 --- a/python/ray/tune/trainable/function_trainable.py +++ b/python/ray/tune/trainable/function_trainable.py @@ -15,7 +15,11 @@ import queue from ray.air.checkpoint import Checkpoint -from ray.air.constants import _ERROR_FETCH_TIMEOUT, _RESULT_FETCH_TIMEOUT +from ray.air.constants import ( + _ERROR_FETCH_TIMEOUT, + _RESULT_FETCH_TIMEOUT, + TIME_THIS_ITER_S, +) from ray.tune import TuneError from ray.tune.execution.placement_groups import PlacementGroupFactory from ray.tune.trainable import session @@ -23,7 +27,6 @@ DEFAULT_METRIC, RESULT_DUPLICATE, SHOULD_CHECKPOINT, - TIME_THIS_ITER_S, ) from ray.tune.trainable import Trainable, TrainableUtil from ray.tune.utils import ( diff --git a/python/ray/tune/trainable/trainable.py b/python/ray/tune/trainable/trainable.py index 63a5d997f4f4..656d3cc6e7b9 100644 --- a/python/ray/tune/trainable/trainable.py +++ b/python/ray/tune/trainable/trainable.py @@ -20,6 +20,11 @@ Checkpoint, _DICT_CHECKPOINT_ADDITIONAL_FILE_KEY, ) +from ray.air.constants import ( + TIMESTAMP, + TIME_THIS_ITER_S, + TRAINING_ITERATION, +) from ray.tune.result import ( DEBUG_METRICS, DEFAULT_RESULTS_DIR, @@ -33,12 +38,9 @@ SHOULD_CHECKPOINT, STDERR_FILE, STDOUT_FILE, - TIME_THIS_ITER_S, TIME_TOTAL_S, - TIMESTAMP, TIMESTEPS_THIS_ITER, TIMESTEPS_TOTAL, - TRAINING_ITERATION, TRIAL_ID, TRIAL_INFO, ) diff --git a/python/ray/tune/utils/util.py b/python/ray/tune/utils/util.py index aff86f039b32..95e84d3722c5 100644 --- a/python/ray/tune/utils/util.py +++ b/python/ray/tune/utils/util.py @@ -663,7 +663,7 @@ def validate_save_restore( trainable_1 = remote_cls.remote(config=config) trainable_2 = remote_cls.remote(config=config) - from ray.tune.result import TRAINING_ITERATION + from ray.air.constants import TRAINING_ITERATION for _ in range(3): res = ray.get(trainable_1.train.remote()) diff --git a/release/train_tests/horovod/train_horovod_multi_node_test.py b/release/train_tests/horovod/train_horovod_multi_node_test.py index dc905bcca70e..def44b49f577 100644 --- a/release/train_tests/horovod/train_horovod_multi_node_test.py +++ b/release/train_tests/horovod/train_horovod_multi_node_test.py @@ -4,10 +4,10 @@ import ray from ray.air import ScalingConfig +from ray.air.constants import TRAINING_ITERATION from ray.train.examples.horovod.horovod_example import ( train_func as horovod_torch_train_func, ) -from ray.tune.result import TRAINING_ITERATION from ray.train.horovod.horovod_trainer import HorovodTrainer if __name__ == "__main__":