Source code for gobbli.test.experiment.test_base_experiment
from pathlib import Path
import pytest
import ray
from gobbli.test.util import MockDataset, MockExperiment, MockModel, skip_if_no_gpu
[docs]def test_base_experiment_init(tmpdir):
tmpdir_path = Path(tmpdir)
ds = MockDataset.load()
# Create experiment
exp = MockExperiment(MockModel, ds, data_dir=tmpdir_path / "test")
assert exp.metadata_path.exists()
# Shouldn't be able to create another experiment without ignoring the ray initialization error
with pytest.raises(RuntimeError):
MockExperiment(MockModel, ds, data_dir=tmpdir_path / "test2")
MockExperiment(
MockModel, ds, data_dir=tmpdir_path / "test3", ignore_ray_initialized_error=True
)
# Shouldn't be able to create another experiment in the same path
with pytest.raises(ValueError):
MockExperiment(
MockModel,
ds,
data_dir=tmpdir_path / "test",
ignore_ray_initialized_error=True,
)
# ...unless we pass overwrite_existing = True
MockExperiment(
MockModel,
ds,
data_dir=tmpdir_path / "test",
ignore_ray_initialized_error=True,
overwrite_existing=True,
)
# Limit should be obeyed
assert len(exp.X) == len(MockDataset.X_TRAIN_VALID) + len(MockDataset.X_TEST)
assert len(exp.y) == len(MockDataset.Y_TRAIN_VALID) + len(MockDataset.Y_TEST)
exp_limit = MockExperiment(
MockModel,
ds,
limit=1,
data_dir=tmpdir_path / "test_limit",
ignore_ray_initialized_error=True,
)
assert len(exp_limit.X) == 1
assert len(exp_limit.y) == 1
[docs]def test_base_experiment_gpu(tmpdir, request):
skip_if_no_gpu(request.config)
tmpdir_path = Path(tmpdir)
ds = MockDataset.load()
MockExperiment(
MockModel,
ds,
data_dir=tmpdir_path / "test",
ray_kwargs={"num_gpus": 1},
ignore_ray_initialized_error=True,
)
# Make sure GPUs are available
# in a mock remote function
# They won't necessarily be available on the master process
@ray.remote(num_gpus=1)
def find_gpus():
return ray.get_gpu_ids()
assert len(ray.get(find_gpus.remote())) > 0