Skip to content

The progress bar shows wrong length when using multiple dataloaders mixing dataset and iterable dataset #20695

@xjh19971

Description

@xjh19971

Bug description

When using multiple data loaders—some based on standard datasets with a known length and others on iterable datasets with an undefined length—the progress bar will display the total batches from the dataset-based loader rather than showing “?” for the iterable loader.

What version are you seeing the problem on?

v2.1

How to reproduce the bug

import pytorch_lightning as pl
import torch
from torch.utils.data import Dataset, DataLoader, IterableDataset

# 1. Create a simple dummy Dataset
class DummyDataset(Dataset):
    def __init__(self, length=1000):
        super().__init__()
        self.length = length
        # for example, 10 features per sample
        self.data = torch.randn(length, 10)
        # binary classification target [0/1]
        self.targets = torch.randint(0, 2, (length,))

    def __len__(self):
        return self.length

    def __getitem__(self, idx):
        x = self.data[idx]
        y = self.targets[idx]
        return x, y
    
class DummyIterDataset(IterableDataset):
    def __init__(self, length=10000):
        super().__init__()
        self.length = length
        # for example, 10 features per sample
        self.data = torch.randn(length, 10)
        # binary classification target [0/1]
        self.targets = torch.randint(0, 2, (length,))

    def __iter__(self):
        for idx in range(self.length):
            x = self.data[idx]
            y = self.targets[idx]
            yield x, y

# 2. Implement the LightningDataModule
class DummyDataModule(pl.LightningDataModule):
    def __init__(self, batch_size=32):
        super().__init__()
        self.batch_size = batch_size
    
    def setup(self, stage=None):
        # here you can split training/validation/test data 
        # but we will use the same dummy dataset for all
        self.train_dataset = DummyDataset()
        self.val_dataset   = DummyDataset()
        self.val_dataset_1 = DummyIterDataset()
        self.test_dataset  = DummyDataset()
    
    def train_dataloader(self):
        return DataLoader(self.train_dataset, batch_size=self.batch_size)
    
    def val_dataloader(self):
        return [DataLoader(self.val_dataset, batch_size=self.batch_size), DataLoader(self.val_dataset_1, batch_size=self.batch_size)]
    
    def test_dataloader(self):
        return DataLoader(self.test_dataset, batch_size=self.batch_size)

# 3. Define a minimal LightningModule
class DummyModel(pl.LightningModule):
    def __init__(self):
        super().__init__()
        # a single linear layer to map 10 features -> 2 classes
        self.layer = torch.nn.Linear(10, 2)
    
    def forward(self, x):
        return self.layer(x)
    
    def training_step(self, batch, batch_idx):
        x, y = batch
        logits = self(x)
        loss = torch.nn.functional.cross_entropy(logits, y)
        self.log('train_loss', loss)
        return loss
    
    def validation_step(self, batch, batch_idx, dataloader_idx):
        x, y = batch
        logits = self(x)
        loss = torch.nn.functional.cross_entropy(logits, y)
        self.log('val_loss', loss)
        print(batch_idx)
        return loss
    
    # define optimizer
    def configure_optimizers(self):
        return torch.optim.Adam(self.parameters(), lr=1e-3)

# 4. Instantiate the DataModule and Model, then simulate trainer fit
def run_dummy_training():
    datamodule = DummyDataModule(batch_size=32)
    model = DummyModel()
    trainer = pl.Trainer(devices=1, max_epochs=5, enable_checkpointing=False)
    trainer.validate(model, datamodule=datamodule)

if __name__ == "__main__":
    run_dummy_training()

Error messages and logs

Validation DataLoader 0:   0%|                                                                                                             | 0/32 [00:00<?, ?it/s]0
Validation DataLoader 0:   3%|███▏                                                                                                 | 1/32 [00:00<00:02, 14.33it/s]1
Validation DataLoader 0:   6%|██████▎                                                                                              | 2/32 [00:00<00:01, 28.18it/s]2
Validation DataLoader 0:   9%|█████████▍                                                                                           | 3/32 [00:00<00:00, 41.74it/s]3
Validation DataLoader 0:  12%|████████████▋                                                                                        | 4/32 [00:00<00:00, 55.05it/s]4
Validation DataLoader 0:  16%|███████████████▊                                                                                     | 5/32 [00:00<00:00, 68.07it/s]5
Validation DataLoader 0:  19%|██████████████████▉                                                                                  | 6/32 [00:00<00:00, 80.79it/s]6
Validation DataLoader 0:  22%|██████████████████████                                                                               | 7/32 [00:00<00:00, 93.26it/s]7
Validation DataLoader 0:  25%|█████████████████████████                                                                           | 8/32 [00:00<00:00, 105.47it/s]8
Validation DataLoader 0:  28%|████████████████████████████▏                                                                       | 9/32 [00:00<00:00, 117.43it/s]9
Validation DataLoader 0:  31%|██████████████████████████████▉                                                                    | 10/32 [00:00<00:00, 129.15it/s]10
Validation DataLoader 0:  34%|██████████████████████████████████                                                                 | 11/32 [00:00<00:00, 140.62it/s]11
Validation DataLoader 0:  38%|█████████████████████████████████████▏                                                             | 12/32 [00:00<00:00, 151.86it/s]12
Validation DataLoader 0:  41%|████████████████████████████████████████▏                                                          | 13/32 [00:00<00:00, 162.89it/s]13
Validation DataLoader 0:  44%|███████████████████████████████████████████▎                                                       | 14/32 [00:00<00:00, 173.70it/s]14
Validation DataLoader 0:  47%|██████████████████████████████████████████████▍                                                    | 15/32 [00:00<00:00, 184.29it/s]15
Validation DataLoader 0:  50%|█████████████████████████████████████████████████▌                                                 | 16/32 [00:00<00:00, 194.67it/s]16
Validation DataLoader 0:  53%|████████████████████████████████████████████████████▌                                              | 17/32 [00:00<00:00, 204.86it/s]17
Validation DataLoader 0:  56%|███████████████████████████████████████████████████████▋                                           | 18/32 [00:00<00:00, 214.86it/s]18
Validation DataLoader 0:  59%|██████████████████████████████████████████████████████████▊                                        | 19/32 [00:00<00:00, 224.68it/s]19
Validation DataLoader 0:  62%|█████████████████████████████████████████████████████████████▉                                     | 20/32 [00:00<00:00, 234.31it/s]20
Validation DataLoader 0:  66%|████████████████████████████████████████████████████████████████▉                                  | 21/32 [00:00<00:00, 243.73it/s]21
Validation DataLoader 0:  69%|████████████████████████████████████████████████████████████████████                               | 22/32 [00:00<00:00, 253.03it/s]22
Validation DataLoader 0:  72%|███████████████████████████████████████████████████████████████████████▏                           | 23/32 [00:00<00:00, 262.14it/s]23
Validation DataLoader 0:  75%|██████████████████████████████████████████████████████████████████████████▎                        | 24/32 [00:00<00:00, 271.08it/s]24
Validation DataLoader 0:  78%|█████████████████████████████████████████████████████████████████████████████▎                     | 25/32 [00:00<00:00, 279.87it/s]25
Validation DataLoader 0:  81%|████████████████████████████████████████████████████████████████████████████████▍                  | 26/32 [00:00<00:00, 288.45it/s]26
Validation DataLoader 0:  84%|███████████████████████████████████████████████████████████████████████████████████▌               | 27/32 [00:00<00:00, 296.94it/s]27
Validation DataLoader 0:  88%|██████████████████████████████████████████████████████████████████████████████████████▋            | 28/32 [00:00<00:00, 305.27it/s]28
Validation DataLoader 0:  91%|█████████████████████████████████████████████████████████████████████████████████████████▋         | 29/32 [00:00<00:00, 313.46it/s]29
Validation DataLoader 0:  94%|████████████████████████████████████████████████████████████████████████████████████████████▊      | 30/32 [00:00<00:00, 321.52it/s]30
Validation DataLoader 0:  97%|███████████████████████████████████████████████████████████████████████████████████████████████▉   | 31/32 [00:00<00:00, 329.68it/s]31
Validation DataLoader 1:   0%|                                                                                                             | 0/32 [00:00<?, ?it/s]0
Validation DataLoader 1:   3%|███▏                                                                                                | 1/32 [00:00<00:00, 873.27it/s]1
Validation DataLoader 1:   6%|██████▏                                                                                            | 2/32 [00:00<00:00, 1007.88it/s]2
Validation DataLoader 1:   9%|█████████▎                                                                                         | 3/32 [00:00<00:00, 1077.49it/s]3
Validation DataLoader 1:  12%|████████████▍                                                                                      | 4/32 [00:00<00:00, 1118.26it/s]4
Validation DataLoader 1:  16%|███████████████▍                                                                                   | 5/32 [00:00<00:00, 1142.80it/s]5
Validation DataLoader 1:  19%|██████████████████▌                                                                                | 6/32 [00:00<00:00, 1161.37it/s]6
Validation DataLoader 1:  22%|█████████████████████▋                                                                             | 7/32 [00:00<00:00, 1175.20it/s]7
Validation DataLoader 1:  25%|████████████████████████▊                                                                          | 8/32 [00:00<00:00, 1184.16it/s]8
Validation DataLoader 1:  28%|███████████████████████████▊                                                                       | 9/32 [00:00<00:00, 1192.43it/s]9
Validation DataLoader 1:  31%|██████████████████████████████▋                                                                   | 10/32 [00:00<00:00, 1199.13it/s]10
Validation DataLoader 1:  34%|█████████████████████████████████▋                                                                | 11/32 [00:00<00:00, 1204.85it/s]11
Validation DataLoader 1:  38%|████████████████████████████████████▊                                                             | 12/32 [00:00<00:00, 1209.23it/s]12
Validation DataLoader 1:  41%|███████████████████████████████████████▊                                                          | 13/32 [00:00<00:00, 1213.06it/s]13
Validation DataLoader 1:  44%|██████████████████████████████████████████▉                                                       | 14/32 [00:00<00:00, 1215.29it/s]14
Validation DataLoader 1:  47%|█████████████████████████████████████████████▉                                                    | 15/32 [00:00<00:00, 1218.26it/s]15
Validation DataLoader 1:  50%|█████████████████████████████████████████████████                                                 | 16/32 [00:00<00:00, 1220.94it/s]16
Validation DataLoader 1:  53%|████████████████████████████████████████████████████                                              | 17/32 [00:00<00:00, 1223.27it/s]17
Validation DataLoader 1:  56%|███████████████████████████████████████████████████████▏                                          | 18/32 [00:00<00:00, 1224.85it/s]18
Validation DataLoader 1:  59%|██████████████████████████████████████████████████████████▏                                       | 19/32 [00:00<00:00, 1226.08it/s]19
Validation DataLoader 1:  62%|█████████████████████████████████████████████████████████████▎                                    | 20/32 [00:00<00:00, 1227.66it/s]20
Validation DataLoader 1:  66%|████████████████████████████████████████████████████████████████▎                                 | 21/32 [00:00<00:00, 1229.09it/s]21
Validation DataLoader 1:  69%|███████████████████████████████████████████████████████████████████▍                              | 22/32 [00:00<00:00, 1230.31it/s]22
Validation DataLoader 1:  72%|██████████████████████████████████████████████████████████████████████▍                           | 23/32 [00:00<00:00, 1231.45it/s]23
Validation DataLoader 1:  75%|█████████████████████████████████████████████████████████████████████████▌                        | 24/32 [00:00<00:00, 1232.12it/s]24
Validation DataLoader 1:  78%|████████████████████████████████████████████████████████████████████████████▌                     | 25/32 [00:00<00:00, 1233.07it/s]25
Validation DataLoader 1:  81%|███████████████████████████████████████████████████████████████████████████████▋                  | 26/32 [00:00<00:00, 1234.09it/s]26
Validation DataLoader 1:  84%|██████████████████████████████████████████████████████████████████████████████████▋               | 27/32 [00:00<00:00, 1234.86it/s]27
Validation DataLoader 1:  88%|█████████████████████████████████████████████████████████████████████████████████████▊            | 28/32 [00:00<00:00, 1235.67it/s]28
Validation DataLoader 1:  91%|████████████████████████████████████████████████████████████████████████████████████████▊         | 29/32 [00:00<00:00, 1236.08it/s]29
Validation DataLoader 1:  94%|███████████████████████████████████████████████████████████████████████████████████████████▉      | 30/32 [00:00<00:00, 1236.76it/s]30
Validation DataLoader 1:  97%|██████████████████████████████████████████████████████████████████████████████████████████████▉   | 31/32 [00:00<00:00, 1237.43it/s]31
Validation DataLoader 1: 100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 32/32 [00:00<00:00, 1237.89it/s]32
Validation DataLoader 1: |                                                                                                       | 33/? [00:00<00:00, 1238.71it/s]33
Validation DataLoader 1: |                                                                                                       | 34/? [00:00<00:00, 1239.63it/s]34

Environment

Current environment
#- PyTorch Lightning Version (e.g., 2.5.0):
#- PyTorch Version (e.g., 2.5):
#- Python version (e.g., 3.12):
#- OS (e.g., Linux):
#- CUDA/cuDNN version:
#- GPU models and configuration:
#- How you installed Lightning(`conda`, `pip`, source):

More info

No response

cc @lantiga

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions