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

72 lines
1.9 KiB
Python

from unittest import mock
import pytest
import ray
import ray.train.collective
from ray.train.v2._internal.execution import collective_impl
from ray.train.v2.api.data_parallel_trainer import DataParallelTrainer
def test_barrier(ray_start_4_cpus):
@ray.remote
class Counter:
def __init__(self):
self.num_reached_barrier = 0
def increment(self):
self.num_reached_barrier += 1
def get_num_reached_barrier(self):
return self.num_reached_barrier
counter = Counter.remote()
def train_fn():
counter.increment.remote()
ray.train.collective.barrier()
assert ray.get(counter.get_num_reached_barrier.remote()) == 2
trainer = DataParallelTrainer(
train_fn,
scaling_config=ray.train.ScalingConfig(num_workers=2),
)
trainer.fit()
def test_broadcast_from_rank_zero(ray_start_4_cpus):
def train_fn():
rank = ray.train.get_context().get_world_rank()
value = ray.train.collective.broadcast_from_rank_zero({"key": rank})
assert value == {"key": 0}
trainer = DataParallelTrainer(
train_fn,
scaling_config=ray.train.ScalingConfig(num_workers=2),
)
trainer.fit()
def test_broadcast_from_rank_zero_data_too_big(ray_start_4_cpus):
def train_fn():
collective_impl.logger = mock.create_autospec(
collective_impl.logger, instance=True
)
collective_impl._MAX_BROADCAST_SIZE_BYTES = 0
rank = ray.train.get_context().get_world_rank()
value = ray.train.collective.broadcast_from_rank_zero({"key": rank})
assert value == {"key": 0}
collective_impl.logger.warning.assert_called_once()
trainer = DataParallelTrainer(
train_fn,
scaling_config=ray.train.ScalingConfig(num_workers=2),
)
trainer.fit()
if __name__ == "__main__":
import sys
sys.exit(pytest.main(["-v", "-x", __file__]))