From dd650246166e92935542b4eaaca2a035f7b9886d Mon Sep 17 00:00:00 2001 From: Jirka Date: Sat, 27 Jun 2020 21:48:03 +0200 Subject: [PATCH] tests: add default_root_dir=tmpdir --- tests/callbacks/test_callbacks.py | 1 + tests/callbacks/test_progress_bar.py | 2 ++ tests/loggers/test_all.py | 1 + tests/loggers/test_base.py | 2 +- tests/loggers/test_tensorboard.py | 5 ++++- tests/models/test_cpu.py | 3 +++ tests/models/test_gpu.py | 12 +++++------- tests/models/test_grad_norm.py | 1 + tests/models/test_hooks.py | 1 + tests/models/test_horovod.py | 6 ++---- tests/models/test_restore.py | 12 +++++++----- tests/trainer/test_dataloaders.py | 21 ++++++++++----------- tests/trainer/test_trainer.py | 17 ++++++++++++++--- 13 files changed, 52 insertions(+), 32 deletions(-) diff --git a/tests/callbacks/test_callbacks.py b/tests/callbacks/test_callbacks.py index b1034ef7d7f28..374eb7a357335 100644 --- a/tests/callbacks/test_callbacks.py +++ b/tests/callbacks/test_callbacks.py @@ -166,6 +166,7 @@ def on_test_end(self, trainer, pl_module): limit_val_batches=0.1, limit_train_batches=0.2, progress_bar_refresh_rate=0, + default_root_dir=tmpdir, ) assert not test_callback.setup_called diff --git a/tests/callbacks/test_progress_bar.py b/tests/callbacks/test_progress_bar.py index f621e70228012..59f151fd5df2e 100644 --- a/tests/callbacks/test_progress_bar.py +++ b/tests/callbacks/test_progress_bar.py @@ -66,6 +66,7 @@ def test_progress_bar_totals(tmpdir): progress_bar_refresh_rate=1, limit_val_batches=1.0, max_epochs=1, + default_root_dir=tmpdir, ) bar = trainer.progress_bar_callback assert 0 == bar.total_train_batches @@ -182,6 +183,7 @@ def on_test_batch_end(self, trainer, pl_module): limit_train_batches=1.0, num_sanity_val_steps=2, max_epochs=3, + default_root_dir=tmpdir, ) assert trainer.progress_bar_callback.refresh_rate == refresh_rate diff --git a/tests/loggers/test_all.py b/tests/loggers/test_all.py index b64119078c6dd..612dc6fb004a4 100644 --- a/tests/loggers/test_all.py +++ b/tests/loggers/test_all.py @@ -72,6 +72,7 @@ def log_metrics(self, metrics, step): limit_train_batches=0.2, limit_val_batches=0.5, fast_dev_run=True, + default_root_dir=tmpdir, ) trainer.fit(model) trainer.test() diff --git a/tests/loggers/test_base.py b/tests/loggers/test_base.py index 6af8a90d373af..f55e55251e4be 100644 --- a/tests/loggers/test_base.py +++ b/tests/loggers/test_base.py @@ -111,7 +111,7 @@ def test_multiple_loggers(tmpdir): assert logger2.finalized_status == "success" -def test_multiple_loggers_pickle(tmpdir): +def test_multiple_loggers_pickle(): """Verify that pickling trainer with multiple loggers works.""" logger1 = CustomLogger() diff --git a/tests/loggers/test_tensorboard.py b/tests/loggers/test_tensorboard.py index 44009a2ddf658..21c58084e2df4 100644 --- a/tests/loggers/test_tensorboard.py +++ b/tests/loggers/test_tensorboard.py @@ -17,7 +17,10 @@ def test_tensorboard_hparams_reload(tmpdir): model = EvalModelTemplate() - trainer = Trainer(max_epochs=1, default_root_dir=tmpdir) + trainer = Trainer( + max_epochs=1, + default_root_dir=tmpdir, + ) trainer.fit(model) folder_path = trainer.logger.log_dir diff --git a/tests/models/test_cpu.py b/tests/models/test_cpu.py index 378d7f6a2845d..c999e7067cd13 100644 --- a/tests/models/test_cpu.py +++ b/tests/models/test_cpu.py @@ -30,6 +30,7 @@ def test_cpu_slurm_save_load(tmpdir): limit_train_batches=0.2, limit_val_batches=0.2, checkpoint_callback=ModelCheckpoint(tmpdir), + default_root_dir=tmpdir, ) result = trainer.fit(model) real_global_step = trainer.global_step @@ -66,6 +67,7 @@ def test_cpu_slurm_save_load(tmpdir): max_epochs=1, logger=logger, checkpoint_callback=ModelCheckpoint(tmpdir), + default_root_dir=tmpdir, ) model = EvalModelTemplate(**hparams) @@ -222,6 +224,7 @@ def test_running_test_no_val(tmpdir): checkpoint_callback=checkpoint, logger=logger, early_stop_callback=False, + default_root_dir=tmpdir, ) result = trainer.fit(model) diff --git a/tests/models/test_gpu.py b/tests/models/test_gpu.py index 5fc34645d34a9..23ec4da85e785 100644 --- a/tests/models/test_gpu.py +++ b/tests/models/test_gpu.py @@ -136,7 +136,11 @@ def test_ddp_all_dataloaders_passed_to_fit(tmpdir): """Make sure DDP works with dataloaders passed to fit()""" tutils.set_random_master_port() - trainer_options = dict( + model = EvalModelTemplate() + fit_options = dict(train_dataloader=model.train_dataloader(), + val_dataloaders=model.val_dataloader()) + + trainer = Trainer( default_root_dir=tmpdir, progress_bar_refresh_rate=0, max_epochs=1, @@ -145,12 +149,6 @@ def test_ddp_all_dataloaders_passed_to_fit(tmpdir): gpus=[0, 1], distributed_backend='ddp_spawn' ) - - model = EvalModelTemplate() - fit_options = dict(train_dataloader=model.train_dataloader(), - val_dataloaders=model.val_dataloader()) - - trainer = Trainer(**trainer_options) result = trainer.fit(model, **fit_options) assert result == 1, "DDP doesn't work with dataloaders passed to fit()." diff --git a/tests/models/test_grad_norm.py b/tests/models/test_grad_norm.py index ff627c5088987..9f49d4d265dd2 100644 --- a/tests/models/test_grad_norm.py +++ b/tests/models/test_grad_norm.py @@ -89,6 +89,7 @@ def test_grad_tracking(tmpdir, norm_type, rtol=5e-3): logger=logger, track_grad_norm=norm_type, row_log_interval=1, # request grad_norms every batch + default_root_dir=tmpdir, ) result = trainer.fit(model) diff --git a/tests/models/test_hooks.py b/tests/models/test_hooks.py index 7d5a8849948d6..4519d666851bd 100644 --- a/tests/models/test_hooks.py +++ b/tests/models/test_hooks.py @@ -23,6 +23,7 @@ def on_before_zero_grad(self, optimizer): max_steps=max_steps, max_epochs=2, num_sanity_val_steps=5, + default_root_dir=tmpdir, ) assert 0 == model.on_before_zero_grad_called trainer.fit(model) diff --git a/tests/models/test_horovod.py b/tests/models/test_horovod.py index 77259df597ebc..ac3c721f3cdfd 100644 --- a/tests/models/test_horovod.py +++ b/tests/models/test_horovod.py @@ -147,7 +147,8 @@ def validation_step(self, batch, *args, **kwargs): def test_horovod_multi_optimizer(tmpdir): model = TestGAN(**EvalModelTemplate.get_default_hparams()) - trainer_options = dict( + # fit model + trainer = Trainer( default_root_dir=str(tmpdir), progress_bar_refresh_rate=0, max_epochs=1, @@ -156,9 +157,6 @@ def test_horovod_multi_optimizer(tmpdir): deterministic=True, distributed_backend='horovod', ) - - # fit model - trainer = Trainer(**trainer_options) result = trainer.fit(model) assert result == 1, 'model failed to complete' diff --git a/tests/models/test_restore.py b/tests/models/test_restore.py index 9331d6c7a540f..08f5eb9dbf6cc 100644 --- a/tests/models/test_restore.py +++ b/tests/models/test_restore.py @@ -36,6 +36,7 @@ def test_running_test_pretrained_model_distrib_dp(tmpdir): logger=logger, gpus=[0, 1], distributed_backend='dp', + default_root_dir=tmpdir, ) # fit model @@ -85,6 +86,7 @@ def test_running_test_pretrained_model_distrib_ddp_spawn(tmpdir): logger=logger, gpus=[0, 1], distributed_backend='ddp_spawn', + default_root_dir=tmpdir, ) # fit model @@ -130,6 +132,7 @@ def test_running_test_pretrained_model_cpu(tmpdir): limit_val_batches=0.2, checkpoint_callback=checkpoint, logger=logger, + default_root_dir=tmpdir, ) # fit model @@ -269,14 +272,13 @@ def test_model_saving_loading(tmpdir): # logger file to get meta logger = tutils.get_default_logger(tmpdir) - trainer_options = dict( + # fit model + trainer = Trainer( max_epochs=1, logger=logger, - checkpoint_callback=ModelCheckpoint(tmpdir) + checkpoint_callback=ModelCheckpoint(tmpdir), + default_root_dir=tmpdir, ) - - # fit model - trainer = Trainer(**trainer_options) result = trainer.fit(model) # traning complete diff --git a/tests/trainer/test_dataloaders.py b/tests/trainer/test_dataloaders.py index e76ef0e556352..517b97b33d63e 100644 --- a/tests/trainer/test_dataloaders.py +++ b/tests/trainer/test_dataloaders.py @@ -235,7 +235,7 @@ def test_multiple_dataloaders_passed_to_fit(tmpdir, ckpt_path): default_root_dir=tmpdir, max_epochs=1, limit_val_batches=0.1, - limit_train_batches=0.2 + limit_train_batches=0.2, ) fit_options = dict(train_dataloader=model.dataloader(train=True), val_dataloaders=[model.dataloader(train=False), @@ -344,7 +344,7 @@ def test_mixing_of_dataloader_options(tmpdir, ckpt_path): default_root_dir=tmpdir, max_epochs=1, limit_val_batches=0.1, - limit_train_batches=0.2 + limit_train_batches=0.2, ) # fit model @@ -462,13 +462,6 @@ def test_warning_with_few_workers(mock, tmpdir, ckpt_path): model = EvalModelTemplate() # logger file to get meta - trainer_options = dict( - default_root_dir=tmpdir, - max_epochs=1, - limit_val_batches=0.1, - limit_train_batches=0.2 - ) - train_dl = model.dataloader(train=True) train_dl.num_workers = 0 @@ -480,7 +473,12 @@ def test_warning_with_few_workers(mock, tmpdir, ckpt_path): fit_options = dict(train_dataloader=train_dl, val_dataloaders=val_dl) - trainer = Trainer(**trainer_options) + trainer = Trainer( + default_root_dir=tmpdir, + max_epochs=1, + limit_val_batches=0.1, + limit_train_batches=0.2, + ) # fit model with pytest.warns( @@ -533,7 +531,7 @@ def __len__(self): @pytest.mark.skipif(torch.cuda.device_count() < 2, reason='Test requires multiple GPUs') -def test_dataloader_reinit_for_subclass(): +def test_dataloader_reinit_for_subclass(tmpdir): class CustomDataLoader(torch.utils.data.DataLoader): def __init__(self, dataset, batch_size=1, shuffle=False, sampler=None, @@ -550,6 +548,7 @@ def __init__(self, dataset, batch_size=1, shuffle=False, sampler=None, gpus=[0, 1], num_nodes=1, distributed_backend='ddp_spawn', + default_root_dir=tmpdir, ) class CustomDummyObj: diff --git a/tests/trainer/test_trainer.py b/tests/trainer/test_trainer.py index 0c4212b66f390..7a84c5bc03b4a 100644 --- a/tests/trainer/test_trainer.py +++ b/tests/trainer/test_trainer.py @@ -182,6 +182,17 @@ def _optimizer_step(epoch, batch_idx, optimizer, optimizer_idx, # clear gradients optimizer.zero_grad() + model = EvalModelTemplate() + schedule = {1: 2, 3: 4} + + trainer = Trainer( + accumulate_grad_batches=schedule, + limit_train_batches=0.1, + limit_val_batches=0.1, + max_epochs=2, + default_root_dir=tmpdir, + ) + # for the test model.optimizer_step = _optimizer_step model.prev_called_batch_idx = 0 @@ -443,7 +454,7 @@ def test_trainer_max_steps_and_epochs(tmpdir): trainer_options.update( default_root_dir=tmpdir, max_epochs=3, - max_steps=num_train_samples + 10 + max_steps=num_train_samples + 10, ) # fit model @@ -457,7 +468,7 @@ def test_trainer_max_steps_and_epochs(tmpdir): # define less train epochs than steps trainer_options.update( max_epochs=2, - max_steps=trainer_options['max_epochs'] * 2 * num_train_samples + max_steps=trainer_options['max_epochs'] * 2 * num_train_samples, ) # fit model @@ -480,7 +491,7 @@ def test_trainer_min_steps_and_epochs(tmpdir): early_stop_callback=EarlyStopping(monitor='val_loss', min_delta=1.0), val_check_interval=2, min_epochs=1, - max_epochs=7 + max_epochs=7, ) # define less min steps than 1 epoch