Skip to content

ProgressBar created in LightningModule.configure_callbacks does not override default ProgressBar #16990

Description

@LarsKue

Bug description

Currently, the only way to truly override the default progress bar is to pass one to the Trainer.__init__ using the callbacks kwarg. When a progress bar is created via LightningModule.configure_callbacks, it does not override the default progress bar and instead co-exists with it. This likely happens because the Trainer does not call _callback_connector.configure_progress_bar when calling LightningModule.configure_callbacks.

How to reproduce

  1. Create a LightningModule:
import pytorch_lightning as lightning

class MyModule(lightning.LightningModule):
    ...
    def training_step(self, batch, batch_idx):
        print("Callbacks:", list(self.trainer.callbacks))
        ...

    def configure_callbacks(self):
        return [ProgressBarBase()]

module = MyModule()
  1. Train without passing additional callbacks:
trainer = pl.Trainer()
trainer.fit(module)
  1. Both progress bars are in the callbacks as can be seen in the print we defined in training_step. Output will look something like this:
Callbacks: [TQDMProgressBar(), ProgressBarBase()]

Why is this a bug?

Passing multiple ProgressBars to Trainer.__init__ is prohibited with a MisconfigurationException. Having multiple ProgressBars in the way described above raises no error. It also causes weird output, because both progress bars are being updated.

cc @Borda @awaelchli

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't workingcallbackdiscussionIn a discussion stagehelp wantedOpen to be worked on

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions