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

91 lines
2.1 KiB
Python

import logging
import pytest
import ray
from ray import runtime_context
from ray._common import utils as ray_utils
from ray.cluster_utils import Cluster
from ray.train.v2._internal.constants import (
ENABLE_STATE_ACTOR_RECONCILIATION_ENV_VAR,
)
@pytest.fixture()
def ray_start_4_cpus():
ray.init(num_cpus=4)
yield
ray.shutdown()
@pytest.fixture()
def ray_start_4_cpus_2_gpus():
ray.init(num_cpus=4, num_gpus=2)
yield
ray.shutdown()
@pytest.fixture
def ray_start_2x2_gpu_cluster():
cluster = Cluster()
for _ in range(2):
cluster.add_node(num_cpus=4, num_gpus=2)
ray.init(address=cluster.address)
yield
ray.shutdown()
cluster.shutdown()
@pytest.fixture(autouse=True)
def setup_logging():
logger = logging.getLogger("ray.train")
orig_level = logger.getEffectiveLevel()
logger.setLevel(logging.INFO)
yield
logger.setLevel(orig_level)
@pytest.fixture(autouse=True)
def reset_ray_address(monkeypatch):
ray_utils.reset_ray_address()
yield
ray_utils.reset_ray_address()
@pytest.fixture
def shutdown_only():
yield None
ray.shutdown()
@pytest.fixture(autouse=True)
def disable_state_actor_polling(monkeypatch):
monkeypatch.setenv(ENABLE_STATE_ACTOR_RECONCILIATION_ENV_VAR, "0")
yield
@pytest.fixture
def mock_runtime_context(monkeypatch):
@ray.remote(num_cpus=0)
class DummyActor:
pass
# Must return real actor handle so it can get passed to other actors
# Cannot create actor here since ray has not been initialized yet
def mock_current_actor(self):
return DummyActor.remote()
# In unit tests where the controller is not an actor, current_actor is
# a DummyActor, which is ok because it won't be called in those tests.
# In unit tests where the controller is an actor, current_actor is the
# controller actor because monkeypatch doesn't propagate to the actor
# process. Those tests can successfully test methods on that actor.
monkeypatch.setattr(
runtime_context.RuntimeContext, "current_actor", property(mock_current_actor)
)
yield