---
title: TQDMProgressBar
description: >-
  This is the default progress bar used by Lightning. It prints to stdout using
  the tqdm package and

  shows up to four different bars:
canonical: >-
  https://lightning.ai/docs/pytorch/stable/optional-api/api/lightning.pytorch.callbacks.TQDMProgressBar
---
# TQDMProgressBar {#tqdmprogressbar}

### `class lightning.pytorch.callbacks.TQDMProgressBar(refresh_rate=1, process_position=0, leave=False)` {#lightning.pytorch.callbacks.TQDMProgressBar}

Bases: [`ProgressBar`](/docs/pytorch/2.6.6/optional-api/api/lightning.pytorch.callbacks.ProgressBar.md#lightning.pytorch.callbacks.ProgressBar "lightning.pytorch.callbacks.progress.progress_bar.ProgressBar")

This is the default progress bar used by Lightning. It prints to `stdout` using the `tqdm` package and shows up to four different bars:

*   **sanity check progress:** the progress during the sanity check run
    
*   **train progress:** shows the training progress. It will pause if validation starts and will resume when it ends, and also accounts for multiple validation runs during training when [`val_check_interval`](/docs/pytorch/2.6.6/optional-api/api/lightning.pytorch.trainer.trainer.Trainer.md#lightning.pytorch.trainer.trainer.Trainer.params.val_check_interval "lightning.pytorch.trainer.trainer.Trainer") is used.
    
*   **validation progress:** only visible during validation; shows total progress over all validation datasets.
    
*   **test progress:** only active when testing; shows total progress over all test datasets.
    

For infinite datasets, the progress bar never ends.

If you want to customize the default `tqdm` progress bars used by Lightning, you can override specific methods of the callback class and pass your custom implementation to the [`Trainer`](/docs/pytorch/2.6.6/optional-api/api/lightning.pytorch.trainer.trainer.Trainer.md#lightning.pytorch.trainer.trainer.Trainer "lightning.pytorch.trainer.trainer.Trainer").

Example

```python
>>> class LitProgressBar(TQDMProgressBar):
...     def init_validation_tqdm(self):
...         bar = super().init_validation_tqdm()
...         bar.set_description('running validation ...')
...         return bar
...
>>> bar = LitProgressBar()
>>> from lightning.pytorch import Trainer
>>> trainer = Trainer(callbacks=[bar])
```

Parameters:

*   **refresh\_rate** ([`int`](https://docs.python.org/3/builtins/functions.html#int "(in Python v3.15)")) – Determines at which rate (in number of batches) the progress bars get updated. Set it to `0` to disable the display.
    
*   **process\_position** ([`int`](https://docs.python.org/3/builtins/functions.html#int "(in Python v3.15)")) – Set this to a value greater than `0` to offset the progress bars by this many lines. This is useful when you have progress bars defined elsewhere and want to show all of them together.
    
*   **leave** ([`bool`](https://docs.python.org/3/builtins/functions.html#bool "(in Python v3.15)")) – If set to `True`, leaves the finished progress bar in the terminal at the end of the epoch. Default: `False`
    

#### `disable()` {#lightning.pytorch.callbacks.TQDMProgressBar.disable}

You should provide a way to disable the progress bar.

Return type:

[`None`](https://docs.python.org/3/builtins/constants.html#None "(in Python v3.15)")

#### `enable()` {#lightning.pytorch.callbacks.TQDMProgressBar.enable}

You should provide a way to enable the progress bar.

The [`Trainer`](/docs/pytorch/2.6.6/optional-api/api/lightning.pytorch.trainer.trainer.Trainer.md#lightning.pytorch.trainer.trainer.Trainer "lightning.pytorch.trainer.trainer.Trainer") will call this in e.g. pre-training routines like the [learning rate finder](/docs/pytorch/2.6.6/reference/advanced/training_tricks.md#learning-rate-finder). to temporarily enable and disable the training progress bar.

Return type:

[`None`](https://docs.python.org/3/builtins/constants.html#None "(in Python v3.15)")

#### `init_predict_tqdm()` {#lightning.pytorch.callbacks.TQDMProgressBar.init_predict_tqdm}

Override this to customize the tqdm bar for predicting.

Return type:

`Tqdm`

#### `init_sanity_tqdm()` {#lightning.pytorch.callbacks.TQDMProgressBar.init_sanity_tqdm}

Override this to customize the tqdm bar for the validation sanity run.

Return type:

`Tqdm`

#### `init_test_tqdm()` {#lightning.pytorch.callbacks.TQDMProgressBar.init_test_tqdm}

Override this to customize the tqdm bar for testing.

Return type:

`Tqdm`

#### `init_train_tqdm()` {#lightning.pytorch.callbacks.TQDMProgressBar.init_train_tqdm}

Override this to customize the tqdm bar for training.

Return type:

`Tqdm`

#### `init_validation_tqdm()` {#lightning.pytorch.callbacks.TQDMProgressBar.init_validation_tqdm}

Override this to customize the tqdm bar for validation.

Return type:

`Tqdm`

#### `on_predict_batch_end(trainer, pl_module, outputs, batch, batch_idx, dataloader_idx=0)` {#lightning.pytorch.callbacks.TQDMProgressBar.on_predict_batch_end}

Called when the predict batch ends.

Return type:

[`None`](https://docs.python.org/3/builtins/constants.html#None "(in Python v3.15)")

#### `on_predict_batch_start(trainer, pl_module, batch, batch_idx, dataloader_idx=0)` {#lightning.pytorch.callbacks.TQDMProgressBar.on_predict_batch_start}

Called when the predict batch begins.

Return type:

[`None`](https://docs.python.org/3/builtins/constants.html#None "(in Python v3.15)")

#### `on_predict_end(trainer, pl_module)` {#lightning.pytorch.callbacks.TQDMProgressBar.on_predict_end}

Called when predict ends.

Return type:

[`None`](https://docs.python.org/3/builtins/constants.html#None "(in Python v3.15)")

#### `on_predict_start(trainer, pl_module)` {#lightning.pytorch.callbacks.TQDMProgressBar.on_predict_start}

Called when the predict begins.

Return type:

[`None`](https://docs.python.org/3/builtins/constants.html#None "(in Python v3.15)")

#### `on_sanity_check_end(*_)` {#lightning.pytorch.callbacks.TQDMProgressBar.on_sanity_check_end}

Called when the validation sanity check ends.

Return type:

[`None`](https://docs.python.org/3/builtins/constants.html#None "(in Python v3.15)")

#### `on_sanity_check_start(*_)` {#lightning.pytorch.callbacks.TQDMProgressBar.on_sanity_check_start}

Called when the validation sanity check starts.

Return type:

[`None`](https://docs.python.org/3/builtins/constants.html#None "(in Python v3.15)")

#### `on_test_batch_end(trainer, pl_module, outputs, batch, batch_idx, dataloader_idx=0)` {#lightning.pytorch.callbacks.TQDMProgressBar.on_test_batch_end}

Called when the test batch ends.

Return type:

[`None`](https://docs.python.org/3/builtins/constants.html#None "(in Python v3.15)")

#### `on_test_batch_start(trainer, pl_module, batch, batch_idx, dataloader_idx=0)` {#lightning.pytorch.callbacks.TQDMProgressBar.on_test_batch_start}

Called when the test batch begins.

Return type:

[`None`](https://docs.python.org/3/builtins/constants.html#None "(in Python v3.15)")

#### `on_test_end(trainer, pl_module)` {#lightning.pytorch.callbacks.TQDMProgressBar.on_test_end}

Called when the test ends.

Return type:

[`None`](https://docs.python.org/3/builtins/constants.html#None "(in Python v3.15)")

#### `on_test_start(trainer, pl_module)` {#lightning.pytorch.callbacks.TQDMProgressBar.on_test_start}

Called when the test begins.

Return type:

[`None`](https://docs.python.org/3/builtins/constants.html#None "(in Python v3.15)")

#### `on_train_batch_end(trainer, pl_module, outputs, batch, batch_idx)` {#lightning.pytorch.callbacks.TQDMProgressBar.on_train_batch_end}

Called when the train batch ends. :rtype: [`None`](https://docs.python.org/3/builtins/constants.html#None "(in Python v3.15)")

Note

The value `outputs["loss"]` here will be the normalized value w.r.t `accumulate_grad_batches` of the loss returned from `training_step`.

#### `on_train_end(*_)` {#lightning.pytorch.callbacks.TQDMProgressBar.on_train_end}

Called when the train ends.

Return type:

[`None`](https://docs.python.org/3/builtins/constants.html#None "(in Python v3.15)")

#### `on_train_epoch_end(trainer, pl_module)` {#lightning.pytorch.callbacks.TQDMProgressBar.on_train_epoch_end}

Called when the train epoch ends.

To access all batch outputs at the end of the epoch, you can cache step outputs as an attribute of the [`lightning.pytorch.core.LightningModule`](/docs/pytorch/2.6.6/optional-api/api/lightning.pytorch.core.LightningModule.md#lightning.pytorch.core.LightningModule "lightning.pytorch.core.LightningModule") and access them in this hook:

```python
class MyLightningModule(L.LightningModule):
    def __init__(self):
        super().__init__()
        self.training_step_outputs = []

    def training_step(self):
        loss = ...
        self.training_step_outputs.append(loss)
        return loss


class MyCallback(L.Callback):
    def on_train_epoch_end(self, trainer, pl_module):
        # do something with all training_step outputs, for example:
        epoch_mean = torch.stack(pl_module.training_step_outputs).mean()
        pl_module.log("training_epoch_mean", epoch_mean)
        # free up the memory
        pl_module.training_step_outputs.clear()
```

Return type:

[`None`](https://docs.python.org/3/builtins/constants.html#None "(in Python v3.15)")

#### `on_train_epoch_start(trainer, *_)` {#lightning.pytorch.callbacks.TQDMProgressBar.on_train_epoch_start}

Called when the train epoch begins.

Return type:

[`None`](https://docs.python.org/3/builtins/constants.html#None "(in Python v3.15)")

#### `on_train_start(*_)` {#lightning.pytorch.callbacks.TQDMProgressBar.on_train_start}

Called when the train begins.

Return type:

[`None`](https://docs.python.org/3/builtins/constants.html#None "(in Python v3.15)")

#### `on_validation_batch_end(trainer, pl_module, outputs, batch, batch_idx, dataloader_idx=0)` {#lightning.pytorch.callbacks.TQDMProgressBar.on_validation_batch_end}

Called when the validation batch ends.

Return type:

[`None`](https://docs.python.org/3/builtins/constants.html#None "(in Python v3.15)")

#### `on_validation_batch_start(trainer, pl_module, batch, batch_idx, dataloader_idx=0)` {#lightning.pytorch.callbacks.TQDMProgressBar.on_validation_batch_start}

Called when the validation batch begins.

Return type:

[`None`](https://docs.python.org/3/builtins/constants.html#None "(in Python v3.15)")

#### `on_validation_end(trainer, pl_module)` {#lightning.pytorch.callbacks.TQDMProgressBar.on_validation_end}

Called when the validation loop ends.

Return type:

[`None`](https://docs.python.org/3/builtins/constants.html#None "(in Python v3.15)")

#### `on_validation_start(trainer, pl_module)` {#lightning.pytorch.callbacks.TQDMProgressBar.on_validation_start}

Called when the validation loop begins.

Return type:

[`None`](https://docs.python.org/3/builtins/constants.html#None "(in Python v3.15)")

#### `print(*args, sep=' ', **kwargs)` {#lightning.pytorch.callbacks.TQDMProgressBar.print}

You should provide a way to print without breaking the progress bar.

Return type:

[`None`](https://docs.python.org/3/builtins/constants.html#None "(in Python v3.15)")

---

**Navigation**

- Parent: [Api](/docs/pytorch/2.6.6/optional-api/api.md)
