From 491100abdd8bd21fde343cb27d847e6bc1dbf0fa Mon Sep 17 00:00:00 2001 From: William Falcon Date: Sat, 5 Oct 2019 23:52:32 -0400 Subject: [PATCH] Docs (#315) * cleaning up demos * cleaning up demos * cleaning up demos * cleaning up demos * cleaning up demos * cleaning up demos * cleaning up demos * cleaning up demos * cleaning up demos * cleaning up demos * cleaning up demos * cleaning up demos * cleaning up demos * cleaning up demos * cleaning up demos * cleaning up demos * cleaning up demos * cleaning up demos * cleaning up demos * cleaning up demos * cleaning up demos * cleaning up demos * cleaning up demos * cleaning up demos * cleaning up demos * cleaning up demos * cleaning up demos * cleaning up demos * cleaning up demos * cleaning up demos * cleaning up demos * cleaning up demos * cleaning up demos * cleaning up demos * cleaning up docs * cleaned up test_tube logger * cleaned up test_tube logger * cleaned up test_tube logger --- docs/Trainer/hooks.md | 6 +++--- pytorch_lightning/logging/test_tube_logger.py | 5 ++++- pytorch_lightning/trainer/trainer.py | 6 ++++-- tests/test_models.py | 2 +- 4 files changed, 12 insertions(+), 7 deletions(-) diff --git a/docs/Trainer/hooks.md b/docs/Trainer/hooks.md index 726b5f5a..6fd8df3d 100644 --- a/docs/Trainer/hooks.md +++ b/docs/Trainer/hooks.md @@ -65,12 +65,12 @@ You can override this method to adjust how you do the optimizer step for each op Called once per optimizer ```python # DEFAULT -def optimizer_step(self, current_epoch, batch_nb, optimizer, optimizer_i): +def optimizer_step(self, current_epoch, batch_nb, optimizer, optimizer_i, second_order_closure=None): optimizer.step() optimizer.zero_grad() # Alternating schedule for optimizer steps (ie: GANs) -def optimizer_step(self, current_epoch, batch_nb, optimizer, optimizer_i): +def optimizer_step(self, current_epoch, batch_nb, optimizer, optimizer_i, second_order_closure=None): # update generator opt every 2 steps if optimizer_i == 0: if batch_nb % 2 == 0 : @@ -91,7 +91,7 @@ This step allows you to do a lot of non-standard training tricks such as learnin ```python # learning rate warm-up -def optimizer_step(self, current_epoch, batch_nb, optimizer, optimizer_i): +def optimizer_step(self, current_epoch, batch_nb, optimizer, optimizer_i, second_order_closure=None): # warm up lr if self.trainer.global_step < 500: lr_scale = min(1., float(self.trainer.global_step + 1) / 500.) diff --git a/pytorch_lightning/logging/test_tube_logger.py b/pytorch_lightning/logging/test_tube_logger.py index ffffe2cd..18270304 100644 --- a/pytorch_lightning/logging/test_tube_logger.py +++ b/pytorch_lightning/logging/test_tube_logger.py @@ -10,11 +10,13 @@ class TestTubeLogger(LightningLoggerBase): __test__ = False def __init__( - self, save_dir, name="default", debug=False, version=None, create_git_tag=False + self, save_dir, name="default", description=None, debug=False, + version=None, create_git_tag=False ): super().__init__() self.save_dir = save_dir self.name = name + self.description = description self.debug = debug self._version = version self.create_git_tag = create_git_tag @@ -29,6 +31,7 @@ class TestTubeLogger(LightningLoggerBase): name=self.name, debug=self.debug, version=self.version, + description=self.description, create_git_tag=self.create_git_tag, rank=self.rank, ) diff --git a/pytorch_lightning/trainer/trainer.py b/pytorch_lightning/trainer/trainer.py index 63bf187c..10cf2c57 100644 --- a/pytorch_lightning/trainer/trainer.py +++ b/pytorch_lightning/trainer/trainer.py @@ -659,11 +659,12 @@ class Trainer(TrainerIO): """ warnings.warn(msg) - if on_ddp and self.get_val_dataloaders is not None: + if on_ddp and self.get_val_dataloaders() is not None: for dataloader in self.get_val_dataloaders(): if not isinstance(dataloader.sampler, DistributedSampler): msg = """ Your val_dataloader(s) don't use DistributedSampler. + You're using multiple gpus and multiple nodes without using a DistributedSampler to assign a subset of your data to each process. To silence this warning, pass a DistributedSampler to your DataLoader. @@ -682,11 +683,12 @@ class Trainer(TrainerIO): warnings.warn(msg) break - if on_ddp and self.get_test_dataloaders is not None: + if on_ddp and self.get_test_dataloaders() is not None: for dataloader in self.get_test_dataloaders(): if not isinstance(dataloader.sampler, DistributedSampler): msg = """ Your test_dataloader(s) don't use DistributedSampler. + You're using multiple gpus and multiple nodes without using a DistributedSampler to assign a subset of your data to each process. To silence this warning, pass a DistributedSampler to your DataLoader. diff --git a/tests/test_models.py b/tests/test_models.py index ed38dc5e..581469cb 100644 --- a/tests/test_models.py +++ b/tests/test_models.py @@ -446,7 +446,7 @@ def test_gradient_accumulation_scheduling(): assert Trainer(accumulate_grad_batches={1: 2.5, 3: 5}) # test optimizer call freq matches scheduler - def optimizer_step(self, epoch_nb, batch_nb, optimizer, optimizer_i): + def optimizer_step(self, epoch_nb, batch_nb, optimizer, optimizer_i, second_order_closure=None): # only test the first 12 batches in epoch if batch_nb < 12: if epoch_nb == 0: