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

91 lines
2.5 KiB
Python

import pytest
import ray
from ray import train
from ray.train import ScalingConfig
from ray.train._internal.worker_group import WorkerGroup
from ray.train.backend import Backend, BackendConfig
from ray.train.data_parallel_trainer import DataParallelTrainer
from ray.train.tests.util import create_dict_checkpoint, load_dict_checkpoint
@pytest.fixture
def ray_start_4_cpus():
address_info = ray.init(num_cpus=4)
yield address_info
# The code after the yield will run as teardown code.
ray.shutdown()
class TestConfig(BackendConfig):
@property
def backend_cls(self):
return TestBackend
class TestBackend(Backend):
def on_start(self, worker_group: WorkerGroup, backend_config: TestConfig):
pass
def on_shutdown(self, worker_group: WorkerGroup, backend_config: TestConfig):
pass
def test_run(ray_start_4_cpus):
"""Tests that Train can be run without any specific backends."""
num_workers = 2
key = "value"
value = 1
config = TestConfig()
def train_func():
checkpoint = train.get_checkpoint()
checkpoint_dict = load_dict_checkpoint(checkpoint)
if train.get_context().get_world_rank() == 0:
train.report(metrics=checkpoint_dict, checkpoint=checkpoint)
else:
train.report(metrics=checkpoint_dict)
return checkpoint_dict[key]
with create_dict_checkpoint({key: value}) as checkpoint:
trainer = DataParallelTrainer(
train_func,
backend_config=config,
resume_from_checkpoint=checkpoint,
scaling_config=ScalingConfig(num_workers=num_workers),
)
results = trainer.fit()
assert load_dict_checkpoint(results.checkpoint) == load_dict_checkpoint(
checkpoint
)
def test_failure():
"""Tests that backend frameworks and non-critical libraries are not imported."""
with pytest.raises(ModuleNotFoundError):
import torch # noqa: F401
with pytest.raises(ModuleNotFoundError):
import tensorflow # noqa: F401
with pytest.raises(ModuleNotFoundError):
import horovod # noqa: F401
with pytest.raises(ModuleNotFoundError):
import accelerate # noqa: F401
with pytest.raises(ModuleNotFoundError):
import transformers # noqa: F401
with pytest.raises(ModuleNotFoundError):
import xgboost # noqa: F401
if __name__ == "__main__":
import sys
import pytest
sys.exit(pytest.main(["-v", "-x", __file__]))