{"record":{"id":"f660bdab0014b6d9","repo":"Lightning-AI/pytorch-lightning","slug":"a-dataloader-should-be-passed-only-once-to-the-se","errorCode":null,"errorMessage":"A dataloader should be passed only once to the `setup_dataloaders` method.","messagePattern":"A dataloader should be passed only once to the `setup_dataloaders` method\\.","errorType":"validation","errorClass":"ValueError","httpStatus":null,"severity":"error","filePath":"src/lightning/fabric/fabric.py","lineNumber":1250,"sourceCode":"            raise ValueError(\"`setup_optimizers` requires at least one optimizer as input.\")\n\n        if any(isinstance(opt, _FabricOptimizer) for opt in optimizers):\n            raise ValueError(\"An optimizer should be passed only once to the `setup_optimizers` method.\")\n\n        if any(_has_meta_device_parameters_or_buffers(optimizer) for optimizer in optimizers):\n            raise RuntimeError(\n                \"The optimizer has references to the model's meta-device parameters. Materializing them is\"\n                \" is currently not supported. Create the optimizer after setting up the model, then call\"\n                \" `fabric.setup_optimizers(optimizer)`.\"\n            )\n\n    def _validate_setup_dataloaders(self, dataloaders: Sequence[DataLoader]) -> None:\n        self._validate_launched()\n        if not dataloaders:\n            raise ValueError(\"`setup_dataloaders` requires at least one dataloader as input.\")\n\n        if any(isinstance(dl, _FabricDataLoader) for dl in dataloaders):\n            raise ValueError(\"A dataloader should be passed only once to the `setup_dataloaders` method.\")\n\n        if any(not isinstance(dl, DataLoader) for dl in dataloaders):\n            raise TypeError(\"Only PyTorch DataLoader are currently supported in `setup_dataloaders`.\")\n\n    @staticmethod\n    def _configure_callbacks(callbacks: Optional[Union[list[Any], Any]]) -> list[Any]:\n        callbacks = callbacks if callbacks is not None else []\n        callbacks = callbacks if isinstance(callbacks, list) else [callbacks]\n        callbacks.extend(_load_external_callbacks(\"lightning.fabric.callbacks_factory\"))\n        return callbacks\n","sourceCodeStart":1232,"sourceCodeEnd":1261,"githubUrl":"https://github.com/Lightning-AI/pytorch-lightning/blob/9fed5c27d2a62ff0efd6c3573599921d6ff67c14/src/lightning/fabric/fabric.py#L1232-L1261","documentation":"Raised when a dataloader passed to `fabric.setup_dataloaders()` is already a `_FabricDataLoader`, i.e. it was already wrapped by a previous setup call. Double-wrapping would break iteration and distributed sharding, so Fabric rejects it.","triggerScenarios":"Calling `fabric.setup_dataloaders(dl)` twice with the same dataloader; keeping a reference to the wrapped return value and passing it to a second setup call (e.g. setting up train and val loaders that share one already-wrapped loader).","commonSituations":"Setting up multiple phases (train/val/test) in separate calls and accidentally reusing an already-wrapped loader; helper functions that call setup_dataloaders internally being called on already-prepared inputs.","solutions":["Keep the raw `DataLoader` objects and pass each only once to setup_dataloaders; use the wrapped return value for training/evaluation only","Consolidate into a single call: `train_dl, val_dl = fabric.setup_dataloaders(train_dl, val_dl)`","Check helper utilities for hidden setup calls"],"exampleFix":"# before\ntrain_dl = fabric.setup_dataloaders(train_dl)\ntrain_dl, val_dl = fabric.setup_dataloaders(train_dl, val_dl)  # ValueError\n\n# after\ntrain_dl, val_dl = fabric.setup_dataloaders(train_dl, val_dl)","handlingStrategy":"validation","validationCode":"from lightning.fabric.utilities.data import _FabricDataLoader\nassert all(not isinstance(dl, _FabricDataLoader) for dl in dls), 'already wrapped'","typeGuard":"from torch.utils.data import DataLoader\nfrom lightning.fabric.utilities.data import _FabricDataLoader\ndef is_raw_dataloader(dl) -> bool:\n    return isinstance(dl, DataLoader) and not isinstance(dl, _FabricDataLoader)","tryCatchPattern":null,"preventionTips":["Set up each dataloader exactly once; use wrapped results only for iteration","Prefer one combined setup_dataloaders call per script"],"tags":["pytorch-lightning","fabric","dataloader","double-setup"],"backgroundTag":"double-initialization","analyzedSha":"9fed5c27d2a62ff0efd6c3573599921d6ff67c14","analyzedAt":"2026-08-28T11:52:41.083Z","schemaVersion":2},"datasetVersion":"2026-08-28T16:17:29.566Z"}