Lightning-AI/pytorch-lightning

`ProgressBar` created in `LightningModule.configure_callbacks` does not override default `ProgressBar`

Open

#16,990 opened on 2023年3月7日

GitHub で見る
 (3 comments) (2 reactions) (0 assignees)Python (3,233 forks)batch import
bugcallbackdiscussionhelp wanted

Repository metrics

Stars
 (26,687 stars)
PR merge metrics
 (平均マージ 9d 15h) (30d で 3 merged PRs)

説明

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

コントリビューターガイド