From 4972608c8ab53516601e6a0a2cb85cb0985d6afc Mon Sep 17 00:00:00 2001 From: William Falcon Date: Thu, 5 Mar 2020 00:17:34 -0500 Subject: [PATCH 01/37] training_end renamed to training_step_end --- docs/source/experiment_reporting.rst | 6 +-- docs/source/hooks.rst | 2 +- docs/source/multi_gpu.rst | 6 +-- pytorch_lightning/core/lightning.py | 51 ++++++++-------------- pytorch_lightning/profiler/__init__.py | 2 +- pytorch_lightning/trainer/training_loop.py | 6 +-- 6 files changed, 30 insertions(+), 43 deletions(-) diff --git a/docs/source/experiment_reporting.rst b/docs/source/experiment_reporting.rst index 58a865d4e3bcf..c6e2395f6d44d 100644 --- a/docs/source/experiment_reporting.rst +++ b/docs/source/experiment_reporting.rst @@ -34,11 +34,11 @@ Log metrics To plot metrics into whatever logger you passed in (tensorboard, comet, neptune, etc...) -1. Training_end, validation_end, test_end will all log anything in the "log" key of the return dict. +1. training_step_end, validation_end, test_end will all log anything in the "log" key of the return dict. .. code-block:: python - def training_end(self, outputs): + def training_step_end(self, outputs): loss = some_loss() ... @@ -62,7 +62,7 @@ To plot metrics into whatever logger you passed in (tensorboard, comet, neptune, results = {'log': logs} return results -2. Most of the time, you only need training_step and not training_end. You can also return logs from here: +2. Most of the time, you only need training_step and not training_step_end. You can also return logs from here: .. code-block:: python diff --git a/docs/source/hooks.rst b/docs/source/hooks.rst index 0780a735b277d..8e9880860b7db 100644 --- a/docs/source/hooks.rst +++ b/docs/source/hooks.rst @@ -26,7 +26,7 @@ Training loop - on_batch_start - tbptt_split_batch - training_step -- training_end (optional) +- training_step_end (optional) - backward - on_after_backward - optimizer.step() diff --git a/docs/source/multi_gpu.rst b/docs/source/multi_gpu.rst index 2b1776f3ebfae..02a86e9a9005d 100644 --- a/docs/source/multi_gpu.rst +++ b/docs/source/multi_gpu.rst @@ -166,11 +166,11 @@ you will only be operating on one of those pieces. For most metrics, this doesn't really matter. However, if you want full batch statistics or want to use the outputs of the training_step -to do something like a softmax, you can use the `training_end` step. +to do something like a softmax, you can use the `training_step_end` step. .. code-block:: python - def training_end(self, outputs): + def training_step_end(self, outputs): outputs = torch.cat(outputs, dim=1) softmax = softmax(outputs, dim=1) out = softmax.mean() @@ -196,7 +196,7 @@ In pseudocode, the full sequence is: all_results.append(out) # calculate statistics for all parts of the batch - full out = model.training_end(all_results) + full out = model.training_step_end(all_results) Implement Your Own Distributed (DDP) training diff --git a/pytorch_lightning/core/lightning.py b/pytorch_lightning/core/lightning.py index 395f2f531ec8c..47df2f26ab067 100644 --- a/pytorch_lightning/core/lightning.py +++ b/pytorch_lightning/core/lightning.py @@ -222,7 +222,21 @@ def training_step(self, batch, batch_idx, hiddens): """ def training_end(self, *args, **kwargs): - """return loss, dict with metrics for tqdm + """ + .. warning:: Deprecated in v0.7.0. use training_step_end instead + """ + + def training_step_end(self, *args, **kwargs): + """ + Called with the outputs of each batch subset when using + dp or ddp2. + + .. code-block:: python + + # pseudocode + sub_batches = split_batches_for_dp(batch) + results = [training_step(sub_batch) for sub_batch in sub_batches] + training_step_end(results) :param outputs: What you return in `training_step`. :return dict: dictionary with loss key and optional log, progress keys: @@ -230,18 +244,14 @@ def training_end(self, *args, **kwargs): - progress_bar -> Dict for progress bar display. Must have only tensors - log -> Dict of metrics to add to logger. Must have only tensors (no images, etc) - In certain cases (dp, ddp2), you might want to use all outputs of every process to do something. - For instance, if using negative samples, you could run a batch via dp and use ALL the outputs - for a single softmax across the full batch (ie: the denominator would use the full batch). - - In this case you should define training_end to perform those calculations. + In this case you should define training_step_end to perform those calculations. Example ------- .. code-block:: python - # WITHOUT training_end + # WITHOUT training_step_end # if used in DP or DDP2, this batch is 1/num_gpus large def training_step(self, batch, batch_idx): # batch is 1/num_gpus big @@ -253,7 +263,7 @@ def training_step(self, batch, batch_idx): return {'loss': loss} # -------------- - # with training_end to do softmax over the full batch + # with training_step_end to do softmax over the full batch def training_step(self, batch, batch_idx): # batch is 1/num_gpus big x, y = batch @@ -261,7 +271,7 @@ def training_step(self, batch, batch_idx): out = self.forward(x) return {'out': out} - def training_end(self, outputs): + def training_step_end(self, outputs): # this out is now the full size of the batch out = outputs['out'] @@ -271,29 +281,6 @@ def training_end(self, outputs): return {'loss': loss} .. note:: see the `multi-gpu guide for more details `_. - - If you define multiple optimizers, this step will also be called with an additional `optimizer_idx` param. - - .. code-block:: python - - # Multiple optimizers (ie: GANs) - def training_step(self, batch, batch_idx, optimizer_idx): - if optimizer_idx == 0: - # do training_step with encoder - if optimizer_idx == 1: - # do training_step with decoder - - If you add truncated back propagation through time you will also get an additional argument - with the hidden states of the previous step. - - .. code-block:: python - - # Truncated back-propagation through time - def training_step(self, batch, batch_idx, hiddens): - # hiddens are the hiddens from the previous truncated backprop step - - You can also return a -1 instead of a dict to stop the current loop. This is useful if you want to - break out of the current training epoch early. """ def validation_step(self, *args, **kwargs): diff --git a/pytorch_lightning/profiler/__init__.py b/pytorch_lightning/profiler/__init__.py index 0341f07f5a95b..585420997f3d2 100644 --- a/pytorch_lightning/profiler/__init__.py +++ b/pytorch_lightning/profiler/__init__.py @@ -16,7 +16,7 @@ - on_after_backward - optimizer_step - on_batch_end -- training_end +- training_step_end - on_training_end Enable simple profiling diff --git a/pytorch_lightning/trainer/training_loop.py b/pytorch_lightning/trainer/training_loop.py index 82b4ae14cae31..88a2e5ea2bd7f 100644 --- a/pytorch_lightning/trainer/training_loop.py +++ b/pytorch_lightning/trainer/training_loop.py @@ -706,10 +706,10 @@ def training_forward(self, batch, batch_idx, opt_idx, hiddens): output = self.model.training_step(*args) # allow any mode to define training_end - if self.is_overriden('training_end'): + if self.is_overriden('training_step_end'): model_ref = self.get_model() - with self.profiler.profile('training_end'): - output = model_ref.training_end(output) + with self.profiler.profile('training_step_end'): + output = model_ref.training_step_end(output) # format and reduce outputs accordingly output = self.process_output(output, train=True) From 738692c5c461ee06e3fe40ea776971740f95e64f Mon Sep 17 00:00:00 2001 From: William Falcon Date: Thu, 5 Mar 2020 00:23:17 -0500 Subject: [PATCH 02/37] training_end renamed to training_step_end --- pytorch_lightning/core/lightning.py | 19 ++++++++++++++++--- 1 file changed, 16 insertions(+), 3 deletions(-) diff --git a/pytorch_lightning/core/lightning.py b/pytorch_lightning/core/lightning.py index 47df2f26ab067..c617b54f28344 100644 --- a/pytorch_lightning/core/lightning.py +++ b/pytorch_lightning/core/lightning.py @@ -423,8 +423,15 @@ def test_step(self, batch, batch_idx, dataset_idx): The `dataset_idx` corresponds to the order of datasets returned in `test_dataloader`. """ - def validation_end(self, outputs): + """ + .. warning:: Deprecated in v0.7.0. use validation_epoch_end instead. + Will be removed 0.8.0 + :param outputs: + :return: + """ + + def validation_epoch_end(self, outputs): """Outputs has the appended output after each validation step. :param outputs: List of outputs you defined in validation_step, or if there are multiple dataloaders, @@ -497,6 +504,13 @@ def validation_end(self, outputs): """ def test_end(self, outputs): + """ + .. warning:: Deprecated in v0.7.0. use test_epoch_end instead. Will be removed 0.8.0 + :param outputs: + :return: + """ + + def test_epoch_end(self, outputs): """Outputs has the appended output after each test step. :param outputs: List of outputs you defined in test_step, or if there are multiple dataloaders, @@ -958,8 +972,7 @@ def train_dataloader(self): @data_loader def tng_dataloader(self): # todo: remove in v0.8.0 """Implement a PyTorch DataLoader. - - .. warning:: Deprecated in v0.5.0. use train_dataloader instead. + .. warning:: Deprecated in v0.5.0. use train_dataloader instead. Will be removed 0.8.0 """ output = self.train_dataloader() warnings.warn("`tng_dataloader` has been renamed to `train_dataloader` since v0.5.0." From 84560fde518f65d9ba1bcf7b653ce8c3d73c5df5 Mon Sep 17 00:00:00 2001 From: William Falcon Date: Thu, 5 Mar 2020 00:24:14 -0500 Subject: [PATCH 03/37] training_end renamed to training_step_end --- pytorch_lightning/core/__init__.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pytorch_lightning/core/__init__.py b/pytorch_lightning/core/__init__.py index 40eef1cd77552..f7dccc39841c7 100644 --- a/pytorch_lightning/core/__init__.py +++ b/pytorch_lightning/core/__init__.py @@ -83,7 +83,7 @@ def test_step(self, batch, batch_idx): y_hat = self.forward(x) return {'test_loss': F.cross_entropy(y_hat, y)} - def test_end(self, outputs): + def test_epoch_end(self, outputs): test_loss_mean = torch.stack([x['test_loss'] for x in outputs]).mean() return {'test_loss': test_loss_mean} From a3dbe56bf5edbb1c39811f8fd5e1ee4a963cd733 Mon Sep 17 00:00:00 2001 From: William Falcon Date: Thu, 5 Mar 2020 06:38:22 -0500 Subject: [PATCH 04/37] training_end renamed to training_step_end --- pytorch_lightning/core/lightning.py | 137 ++++++++++--------- pytorch_lightning/trainer/evaluation_loop.py | 14 ++ pytorch_lightning/trainer/training_loop.py | 11 ++ 3 files changed, 94 insertions(+), 68 deletions(-) diff --git a/pytorch_lightning/core/lightning.py b/pytorch_lightning/core/lightning.py index c617b54f28344..dbd43379a1c5e 100644 --- a/pytorch_lightning/core/lightning.py +++ b/pytorch_lightning/core/lightning.py @@ -355,74 +355,6 @@ def validation_step(self, batch, batch_idx, dataset_idx): have been disabled. At the end of validation, model goes back to training mode and gradients are enabled. """ - def test_step(self, *args, **kwargs): - """return whatever outputs will need to be aggregated in test_end - :param batch: The output of your dataloader. A tensor, tuple or list - :param int batch_idx: Integer displaying which batch this is - :param int dataloader_idx: Integer displaying which dataloader this is (only if multiple test datasets used) - :return dict: Dict or OrderedDict with metrics to display in progress bar. All keys must be tensors. - - .. code-block:: python - - # if you have one test dataloader: - def test_step(self, batch, batch_idx) - - # if you have multiple test dataloaders: - def test_step(self, batch, batch_idx, dataloader_idxdx) - - - **OPTIONAL** - If you don't need to test you don't need to implement this method. - In this step you'd normally generate examples or - calculate anything of interest such as accuracy. - - When the validation_step is called, the model has been put in eval mode - and PyTorch gradients have been disabled. - At the end of validation, model goes back to training mode and gradients are enabled. - - The dict you return here will be available in the `test_end` method. - - This function is used when you execute `trainer.test()`. - - Example - ------- - - .. code-block:: python - - # CASE 1: A single test dataset - def test_step(self, batch, batch_idx): - x, y = batch - - # implement your own - out = self.forward(x) - loss = self.loss(out, y) - - # calculate acc - labels_hat = torch.argmax(out, dim=1) - test_acc = torch.sum(y == labels_hat).item() / (len(y) * 1.0) - - # all optional... - # return whatever you need for the collation function test_end - output = OrderedDict({ - 'test_loss': loss_test, - 'test_acc': torch.tensor(test_acc), # everything must be a tensor - }) - - # return an optional dict - return output - - - If you pass in multiple test datasets, `test_step` will have an additional argument. - - .. code-block:: python - - # CASE 2: multiple test datasets - def test_step(self, batch, batch_idx, dataset_idx): - # dataset_idx tells you which dataset this is. - - - The `dataset_idx` corresponds to the order of datasets returned in `test_dataloader`. - """ def validation_end(self, outputs): """ .. warning:: Deprecated in v0.7.0. use validation_epoch_end instead. @@ -503,6 +435,75 @@ def validation_end(self, outputs): """ + def test_step(self, *args, **kwargs): + """return whatever outputs will need to be aggregated in test_end + :param batch: The output of your dataloader. A tensor, tuple or list + :param int batch_idx: Integer displaying which batch this is + :param int dataloader_idx: Integer displaying which dataloader this is (only if multiple test datasets used) + :return dict: Dict or OrderedDict with metrics to display in progress bar. All keys must be tensors. + + .. code-block:: python + + # if you have one test dataloader: + def test_step(self, batch, batch_idx) + + # if you have multiple test dataloaders: + def test_step(self, batch, batch_idx, dataloader_idxdx) + + + **OPTIONAL** + If you don't need to test you don't need to implement this method. + In this step you'd normally generate examples or + calculate anything of interest such as accuracy. + + When the validation_step is called, the model has been put in eval mode + and PyTorch gradients have been disabled. + At the end of validation, model goes back to training mode and gradients are enabled. + + The dict you return here will be available in the `test_end` method. + + This function is used when you execute `trainer.test()`. + + Example + ------- + + .. code-block:: python + + # CASE 1: A single test dataset + def test_step(self, batch, batch_idx): + x, y = batch + + # implement your own + out = self.forward(x) + loss = self.loss(out, y) + + # calculate acc + labels_hat = torch.argmax(out, dim=1) + test_acc = torch.sum(y == labels_hat).item() / (len(y) * 1.0) + + # all optional... + # return whatever you need for the collation function test_end + output = OrderedDict({ + 'test_loss': loss_test, + 'test_acc': torch.tensor(test_acc), # everything must be a tensor + }) + + # return an optional dict + return output + + + If you pass in multiple test datasets, `test_step` will have an additional argument. + + .. code-block:: python + + # CASE 2: multiple test datasets + def test_step(self, batch, batch_idx, dataset_idx): + # dataset_idx tells you which dataset this is. + + + The `dataset_idx` corresponds to the order of datasets returned in `test_dataloader`. + """ + def test_end(self, outputs): """ .. warning:: Deprecated in v0.7.0. use test_epoch_end instead. Will be removed 0.8.0 diff --git a/pytorch_lightning/trainer/evaluation_loop.py b/pytorch_lightning/trainer/evaluation_loop.py index fbd1e05496db6..3e786d0b8a233 100644 --- a/pytorch_lightning/trainer/evaluation_loop.py +++ b/pytorch_lightning/trainer/evaluation_loop.py @@ -131,6 +131,7 @@ import torch from torch.utils.data import DataLoader from tqdm.auto import tqdm +import warnings from pytorch_lightning.core.lightning import LightningModule from pytorch_lightning.utilities.debugging import MisconfigurationException @@ -280,10 +281,23 @@ def evaluate(self, model, dataloaders, max_batches, test_mode: bool = False): # give model a chance to do something with the outputs (and method defined) model = self.get_model() + + if test_mode and self.is_overriden('test_epoch_end'): + eval_results = model.test_end(outputs) + elif self.is_overriden('validation_epoch_end'): + eval_results = model.validation_end(outputs) + + # TODO: remove in v 1.0.0 if test_mode and self.is_overriden('test_end'): eval_results = model.test_end(outputs) + m = 'test_end was deprecated in 0.7.0 and will be removed 1.0.0. ' \ + 'Use test_epoch_end instead.' + warnings.warn(m, DeprecationWarning) elif self.is_overriden('validation_end'): eval_results = model.validation_end(outputs) + m = 'validation_end was deprecated in 0.7.0 and will be removed 1.0.0. ' \ + 'Use validation_epoch_end instead.' + warnings.warn(m, DeprecationWarning) # enable train mode again model.train() diff --git a/pytorch_lightning/trainer/training_loop.py b/pytorch_lightning/trainer/training_loop.py index 88a2e5ea2bd7f..b743b2b3bd28a 100644 --- a/pytorch_lightning/trainer/training_loop.py +++ b/pytorch_lightning/trainer/training_loop.py @@ -711,6 +711,17 @@ def training_forward(self, batch, batch_idx, opt_idx, hiddens): with self.profiler.profile('training_step_end'): output = model_ref.training_step_end(output) + # allow any mode to define training_end + # TODO: remove in 0.8.0 + if self.is_overriden('training_end'): + model_ref = self.get_model() + with self.profiler.profile('training_end'): + output = model_ref.training_step_end(output) + + m = 'training_end was deprecated in 0.7.0 and will be removed 0.8.0. ' \ + 'Use training_epoch_end instead' + warnings.warn(m, DeprecationWarning) + # format and reduce outputs accordingly output = self.process_output(output, train=True) From 165ca51bcaccd6767954383d31a77349b3342cfd Mon Sep 17 00:00:00 2001 From: William Falcon Date: Thu, 5 Mar 2020 07:25:18 -0500 Subject: [PATCH 05/37] training_end to training_step_end --- docs/source/multi_gpu.rst | 32 ++++++++++++++++++++-- pytorch_lightning/trainer/training_loop.py | 9 +++--- 2 files changed, 34 insertions(+), 7 deletions(-) diff --git a/docs/source/multi_gpu.rst b/docs/source/multi_gpu.rst index 02a86e9a9005d..725196733f84e 100644 --- a/docs/source/multi_gpu.rst +++ b/docs/source/multi_gpu.rst @@ -165,12 +165,13 @@ you will only be operating on one of those pieces. y_0 = batch For most metrics, this doesn't really matter. However, if you want -full batch statistics or want to use the outputs of the training_step -to do something like a softmax, you can use the `training_step_end` step. +to add something to your computational graph (like softmax) +using all batch parts you can use the `training_step_end` step. .. code-block:: python def training_step_end(self, outputs): + # only use when on dp outputs = torch.cat(outputs, dim=1) softmax = softmax(outputs, dim=1) out = softmax.mean() @@ -195,9 +196,34 @@ In pseudocode, the full sequence is: out = gpu_model(batch_split) all_results.append(out) - # calculate statistics for all parts of the batch + # use the full batch for something like softmax full out = model.training_step_end(all_results) +to illustrate why this is needed, let's look at dataparallel + +.. code-block:: python + + def training_step(self, batch, batch_idx): + x, y = batch + y_hat = self.forward(batch) + + # on dp or ddp2 if we did softmax now it would be wrong + # because batch is actually a piece of the full batch + return y_hat + + def training_step_end(self, full_batch_outputs): + # full_batch_outputs has outputs of each part of the batch + + # do softmax here + outputs = torch.cat(outputs, dim=1) + softmax = softmax(outputs, dim=1) + out = softmax.mean() + + return out + +If `training_step_end` is defined it will be called regardless of tpu, dp, ddp, etc... which means +it will behave the same no matter the backend. + Implement Your Own Distributed (DDP) training ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ diff --git a/pytorch_lightning/trainer/training_loop.py b/pytorch_lightning/trainer/training_loop.py index b743b2b3bd28a..986a7428a8889 100644 --- a/pytorch_lightning/trainer/training_loop.py +++ b/pytorch_lightning/trainer/training_loop.py @@ -705,20 +705,21 @@ def training_forward(self, batch, batch_idx, opt_idx, hiddens): else: output = self.model.training_step(*args) - # allow any mode to define training_end + # allow any mode to define training_step_end + # do something will all the dp outputs (like softmax) if self.is_overriden('training_step_end'): model_ref = self.get_model() with self.profiler.profile('training_step_end'): output = model_ref.training_step_end(output) # allow any mode to define training_end - # TODO: remove in 0.8.0 + # TODO: remove in 1.0.0 if self.is_overriden('training_end'): model_ref = self.get_model() with self.profiler.profile('training_end'): - output = model_ref.training_step_end(output) + output = model_ref.training_end(output) - m = 'training_end was deprecated in 0.7.0 and will be removed 0.8.0. ' \ + m = 'training_end was deprecated in 0.7.0 and will be removed 1.0.0. ' \ 'Use training_epoch_end instead' warnings.warn(m, DeprecationWarning) From 890364ee484917c6e1808d1104138a0fd680e558 Mon Sep 17 00:00:00 2001 From: William Falcon Date: Thu, 5 Mar 2020 07:30:13 -0500 Subject: [PATCH 06/37] training_end to training_step_end --- pytorch_lightning/trainer/evaluation_loop.py | 22 +++++++++++++++----- 1 file changed, 17 insertions(+), 5 deletions(-) diff --git a/pytorch_lightning/trainer/evaluation_loop.py b/pytorch_lightning/trainer/evaluation_loop.py index 3e786d0b8a233..1ca088ebbc720 100644 --- a/pytorch_lightning/trainer/evaluation_loop.py +++ b/pytorch_lightning/trainer/evaluation_loop.py @@ -261,6 +261,18 @@ def evaluate(self, model, dataloaders, max_batches, test_mode: bool = False): # ----------------- output = self.evaluation_forward(model, batch, batch_idx, dataloader_idx, test_mode) + # on dp / ddp2 might still want to do something with the batch parts + if test_mode: + if self.is_overriden('test_step_end'): + model_ref = self.get_model() + with self.profiler.profile('test_step_end'): + output = model_ref.test_step_end(output) + else: + if self.is_overriden('validation_step_end'): + model_ref = self.get_model() + with self.profiler.profile('validation_step_end'): + output = model_ref.validation_step_end(output) + # track outputs for collation dl_outputs.append(output) @@ -283,9 +295,9 @@ def evaluate(self, model, dataloaders, max_batches, test_mode: bool = False): model = self.get_model() if test_mode and self.is_overriden('test_epoch_end'): - eval_results = model.test_end(outputs) + eval_results = model.test_epoch_end(outputs) elif self.is_overriden('validation_epoch_end'): - eval_results = model.validation_end(outputs) + eval_results = model.validation_epoch_end(outputs) # TODO: remove in v 1.0.0 if test_mode and self.is_overriden('test_end'): @@ -406,7 +418,7 @@ def evaluation_forward(self, model, batch, batch_idx, dataloader_idx, test_mode: output = model(*args) return output - # single GPU + # single GPU data transfer if self.single_gpu: # for single GPU put inputs on gpu manually root_gpu = 0 @@ -415,12 +427,12 @@ def evaluation_forward(self, model, batch, batch_idx, dataloader_idx, test_mode: batch = self.transfer_batch_to_gpu(batch, root_gpu) args[0] = batch - # TPU + # TPU data transfer if self.use_tpu: batch = self.transfer_batch_to_tpu(batch) args[0] = batch - # CPU + # CPU, TPU or gpu step if test_mode: output = model.test_step(*args) else: From f76fdb8d36001f2d93253f2fc63ce9444553ad02 Mon Sep 17 00:00:00 2001 From: William Falcon Date: Thu, 5 Mar 2020 07:31:33 -0500 Subject: [PATCH 07/37] training_end to training_step_end --- docs/source/multi_gpu.rst | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/docs/source/multi_gpu.rst b/docs/source/multi_gpu.rst index 725196733f84e..492a82a0ab978 100644 --- a/docs/source/multi_gpu.rst +++ b/docs/source/multi_gpu.rst @@ -224,6 +224,15 @@ to illustrate why this is needed, let's look at dataparallel If `training_step_end` is defined it will be called regardless of tpu, dp, ddp, etc... which means it will behave the same no matter the backend. +Validation and test step also have the same option when using dp + +.. code-block:: python + def validation_step_end(self, full_batch_outputs): + ... + + def test_step_end(self, full_batch_outputs): + ... + Implement Your Own Distributed (DDP) training ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ From 39b66c3595823adb67e3bb0ec8becdf8459db935 Mon Sep 17 00:00:00 2001 From: William Falcon Date: Thu, 5 Mar 2020 07:38:38 -0500 Subject: [PATCH 08/37] training_end to training_step_end --- docs/source/multi_gpu.rst | 8 +- pytorch_lightning/core/lightning.py | 135 ++++++++++++++++++++++++++-- 2 files changed, 133 insertions(+), 10 deletions(-) diff --git a/docs/source/multi_gpu.rst b/docs/source/multi_gpu.rst index 492a82a0ab978..ac40bf72f6979 100644 --- a/docs/source/multi_gpu.rst +++ b/docs/source/multi_gpu.rst @@ -211,8 +211,8 @@ to illustrate why this is needed, let's look at dataparallel # because batch is actually a piece of the full batch return y_hat - def training_step_end(self, full_batch_outputs): - # full_batch_outputs has outputs of each part of the batch + def training_step_end(self, batch_parts_outputs): + # batch_parts_outputs has outputs of each part of the batch # do softmax here outputs = torch.cat(outputs, dim=1) @@ -227,10 +227,10 @@ it will behave the same no matter the backend. Validation and test step also have the same option when using dp .. code-block:: python - def validation_step_end(self, full_batch_outputs): + def validation_step_end(self, batch_parts_outputs): ... - def test_step_end(self, full_batch_outputs): + def test_step_end(self, batch_parts_outputs): ... diff --git a/pytorch_lightning/core/lightning.py b/pytorch_lightning/core/lightning.py index dbd43379a1c5e..d9155f49c1b48 100644 --- a/pytorch_lightning/core/lightning.py +++ b/pytorch_lightning/core/lightning.py @@ -228,17 +228,21 @@ def training_end(self, *args, **kwargs): def training_step_end(self, *args, **kwargs): """ - Called with the outputs of each batch subset when using - dp or ddp2. + Use this when training with dp or ddp2 because training_step will operate + on only part of the batch. However, this is still optional + and only needed for things like softmax or NCE loss. + + If you later switch to ddp or some other mode, this will still be called + so that you don't have to change your code .. code-block:: python # pseudocode sub_batches = split_batches_for_dp(batch) - results = [training_step(sub_batch) for sub_batch in sub_batches] - training_step_end(results) + batch_parts_outputs = [training_step(sub_batch) for sub_batch in sub_batches] + training_step_end(batch_parts_outputs) - :param outputs: What you return in `training_step`. + :param batch_parts_outputs: What you return in `training_step` for each batch part. :return dict: dictionary with loss key and optional log, progress keys: - loss -> tensor scalar [REQUIRED] - progress_bar -> Dict for progress bar display. Must have only tensors @@ -276,7 +280,6 @@ def training_step_end(self, outputs): out = outputs['out'] # this softmax now uses the full batch size - loss = self.softmax(out) loss = nce_loss(loss) return {'loss': loss} @@ -355,6 +358,66 @@ def validation_step(self, batch, batch_idx, dataset_idx): have been disabled. At the end of validation, model goes back to training mode and gradients are enabled. """ + def validation_step_end(self, *args, **kwargs): + """ + Use this when training with dp or ddp2 because training_step will operate + on only part of the batch. However, this is still optional + and only needed for things like softmax or NCE loss. + + If you later switch to ddp or some other mode, this will still be called + so that you don't have to change your code + + .. code-block:: python + + # pseudocode + sub_batches = split_batches_for_dp(batch) + batch_parts_outputs = [training_step(sub_batch) for sub_batch in sub_batches] + validation_step_end(batch_parts_outputs) + + :param batch_parts_outputs: What you return in `training_step` for each batch part. + :return dict: dictionary with loss key and optional log, progress keys: + - loss -> tensor scalar [REQUIRED] + - progress_bar -> Dict for progress bar display. Must have only tensors + - log -> Dict of metrics to add to logger. Must have only tensors (no images, etc) + + In this case you should define validation_step_end to perform those calculations. + + Example + ------- + + .. code-block:: python + + # WITHOUT validation_step_end + # if used in DP or DDP2, this batch is 1/num_gpus large + def training_step(self, batch, batch_idx): + # batch is 1/num_gpus big + x, y = batch + + out = self.forward(x) + loss = self.softmax(out) + loss = nce_loss(loss) + return {'loss': loss} + + # -------------- + # with validation_step_end to do softmax over the full batch + def training_step(self, batch, batch_idx): + # batch is 1/num_gpus big + x, y = batch + + out = self.forward(x) + return {'out': out} + + def validation_step_end(self, outputs): + # this out is now the full size of the batch + out = outputs['out'] + + # this softmax now uses the full batch size + loss = nce_loss(loss) + return {'loss': loss} + + .. note:: see the `multi-gpu guide for more details `_. + """ + def validation_end(self, outputs): """ .. warning:: Deprecated in v0.7.0. use validation_epoch_end instead. @@ -504,6 +567,66 @@ def test_step(self, batch, batch_idx, dataset_idx): The `dataset_idx` corresponds to the order of datasets returned in `test_dataloader`. """ + def test_step_end(self, *args, **kwargs): + """ + Use this when training with dp or ddp2 because training_step will operate + on only part of the batch. However, this is still optional + and only needed for things like softmax or NCE loss. + + If you later switch to ddp or some other mode, this will still be called + so that you don't have to change your code + + .. code-block:: python + + # pseudocode + sub_batches = split_batches_for_dp(batch) + batch_parts_outputs = [training_step(sub_batch) for sub_batch in sub_batches] + test_step_end(batch_parts_outputs) + + :param batch_parts_outputs: What you return in `training_step` for each batch part. + :return dict: dictionary with loss key and optional log, progress keys: + - loss -> tensor scalar [REQUIRED] + - progress_bar -> Dict for progress bar display. Must have only tensors + - log -> Dict of metrics to add to logger. Must have only tensors (no images, etc) + + In this case you should define test_step_end to perform those calculations. + + Example + ------- + + .. code-block:: python + + # WITHOUT test_step_end + # if used in DP or DDP2, this batch is 1/num_gpus large + def training_step(self, batch, batch_idx): + # batch is 1/num_gpus big + x, y = batch + + out = self.forward(x) + loss = self.softmax(out) + loss = nce_loss(loss) + return {'loss': loss} + + # -------------- + # with test_step_end to do softmax over the full batch + def training_step(self, batch, batch_idx): + # batch is 1/num_gpus big + x, y = batch + + out = self.forward(x) + return {'out': out} + + def test_step_end(self, outputs): + # this out is now the full size of the batch + out = outputs['out'] + + # this softmax now uses the full batch size + loss = nce_loss(loss) + return {'loss': loss} + + .. note:: see the `multi-gpu guide for more details `_. + """ + def test_end(self, outputs): """ .. warning:: Deprecated in v0.7.0. use test_epoch_end instead. Will be removed 0.8.0 From e7e1ce9d1fbbba50dcaf272722db7969c29b3657 Mon Sep 17 00:00:00 2001 From: William Falcon Date: Thu, 5 Mar 2020 07:38:49 -0500 Subject: [PATCH 09/37] fix lost model reference --- pytorch_lightning/core/lightning.py | 1 - 1 file changed, 1 deletion(-) diff --git a/pytorch_lightning/core/lightning.py b/pytorch_lightning/core/lightning.py index d9155f49c1b48..855446dda7199 100644 --- a/pytorch_lightning/core/lightning.py +++ b/pytorch_lightning/core/lightning.py @@ -695,7 +695,6 @@ def test_end(self, outputs): 'log': {'test_loss': val_loss_mean.item()} } return results - """ def configure_ddp(self, model, device_ids): From 9db4d1fca04e5bc64c00a8f35a44f50acb34ece7 Mon Sep 17 00:00:00 2001 From: William Falcon Date: Thu, 5 Mar 2020 07:42:03 -0500 Subject: [PATCH 10/37] training_end to training_step_end --- pytorch_lightning/core/lightning.py | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/pytorch_lightning/core/lightning.py b/pytorch_lightning/core/lightning.py index 855446dda7199..1cd3ab113bae0 100644 --- a/pytorch_lightning/core/lightning.py +++ b/pytorch_lightning/core/lightning.py @@ -421,7 +421,7 @@ def validation_step_end(self, outputs): def validation_end(self, outputs): """ .. warning:: Deprecated in v0.7.0. use validation_epoch_end instead. - Will be removed 0.8.0 + Will be removed 1.0.0 :param outputs: :return: """ @@ -629,7 +629,7 @@ def test_step_end(self, outputs): def test_end(self, outputs): """ - .. warning:: Deprecated in v0.7.0. use test_epoch_end instead. Will be removed 0.8.0 + .. warning:: Deprecated in v0.7.0. use test_epoch_end instead. Will be removed 1.0.0 :param outputs: :return: """ @@ -1093,13 +1093,13 @@ def train_dataloader(self): return None @data_loader - def tng_dataloader(self): # todo: remove in v0.8.0 + def tng_dataloader(self): # todo: remove in v1.0.0 """Implement a PyTorch DataLoader. - .. warning:: Deprecated in v0.5.0. use train_dataloader instead. Will be removed 0.8.0 + .. warning:: Deprecated in v0.5.0. use train_dataloader instead. Will be removed 1.0.0 """ output = self.train_dataloader() warnings.warn("`tng_dataloader` has been renamed to `train_dataloader` since v0.5.0." - " and this method will be removed in v0.8.0", DeprecationWarning) + " and this method will be removed in v1.0.0", DeprecationWarning) return output def test_dataloader(self): From e13beac3a7917019ae67281f6bff9bb1bd9c4ed7 Mon Sep 17 00:00:00 2001 From: William Falcon Date: Thu, 5 Mar 2020 07:43:36 -0500 Subject: [PATCH 11/37] training_end to training_step_end --- pytorch_lightning/core/lightning.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/pytorch_lightning/core/lightning.py b/pytorch_lightning/core/lightning.py index 1cd3ab113bae0..25bef9215ed1c 100644 --- a/pytorch_lightning/core/lightning.py +++ b/pytorch_lightning/core/lightning.py @@ -232,7 +232,7 @@ def training_step_end(self, *args, **kwargs): on only part of the batch. However, this is still optional and only needed for things like softmax or NCE loss. - If you later switch to ddp or some other mode, this will still be called + .. note:: If you later switch to ddp or some other mode, this will still be called so that you don't have to change your code .. code-block:: python @@ -364,7 +364,7 @@ def validation_step_end(self, *args, **kwargs): on only part of the batch. However, this is still optional and only needed for things like softmax or NCE loss. - If you later switch to ddp or some other mode, this will still be called + .. note:: If you later switch to ddp or some other mode, this will still be called so that you don't have to change your code .. code-block:: python @@ -573,7 +573,7 @@ def test_step_end(self, *args, **kwargs): on only part of the batch. However, this is still optional and only needed for things like softmax or NCE loss. - If you later switch to ddp or some other mode, this will still be called + .. note:: If you later switch to ddp or some other mode, this will still be called so that you don't have to change your code .. code-block:: python From 684fc47228884e36458adfdcf0be12103e10c3e6 Mon Sep 17 00:00:00 2001 From: William Falcon Date: Thu, 5 Mar 2020 07:44:36 -0500 Subject: [PATCH 12/37] training_end to training_step_end --- pytorch_lightning/core/lightning.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/pytorch_lightning/core/lightning.py b/pytorch_lightning/core/lightning.py index 25bef9215ed1c..0cdead61bf95f 100644 --- a/pytorch_lightning/core/lightning.py +++ b/pytorch_lightning/core/lightning.py @@ -233,7 +233,7 @@ def training_step_end(self, *args, **kwargs): and only needed for things like softmax or NCE loss. .. note:: If you later switch to ddp or some other mode, this will still be called - so that you don't have to change your code + so that you don't have to change your code .. code-block:: python @@ -365,7 +365,7 @@ def validation_step_end(self, *args, **kwargs): and only needed for things like softmax or NCE loss. .. note:: If you later switch to ddp or some other mode, this will still be called - so that you don't have to change your code + so that you don't have to change your code .. code-block:: python @@ -574,7 +574,7 @@ def test_step_end(self, *args, **kwargs): and only needed for things like softmax or NCE loss. .. note:: If you later switch to ddp or some other mode, this will still be called - so that you don't have to change your code + so that you don't have to change your code .. code-block:: python From c508dfb68e1e0eeb91e5ab46a6a8f682f390c06c Mon Sep 17 00:00:00 2001 From: William Falcon Date: Thu, 5 Mar 2020 07:46:36 -0500 Subject: [PATCH 13/37] training_end to training_step_end --- docs/source/multi_gpu.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/source/multi_gpu.rst b/docs/source/multi_gpu.rst index ac40bf72f6979..fdd5a92b46708 100644 --- a/docs/source/multi_gpu.rst +++ b/docs/source/multi_gpu.rst @@ -227,13 +227,13 @@ it will behave the same no matter the backend. Validation and test step also have the same option when using dp .. code-block:: python + def validation_step_end(self, batch_parts_outputs): ... def test_step_end(self, batch_parts_outputs): ... - Implement Your Own Distributed (DDP) training ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ If you need your own way to init PyTorch DDP you can override :meth:`pytorch_lightning.core.LightningModule.`. From 8b8679c1c0209cf0dab7a68aa434344fcee914bd Mon Sep 17 00:00:00 2001 From: William Falcon Date: Thu, 5 Mar 2020 08:37:24 -0500 Subject: [PATCH 14/37] training_end to training_step_end --- pytorch_lightning/core/__init__.py | 48 +++++-- pytorch_lightning/core/lightning.py | 190 +++++++++++++++++----------- 2 files changed, 152 insertions(+), 86 deletions(-) diff --git a/pytorch_lightning/core/__init__.py b/pytorch_lightning/core/__init__.py index f7dccc39841c7..32e4fc3b14116 100644 --- a/pytorch_lightning/core/__init__.py +++ b/pytorch_lightning/core/__init__.py @@ -1,15 +1,21 @@ """ -A LightningModule is a strict superclass of torch.nn.Module but provides an interface to standardize -the "ingredients" for a research or production system. +A LightningModule organizes your PyTorch code into the following sections: - The model/system definition (__init__) - The model/system computations (forward) -- What happens in the training loop (training_step, training_end) -- What happens in the validation loop (validation_step, validation_end) -- What happens in the test loop (test_step, test_end) +- What happens in the training loop (training_step) +- What happens in the validation loop (validation_step, validation_epoch_end) +- What happens in the test loop (test_step, test_epoch_end) - What optimizers to use (configure_optimizers) - What data to use (train_dataloader, val_dataloader, test_dataloader) +.. note:: LightningModule is a torch.nn.Module but with added functionality. + +------------ + +Minimal Example +--------------- + Most methods are optional. Here's a minimal example. .. code-block:: python @@ -37,13 +43,13 @@ def training_step(self, batch, batch_idx): y_hat = self.forward(x) return {'loss': F.cross_entropy(y_hat, y)} - def configure_optimizers(self): - return torch.optim.Adam(self.parameters(), lr=0.02) - def train_dataloader(self): return DataLoader(MNIST(os.getcwd(), train=True, download=True, transform=transforms.ToTensor()), batch_size=32) + def configure_optimizers(self): + return torch.optim.Adam(self.parameters(), lr=0.02) + Which you can train by doing: .. code-block:: python @@ -53,7 +59,29 @@ def train_dataloader(self): trainer.fit(model) -If you wanted to add a validation loop +---------- + +Training loop structure +----------------------- + +The general pattern is that each loop (training, validation, test loop) +has 2 methods, ```___step, ___epoch_end``` + +To show how lightning calls these, let's use the validation loop as an example + +.. code-block:: python + + val_outs = [] + for val_batch in val_data: + # do something with each batch + out = validation_step(val_batch) + val_outs.append(out) + + # do something with the outputs for all batches + # like calculate validation set accuracy or loss + validation_epoch_end(val_outs) + +Thus, if we wanted to add a validation loop you would add this to your LightningModule .. code-block:: python @@ -63,7 +91,7 @@ def validation_step(self, batch, batch_idx): y_hat = self.forward(x) return {'val_loss': F.cross_entropy(y_hat, y)} - def validation_end(self, outputs): + def validation_epoch_end(self, outputs): val_loss_mean = torch.stack([x['val_loss'] for x in outputs]).mean() return {'val_loss': val_loss_mean} diff --git a/pytorch_lightning/core/lightning.py b/pytorch_lightning/core/lightning.py index 0cdead61bf95f..03a94fcc5cc07 100644 --- a/pytorch_lightning/core/lightning.py +++ b/pytorch_lightning/core/lightning.py @@ -288,11 +288,19 @@ def training_step_end(self, outputs): def validation_step(self, *args, **kwargs): r""" - - This is the validation loop. It is called for each batch of the validation set. - Whatever is returned from here will be passed in as a list on validation_end. + Operate on a single batch of data from the validation set In this step you'd normally generate examples or calculate anything of interest such as accuracy. + .. code-block:: python + + # the pseudocode for these calls + + val_outs = [] + for val_batch in val_data: + out = validation_step(train_batch) + val_outs.append(out + validation_epoch_end(val_outs) + Args: batch (torch.nn.Tensor | (Tensor, Tensor) | [Tensor, Tensor]): The output of your dataloader. A tensor, tuple or list @@ -301,7 +309,7 @@ def validation_step(self, *args, **kwargs): val datasets used) Return: - Dict or OrderedDict - passed to the validation_end step + Dict or OrderedDict - passed to the validation_epoch_end .. code-block:: python @@ -309,7 +317,7 @@ def validation_step(self, *args, **kwargs): def validation_step(self, batch, batch_idx) # if you have multiple val dataloaders: - def validation_step(self, batch, batch_idx, dataloader_idxdx) + def validation_step(self, batch, batch_idx, dataloader_idx) Example ------- @@ -427,22 +435,34 @@ def validation_end(self, outputs): """ def validation_epoch_end(self, outputs): - """Outputs has the appended output after each validation step. + """ + Called at end of validation epoch with the output of all validation_steps + + .. code-block:: python - :param outputs: List of outputs you defined in validation_step, or if there are multiple dataloaders, - a list containing a list of outputs for each dataloader - :return dict: Dictionary or OrderedDict with optional: + # the pseudocode for these calls + + val_outs = [] + for val_batch in val_data: + out = validation_step(train_batch) + train_outs.append(out + validation_epoch_end(val_outs) + + Args: + + outputs (list): List of outputs you defined in validation_step, or if there are multiple dataloaders, + a list containing a list of outputs for each dataloader + + Return: + Dict or OrderedDict (dict): Dict has the following optional keys: progress_bar -> Dict for progress bar display. Must have only tensors log -> Dict of metrics to add to logger. Must have only tensors (no images, etc) - If you didn't define a validation_step, this won't be called. - Called at the end of the validation loop with the outputs of validation_step. + .. note:: If you didn't define a validation_step, this won't be called. - The outputs here are strictly for the progress bar. - If you don't need to display anything, don't return anything. - Any keys present in 'log', 'progress_bar' or the rest of the dictionary - are available for callbacks to access. If you want to manually set current step, you can specify it with - 'step' key in the 'log' Dict. + - The outputs here are strictly for logging or progress bar. + - If you don't need to display anything, don't return anything. + - If you want to manually set current step, you can specify it with the 'step' key in the 'log' Dict. Example ------- @@ -451,21 +471,18 @@ def validation_epoch_end(self, outputs): .. code-block:: python - def validation_end(self, outputs): - val_loss_mean = 0 + def validation_epoch_end(self, outputs): val_acc_mean = 0 for output in outputs: - val_loss_mean += output['val_loss'] val_acc_mean += output['val_acc'] - val_loss_mean /= len(outputs) val_acc_mean /= len(outputs) - tqdm_dict = {'val_loss': val_loss_mean.item(), 'val_acc': val_acc_mean.item()} + tqdm_dict = {'val_acc': val_acc_mean.item()} # show val_loss and val_acc in progress bar but only log val_loss results = { 'progress_bar': tqdm_dict, - 'log': {'val_loss': val_loss_mean.item()} + 'log': {'val_acc': val_acc_mean.item()} } return results @@ -475,57 +492,57 @@ def validation_end(self, outputs): .. code-block:: python - def validation_end(self, outputs): - val_loss_mean = 0 + def validation_epoch_end(self, outputs): val_acc_mean = 0 i = 0 for dataloader_outputs in outputs: for output in dataloader_outputs: - val_loss_mean += output['val_loss'] val_acc_mean += output['val_acc'] i += 1 - val_loss_mean /= i val_acc_mean /= i - tqdm_dict = {'val_loss': val_loss_mean.item(), 'val_acc': val_acc_mean.item()} + tqdm_dict = {'val_acc': val_acc_mean.item()} # show val_loss and val_acc in progress bar but only log val_loss results = { 'progress_bar': tqdm_dict, - 'log': {'val_loss': val_loss_mean.item(), 'step': self.current_epoch} + 'log': {'val_acc': val_acc_mean.item(), 'step': self.current_epoch} } return results - """ def test_step(self, *args, **kwargs): - """return whatever outputs will need to be aggregated in test_end - :param batch: The output of your dataloader. A tensor, tuple or list - :param int batch_idx: Integer displaying which batch this is - :param int dataloader_idx: Integer displaying which dataloader this is (only if multiple test datasets used) - :return dict: Dict or OrderedDict with metrics to display in progress bar. All keys must be tensors. + r""" + Operate on a single batch of data from the test set + In this step you'd normally generate examples or calculate anything of interest such as accuracy. .. code-block:: python - # if you have one test dataloader: - def test_step(self, batch, batch_idx) + # the pseudocode for these calls - # if you have multiple test dataloaders: - def test_step(self, batch, batch_idx, dataloader_idxdx) + test_outs = [] + for test_batch in test_data: + out = test_step(train_batch) + test_outs.append(out + test_epoch_end(test_outs) + Args: + batch (torch.nn.Tensor | (Tensor, Tensor) | [Tensor, Tensor]): The output of your dataloader. + A tensor, tuple or list + batch_idx (int): The index of this batch + dataloader_idx (int): The index of the dataloader that produced this batch (only if multiple + test datasets used) - **OPTIONAL** - If you don't need to test you don't need to implement this method. - In this step you'd normally generate examples or - calculate anything of interest such as accuracy. + Return: + Dict or OrderedDict - passed to the test_epoch_end - When the validation_step is called, the model has been put in eval mode - and PyTorch gradients have been disabled. - At the end of validation, model goes back to training mode and gradients are enabled. + .. code-block:: python - The dict you return here will be available in the `test_end` method. + # if you have one test dataloader: + def test_step(self, batch, batch_idx) - This function is used when you execute `trainer.test()`. + # if you have multiple test dataloaders: + def test_step(self, batch, batch_idx, dataloader_idx) Example ------- @@ -540,31 +557,38 @@ def test_step(self, batch, batch_idx): out = self.forward(x) loss = self.loss(out, y) + # log 6 example images + # or generated text... or whatever + sample_imgs = x[:6] + grid = torchvision.utils.make_grid(sample_imgs) + self.logger.experiment.add_image('example_images', grid, 0) + # calculate acc labels_hat = torch.argmax(out, dim=1) - test_acc = torch.sum(y == labels_hat).item() / (len(y) * 1.0) + val_acc = torch.sum(y == labels_hat).item() / (len(y) * 1.0) # all optional... - # return whatever you need for the collation function test_end + # return whatever you need for the collation function validation_end output = OrderedDict({ - 'test_loss': loss_test, - 'test_acc': torch.tensor(test_acc), # everything must be a tensor + 'val_loss': loss_val, + 'val_acc': torch.tensor(val_acc), # everything must be a tensor }) # return an optional dict return output - - If you pass in multiple test datasets, `test_step` will have an additional argument. + If you pass in multiple validation datasets, validation_step will have an additional argument. .. code-block:: python - # CASE 2: multiple test datasets + # CASE 2: multiple validation datasets def test_step(self, batch, batch_idx, dataset_idx): # dataset_idx tells you which dataset this is. + .. note:: If you don't need to validate you don't need to implement this method. - The `dataset_idx` corresponds to the order of datasets returned in `test_dataloader`. + .. note:: When the validation_step is called, the model has been put in eval mode and PyTorch gradients + have been disabled. At the end of validation, model goes back to training mode and gradients are enabled. """ def test_step_end(self, *args, **kwargs): @@ -635,64 +659,78 @@ def test_end(self, outputs): """ def test_epoch_end(self, outputs): - """Outputs has the appended output after each test step. + """ + Called at end of test epoch with the output of all test_steps + + .. code-block:: python + + # the pseudocode for these calls - :param outputs: List of outputs you defined in test_step, or if there are multiple dataloaders, - a list containing a list of outputs for each dataloader - :return dict: Dict of OrderedDict with metrics to display in progress bar + test_outs = [] + for test_batch in test_data: + out = test_step(test_batch) + test_outs.append(out) + test_epoch_end(test_outs) - If you didn't define a test_step, this won't be called. - Called at the end of the test step with the output of each test_step. - The outputs here are strictly for the progress bar. - If you don't need to display anything, don't return anything. + Args: + + outputs (list): List of outputs you defined in test_step, or if there are multiple dataloaders, + a list containing a list of outputs for each dataloader + + Return: + Dict or OrderedDict (dict): Dict has the following optional keys: + progress_bar -> Dict for progress bar display. Must have only tensors + log -> Dict of metrics to add to logger. Must have only tensors (no images, etc) + + .. note:: If you didn't define a test_step, this won't be called. + + - The outputs here are strictly for logging or progress bar. + - If you don't need to display anything, don't return anything. + - If you want to manually set current step, you can specify it with the 'step' key in the 'log' Dict. Example ------- + With a single dataloader + .. code-block:: python - def test_end(self, outputs): - test_loss_mean = 0 + def test_epoch_end(self, outputs): test_acc_mean = 0 for output in outputs: - test_loss_mean += output['test_loss'] test_acc_mean += output['test_acc'] - test_loss_mean /= len(outputs) test_acc_mean /= len(outputs) - tqdm_dict = {'test_loss': test_loss_mean.item(), 'test_acc': test_acc_mean.item()} + tqdm_dict = {'test_acc': test_acc_mean.item()} # show test_loss and test_acc in progress bar but only log test_loss results = { 'progress_bar': tqdm_dict, - 'log': {'test_loss': val_loss_mean.item()} + 'log': {'test_acc': test_acc_mean.item()} } return results With multiple dataloaders, `outputs` will be a list of lists. The outer list contains one entry per dataloader, while the inner list contains the individual outputs of - each validation step for that dataloader. + each test step for that dataloader. .. code-block:: python - def test_end(self, outputs): - test_loss_mean = 0 + def test_epoch_end(self, outputs): test_acc_mean = 0 i = 0 for dataloader_outputs in outputs: for output in dataloader_outputs: - test_loss_mean += output['test_loss'] test_acc_mean += output['test_acc'] i += 1 - test_loss_mean /= i test_acc_mean /= i - tqdm_dict = {'test_loss': test_loss_mean.item(), 'test_acc': test_acc_mean.item()} + tqdm_dict = {'test_acc': test_acc_mean.item()} # show test_loss and test_acc in progress bar but only log test_loss results = { 'progress_bar': tqdm_dict, - 'log': {'test_loss': val_loss_mean.item()} + 'log': {'test_acc': test_acc_mean.item(), 'step': self.current_epoch} } return results """ From 2afc7042781b8e527638b85fc807c1a1a7e7fc0c Mon Sep 17 00:00:00 2001 From: William Falcon Date: Thu, 5 Mar 2020 08:51:48 -0500 Subject: [PATCH 15/37] training_end to training_step_end --- pytorch_lightning/core/__init__.py | 83 ++++++++++++++++++++++++++---- 1 file changed, 74 insertions(+), 9 deletions(-) diff --git a/pytorch_lightning/core/__init__.py b/pytorch_lightning/core/__init__.py index 32e4fc3b14116..82305b38dcba8 100644 --- a/pytorch_lightning/core/__init__.py +++ b/pytorch_lightning/core/__init__.py @@ -65,7 +65,10 @@ def configure_optimizers(self): ----------------------- The general pattern is that each loop (training, validation, test loop) -has 2 methods, ```___step, ___epoch_end``` +has 2 methods: + +- ``` ___step ``` +- ``` ___epoch_end``` To show how lightning calls these, let's use the validation loop as an example @@ -81,6 +84,9 @@ def configure_optimizers(self): # like calculate validation set accuracy or loss validation_epoch_end(val_outs) +Add validation loop +^^^^^^^^^^^^^^^^^^^ + Thus, if we wanted to add a validation loop you would add this to your LightningModule .. code-block:: python @@ -97,15 +103,14 @@ def validation_epoch_end(self, outputs): def val_dataloader(self): # can also return a list of val dataloaders - return DataLoader(MNIST(os.getcwd(), train=True, download=True, - transform=transforms.ToTensor()), batch_size=32) + return DataLoader(...) -Or add a test loop +Add test loop +^^^^^^^^^^^^^ -.. code_block:: python +.. code-block:: python class CoolModel(pl.LightningModule): - def test_step(self, batch, batch_idx): x, y = batch y_hat = self.forward(x) @@ -116,11 +121,71 @@ def test_epoch_end(self, outputs): return {'test_loss': test_loss_mean} def test_dataloader(self): - # OPTIONAL # can also return a list of test dataloaders - return DataLoader(MNIST(os.getcwd(), train=False, download=True, - transform=transforms.ToTensor()), batch_size=32) + return DataLoader(...) + +However, the test loop won't ever be called automatically to make sure you +don't run your test data by accident. Instead you have to explicitly call: + +.. code-block:: python + + # call after training + trainer = Trainer() + trainer.fit(model) + trainer.test() + + # or call with pretrained model + model = MyLightningModule.load_from_checkpoint(PATH) + trainer = Trainer() + trainer.test(model) + +Training_step_end method +------------------------ +When using dataParallel or distributedDataParallel2, the training_step +will be operating on a portion of the batch. This is normally ok but in special +cases like calculating NCE loss using negative samples, we might want to +perform a softmax across all samples in the batch. + +For these types of situations, each loop has an additional ```__step_end``` method +which allows you to operate on the pieces of the batch + +.. code-block:: python + + training_outs = [] + for train_batch in train_data: + # dp, ddp2 splits the batch + sub_batches = split_batches_for_dp(batch) + + # run training_step on each piece of the batch + batch_parts_outputs = [training_step(sub_batch) for sub_batch in sub_batches] + + # do softmax with all pieces + out = training_step_end(batch_parts_outputs) + training_outs.append(out) + + # do something with the outputs for all batches + # like calculate validation set accuracy or loss + training_epoch_end(val_outs) + +.cuda, .to +---------- +In a LightningModule, all calls to .cuda and .to should be removed. Lightning will do these +automatically. This will allow your code to work on CPUs, TPUs and GPUs. + +When you init a new tensor in your code, just use type_as + +.. code-block:: python + + def training_step(self, batch, batch_idx): + x, y = batch + + # put the z on the appropriate gpu or tpu core + z = sample_noise() + z = z.type_as(x.type()) +Live demo +--------- +Check out how this live demo Check out this `COLAB `_ for a live demo. From 697cb5dd609670444ac03f7694124c900d09d6c5 Mon Sep 17 00:00:00 2001 From: William Falcon Date: Thu, 5 Mar 2020 08:54:03 -0500 Subject: [PATCH 16/37] training_end to training_step_end --- pytorch_lightning/core/__init__.py | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/pytorch_lightning/core/__init__.py b/pytorch_lightning/core/__init__.py index 82305b38dcba8..9cc4070f986e0 100644 --- a/pytorch_lightning/core/__init__.py +++ b/pytorch_lightning/core/__init__.py @@ -11,12 +11,15 @@ .. note:: LightningModule is a torch.nn.Module but with added functionality. +Thus to use PyTorch Lightning, you simply need to organize your code into the sections +outlined by the LightningModule. Anything outside of that will be automated :) + ------------ Minimal Example --------------- -Most methods are optional. Here's a minimal example. +Here are the only required methods. .. code-block:: python @@ -167,9 +170,10 @@ def test_dataloader(self): # like calculate validation set accuracy or loss training_epoch_end(val_outs) -.cuda, .to ----------- -In a LightningModule, all calls to .cuda and .to should be removed. Lightning will do these +Remove cuda calls +----------------- +In a LightningModule, all calls to ```.cuda()``` +and ```.to(device)``` should be removed. Lightning will do these automatically. This will allow your code to work on CPUs, TPUs and GPUs. When you init a new tensor in your code, just use type_as From 4938b812eb6cbfc6f22bd189b91ba652458ce79d Mon Sep 17 00:00:00 2001 From: William Falcon Date: Thu, 5 Mar 2020 09:16:20 -0500 Subject: [PATCH 17/37] training_end to training_step_end --- pytorch_lightning/core/__init__.py | 38 ++++++++++++++++++++---------- 1 file changed, 26 insertions(+), 12 deletions(-) diff --git a/pytorch_lightning/core/__init__.py b/pytorch_lightning/core/__init__.py index 9cc4070f986e0..3bde182aabf1a 100644 --- a/pytorch_lightning/core/__init__.py +++ b/pytorch_lightning/core/__init__.py @@ -1,18 +1,32 @@ """ A LightningModule organizes your PyTorch code into the following sections: -- The model/system definition (__init__) -- The model/system computations (forward) -- What happens in the training loop (training_step) -- What happens in the validation loop (validation_step, validation_epoch_end) -- What happens in the test loop (test_step, test_epoch_end) -- What optimizers to use (configure_optimizers) -- What data to use (train_dataloader, val_dataloader, test_dataloader) - -.. note:: LightningModule is a torch.nn.Module but with added functionality. - -Thus to use PyTorch Lightning, you simply need to organize your code into the sections -outlined by the LightningModule. Anything outside of that will be automated :) +.. figure:: /_images/lightning_module/pt_to_pl.png + :alt: Convert from PyTorch to Lightning + + +Notice a few things. + +1. It's the SAME code. +2. The PyTorch code IS NOT abstracted - just organized. +3. All the other code that didn't go in the LightningModule has been automated + for you by the trainer + +.. code-block:: python + + net = Net() + trainer = Trainer() + trainer.fit(net) + +4. Also notice there are no .cuda() or .to() calls... Lightning does these for you. +5. Also notice there are no samplers for distributed, Lightning also does this for you. +6. A LightingModule is a torch.nn.Module but with added functionality. Use it as such! + +.. code-block:: python + + net = Net.load_from_checkpoint(PATH) + net.freeze() + out = net(x) ------------ From 78e2435ecdfe99335ab118b6f9a1cf3216b0e00e Mon Sep 17 00:00:00 2001 From: William Falcon Date: Thu, 5 Mar 2020 09:17:19 -0500 Subject: [PATCH 18/37] training_end to training_step_end --- pytorch_lightning/core/__init__.py | 3 +++ 1 file changed, 3 insertions(+) diff --git a/pytorch_lightning/core/__init__.py b/pytorch_lightning/core/__init__.py index 3bde182aabf1a..78009b2638be2 100644 --- a/pytorch_lightning/core/__init__.py +++ b/pytorch_lightning/core/__init__.py @@ -28,6 +28,9 @@ net.freeze() out = net(x) +Thus, to use Lightning, you just need to organize your code which takes about 30 minutes, +(and let's be real, you probably should do anyhow). + ------------ Minimal Example From 8d980a9af4002df4ab89b5c77640de7da9f29fad Mon Sep 17 00:00:00 2001 From: William Falcon Date: Thu, 5 Mar 2020 09:20:59 -0500 Subject: [PATCH 19/37] training_end to training_step_end --- pytorch_lightning/core/__init__.py | 33 +++++++++++++++++++++++++++--- 1 file changed, 30 insertions(+), 3 deletions(-) diff --git a/pytorch_lightning/core/__init__.py b/pytorch_lightning/core/__init__.py index 78009b2638be2..f02c243e129b3 100644 --- a/pytorch_lightning/core/__init__.py +++ b/pytorch_lightning/core/__init__.py @@ -10,7 +10,7 @@ 1. It's the SAME code. 2. The PyTorch code IS NOT abstracted - just organized. 3. All the other code that didn't go in the LightningModule has been automated - for you by the trainer +for you by the trainer .. code-block:: python @@ -18,8 +18,35 @@ trainer = Trainer() trainer.fit(net) -4. Also notice there are no .cuda() or .to() calls... Lightning does these for you. -5. Also notice there are no samplers for distributed, Lightning also does this for you. +4. There are no .cuda() or .to() calls... Lightning does these for you. + +.. code-block:: python + + # don't do in lightning + x = torch.Tensor(2, 3) + x = x.cuda() + x = x.to(device) + + # do this instead + x = x # leave it alone! + + # or to init a new tensor + new_x = torch.Tensor(2, 3) + new_x = new_x.type_as(x.type()) + +5. There are no samplers for distributed, Lightning also does this for you. + +..code-block:: python + + # Don't do in Lightning... + data = MNIST(...) + sampler = DistributedSampler(data) + DataLoader(data, sampler=sampler) + + # do this instead + data = MNIST(...) + DataLoader(data) + 6. A LightingModule is a torch.nn.Module but with added functionality. Use it as such! .. code-block:: python From bfa3fddc4d07f5edaf40999176408983e17d488c Mon Sep 17 00:00:00 2001 From: William Falcon Date: Thu, 5 Mar 2020 09:22:04 -0500 Subject: [PATCH 20/37] training_end to training_step_end --- pytorch_lightning/core/__init__.py | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/pytorch_lightning/core/__init__.py b/pytorch_lightning/core/__init__.py index f02c243e129b3..f85f86fa9de08 100644 --- a/pytorch_lightning/core/__init__.py +++ b/pytorch_lightning/core/__init__.py @@ -8,7 +8,9 @@ Notice a few things. 1. It's the SAME code. + 2. The PyTorch code IS NOT abstracted - just organized. + 3. All the other code that didn't go in the LightningModule has been automated for you by the trainer @@ -34,9 +36,10 @@ new_x = torch.Tensor(2, 3) new_x = new_x.type_as(x.type()) + 5. There are no samplers for distributed, Lightning also does this for you. -..code-block:: python +.. code-block:: python # Don't do in Lightning... data = MNIST(...) @@ -47,6 +50,7 @@ data = MNIST(...) DataLoader(data) + 6. A LightingModule is a torch.nn.Module but with added functionality. Use it as such! .. code-block:: python From 77baa64911c9a24dd981f93a89938e746cfedec1 Mon Sep 17 00:00:00 2001 From: William Falcon Date: Thu, 5 Mar 2020 11:05:58 -0500 Subject: [PATCH 21/37] training_end to training_step_end --- pytorch_lightning/core/__init__.py | 42 +++++++++++++++++++++++++++++ pytorch_lightning/core/lightning.py | 1 - 2 files changed, 42 insertions(+), 1 deletion(-) diff --git a/pytorch_lightning/core/__init__.py b/pytorch_lightning/core/__init__.py index f85f86fa9de08..ed47fbb84e7ce 100644 --- a/pytorch_lightning/core/__init__.py +++ b/pytorch_lightning/core/__init__.py @@ -235,6 +235,48 @@ def training_step(self, batch, batch_idx): z = sample_noise() z = z.type_as(x.type()) +Data preparation +---------------- +Data preparation in PyTorch follows 5 steps: + +1. Download +2. Clean and (maybe) save to disk +3. Load inside dataset +4. Apply transforms (rotate, tokenize, etc...) +5. Wrap inside a dataloader + +When working in distributed settings, steps 1 and 2 have to be done +from a single GPU, otherwise you will overwrite these files from +every GPU. The lightningModule has the ```prepare_data``` method to +allow for this + +.. code-block:: python + + def prepare_data(self): + # do stuff that writes to disk or should be done once + # this will only happen from the master GPU or TPU core + +Lifecycle +--------- +The methods in the LightningModule are called in this order: + +1. ```__init__``` +2. ```prepare_data``` +3. ```configure_optimizers``` +4. ```prepare_data``` +5. ```train_dataloader``` + +If you define a validation loop then + +6. ```val_dataloader``` + +And if you define a test loop: + +7. ```test_dataloader``` + +.. note:: test_dataloader is only called with .test() + + Live demo --------- Check out how this live demo diff --git a/pytorch_lightning/core/lightning.py b/pytorch_lightning/core/lightning.py index 03a94fcc5cc07..8779972ccc742 100644 --- a/pytorch_lightning/core/lightning.py +++ b/pytorch_lightning/core/lightning.py @@ -737,7 +737,6 @@ def test_epoch_end(self, outputs): def configure_ddp(self, model, device_ids): r""" - Override to init DDP in your own way or with your own wrapper. The only requirements are that: From 3f7d5e0503d05a603943bcfbe58965223f66e1af Mon Sep 17 00:00:00 2001 From: William Falcon Date: Thu, 5 Mar 2020 11:07:47 -0500 Subject: [PATCH 22/37] training_end to training_step_end --- pytorch_lightning/core/__init__.py | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/pytorch_lightning/core/__init__.py b/pytorch_lightning/core/__init__.py index ed47fbb84e7ce..6a084bf8d84df 100644 --- a/pytorch_lightning/core/__init__.py +++ b/pytorch_lightning/core/__init__.py @@ -190,6 +190,8 @@ def test_dataloader(self): trainer = Trainer() trainer.test(model) +------------- + Training_step_end method ------------------------ When using dataParallel or distributedDataParallel2, the training_step @@ -218,6 +220,8 @@ def test_dataloader(self): # like calculate validation set accuracy or loss training_epoch_end(val_outs) +------------- + Remove cuda calls ----------------- In a LightningModule, all calls to ```.cuda()``` @@ -235,6 +239,8 @@ def training_step(self, batch, batch_idx): z = sample_noise() z = z.type_as(x.type()) +------------- + Data preparation ---------------- Data preparation in PyTorch follows 5 steps: From b13b348542138a54b59f830a0dcf6f3fa1b787e4 Mon Sep 17 00:00:00 2001 From: William Falcon Date: Thu, 5 Mar 2020 11:11:50 -0500 Subject: [PATCH 23/37] training_end to training_step_end --- pytorch_lightning/core/__init__.py | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/pytorch_lightning/core/__init__.py b/pytorch_lightning/core/__init__.py index 6a084bf8d84df..42d535fbc0577 100644 --- a/pytorch_lightning/core/__init__.py +++ b/pytorch_lightning/core/__init__.py @@ -262,6 +262,8 @@ def prepare_data(self): # do stuff that writes to disk or should be done once # this will only happen from the master GPU or TPU core +.. note:: ```prepare_data``` is called once. + Lifecycle --------- The methods in the LightningModule are called in this order: @@ -282,6 +284,10 @@ def prepare_data(self): .. note:: test_dataloader is only called with .test() +In every epoch, the loop methods are called in this frequency: + +1. ```validation_step``` called every batch +2. ```validation_epoch_end``` called every epoch Live demo --------- From e3ac274019f544a0df1b2d1cd13e96a60a7d84d1 Mon Sep 17 00:00:00 2001 From: William Falcon Date: Thu, 5 Mar 2020 11:12:18 -0500 Subject: [PATCH 24/37] training_end to training_step_end --- pytorch_lightning/core/__init__.py | 4 ---- 1 file changed, 4 deletions(-) diff --git a/pytorch_lightning/core/__init__.py b/pytorch_lightning/core/__init__.py index 42d535fbc0577..814f389be44bf 100644 --- a/pytorch_lightning/core/__init__.py +++ b/pytorch_lightning/core/__init__.py @@ -291,14 +291,10 @@ def prepare_data(self): Live demo --------- -Check out how this live demo Check out this `COLAB `_ for a live demo. -.. note:: Remove all .cuda() or .to() calls from LightningModules. See: - `the multi-gpu training guide for details `_. - """ from .decorators import data_loader From 0a27d9503052d4c4c05be5bf69ff5ee6b81ac003 Mon Sep 17 00:00:00 2001 From: William Falcon Date: Thu, 5 Mar 2020 11:20:10 -0500 Subject: [PATCH 25/37] training_end to training_step_end --- docs/source/experiment_reporting.rst | 22 +++++----------------- 1 file changed, 5 insertions(+), 17 deletions(-) diff --git a/docs/source/experiment_reporting.rst b/docs/source/experiment_reporting.rst index c6e2395f6d44d..70188368514ee 100644 --- a/docs/source/experiment_reporting.rst +++ b/docs/source/experiment_reporting.rst @@ -34,11 +34,11 @@ Log metrics To plot metrics into whatever logger you passed in (tensorboard, comet, neptune, etc...) -1. training_step_end, validation_end, test_end will all log anything in the "log" key of the return dict. +1. training_epoch_end, validation_epoch_end, test_epoch_end will all log anything in the "log" key of the return dict. .. code-block:: python - def training_step_end(self, outputs): + def training_epoch_end(self, outputs): loss = some_loss() ... @@ -46,7 +46,7 @@ To plot metrics into whatever logger you passed in (tensorboard, comet, neptune, results = {'log': logs} return results - def validation_end(self, outputs): + def validation_epoch_end(self, outputs): loss = some_loss() ... @@ -54,7 +54,7 @@ To plot metrics into whatever logger you passed in (tensorboard, comet, neptune, results = {'log': logs} return results - def test_end(self, outputs): + def test_epoch_end(self, outputs): loss = some_loss() ... @@ -62,19 +62,7 @@ To plot metrics into whatever logger you passed in (tensorboard, comet, neptune, results = {'log': logs} return results -2. Most of the time, you only need training_step and not training_step_end. You can also return logs from here: - -.. code-block:: python - - def training_step(self, batch, batch_idx): - loss = some_loss() - ... - - logs = {'train_loss': loss} - results = {'log': logs} - return results - -3. In addition, you can also use any arbitrary functionality from a particular logger from within your LightningModule. +2. In addition, you can also use any arbitrary functionality from a particular logger from within your LightningModule. For instance, here we log images using tensorboard. .. code-block:: python From a106c47f791f147ece6bb1b13f29e6f56fc41f79 Mon Sep 17 00:00:00 2001 From: William Falcon Date: Thu, 5 Mar 2020 11:28:18 -0500 Subject: [PATCH 26/37] training_end to training_step_end --- pytorch_lightning/trainer/__init__.py | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/pytorch_lightning/trainer/__init__.py b/pytorch_lightning/trainer/__init__.py index 98c2b99b56357..a399f540f2081 100644 --- a/pytorch_lightning/trainer/__init__.py +++ b/pytorch_lightning/trainer/__init__.py @@ -1,8 +1,10 @@ """ +Once you've organized your PyTorch code into a LightningModule, +the Trainer automates everything else. + +.. figure:: /_images/lightning_module/pt_to_trainer.png + :alt: Convert from PyTorch to Lightning -The trainer de-couples the engineering code (16-bit, early stopping, GPU distribution, etc...) from the -science code (GAN, BERT, your project, etc...). It uses many assumptions which are best practices in -AI research today. The trainer automates all parts of training except: From bc4db9fe40196927d3e188bbf50c97af387bd454 Mon Sep 17 00:00:00 2001 From: William Falcon Date: Thu, 5 Mar 2020 11:43:07 -0500 Subject: [PATCH 27/37] training_end to training_step_end --- .../_images/lightning_module/pt_to_pl.png | Bin 0 -> 1085687 bytes .../_images/lightning_module/pt_trainer.png | Bin 0 -> 991244 bytes pytorch_lightning/trainer/__init__.py | 19 +++++++++++------- 3 files changed, 12 insertions(+), 7 deletions(-) create mode 100644 docs/source/_images/lightning_module/pt_to_pl.png create mode 100644 docs/source/_images/lightning_module/pt_trainer.png diff --git a/docs/source/_images/lightning_module/pt_to_pl.png b/docs/source/_images/lightning_module/pt_to_pl.png new file mode 100644 index 0000000000000000000000000000000000000000..8b35beed073e760b3d49d2122f5792aae7e9eff9 GIT binary patch literal 1085687 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 z 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