Files
ray-project--ray/python/ray/train/tests/test_api_migrations.py
T
2026-07-13 13:17:40 +08:00

159 lines
5.0 KiB
Python

import sys
import warnings
import pytest
import ray.train
import ray.tune
from ray.train.constants import ENABLE_V2_MIGRATION_WARNINGS_ENV_VAR
from ray.train.data_parallel_trainer import DataParallelTrainer
from ray.util.annotations import RayDeprecationWarning
@pytest.fixture(autouse=True)
def enable_v2_migration_deprecation_messages(monkeypatch):
monkeypatch.setenv(ENABLE_V2_MIGRATION_WARNINGS_ENV_VAR, "1")
yield
monkeypatch.delenv(ENABLE_V2_MIGRATION_WARNINGS_ENV_VAR)
def test_trainer_restore():
with pytest.warns(RayDeprecationWarning, match="restore"):
try:
DataParallelTrainer.restore("dummy")
except Exception:
pass
with pytest.warns(RayDeprecationWarning, match="can_restore"):
try:
DataParallelTrainer.can_restore("dummy")
except Exception:
pass
def test_trainer_valid_configs(ray_start_4_cpus, tmp_path):
with warnings.catch_warnings(record=True) as w:
warnings.simplefilter("always")
DataParallelTrainer(
lambda _: None,
scaling_config=ray.train.ScalingConfig(num_workers=1),
run_config=ray.train.RunConfig(
storage_path=tmp_path,
failure_config=ray.train.FailureConfig(max_failures=1),
),
).fit()
for warning in w:
assert not (
warning.category == RayDeprecationWarning
and "`RunConfig` class should be imported from `ray.tune`"
in str(warning.message)
)
def test_trainer_deprecated_configs():
with pytest.warns(RayDeprecationWarning, match="metadata"):
DataParallelTrainer(
lambda _: None,
metadata={"dummy": "dummy"},
)
with pytest.warns(RayDeprecationWarning, match="resume_from_checkpoint"):
DataParallelTrainer(
lambda _: None,
resume_from_checkpoint=ray.train.Checkpoint.from_directory("dummy"),
)
with pytest.warns(RayDeprecationWarning, match="fail_fast"):
DataParallelTrainer(
lambda _: None,
run_config=ray.train.RunConfig(
failure_config=ray.train.FailureConfig(fail_fast=True)
),
)
with pytest.warns(RayDeprecationWarning, match="trainer_resources"):
DataParallelTrainer(
lambda _: None,
scaling_config=ray.train.ScalingConfig(trainer_resources={"CPU": 1}),
)
with pytest.warns(RayDeprecationWarning, match="verbose"):
DataParallelTrainer(
lambda _: None,
run_config=ray.train.RunConfig(verbose=True),
)
with pytest.warns(RayDeprecationWarning, match="log_to_file"):
DataParallelTrainer(
lambda _: None,
run_config=ray.train.RunConfig(log_to_file=True),
)
with pytest.warns(RayDeprecationWarning, match="stop"):
DataParallelTrainer(
lambda _: None,
run_config=ray.train.RunConfig(stop={"training_iteration": 1}),
)
with pytest.warns(RayDeprecationWarning, match="callbacks"):
DataParallelTrainer(
lambda _: None,
run_config=ray.train.RunConfig(callbacks=[ray.tune.Callback()]),
)
with pytest.warns(RayDeprecationWarning, match="progress_reporter"):
DataParallelTrainer(
lambda _: None,
run_config=ray.train.RunConfig(
progress_reporter=ray.tune.ProgressReporter()
),
)
with pytest.warns(RayDeprecationWarning, match="sync_config"):
DataParallelTrainer(
lambda _: None,
run_config=ray.train.RunConfig(
sync_config=ray.train.SyncConfig(sync_artifacts=True)
),
)
def test_train_context_deprecations(ray_start_4_cpus, tmp_path):
def train_fn_per_worker(config):
with pytest.warns(RayDeprecationWarning, match="get_trial_dir"):
ray.train.get_context().get_trial_dir()
with pytest.warns(RayDeprecationWarning, match="get_trial_id"):
ray.train.get_context().get_trial_id()
with pytest.warns(RayDeprecationWarning, match="get_trial_name"):
ray.train.get_context().get_trial_name()
with pytest.warns(RayDeprecationWarning, match="get_trial_resources"):
ray.train.get_context().get_trial_resources()
trainer = DataParallelTrainer(
train_fn_per_worker,
scaling_config=ray.train.ScalingConfig(num_workers=1),
run_config=ray.train.RunConfig(storage_path=tmp_path),
)
trainer.fit()
def test_v2_enabled_error(monkeypatch):
"""Running a V1 Trainer with V2 enabled should raise an error."""
from ray.train.v2._internal.constants import V2_ENABLED_ENV_VAR
monkeypatch.setenv(V2_ENABLED_ENV_VAR, "1")
with pytest.raises(DeprecationWarning, match="Detected use of a deprecated"):
DataParallelTrainer(
lambda _: None,
scaling_config=ray.train.ScalingConfig(num_workers=1),
)
if __name__ == "__main__":
sys.exit(pytest.main(["-v", "-x", __file__]))