Lightning-AI/pytorch-lightning · error · TypeError
Only PyTorch DataLoader are currently supported in `setup_da
Error message
Only PyTorch DataLoader are currently supported in `setup_dataloaders`.
What it means
Raised when any object passed to `fabric.setup_dataloaders()` is not a `torch.utils.data.DataLoader`. In contrast to the Lightning Trainer, Fabric only supports plain PyTorch DataLoaders — not iterables, custom loader classes, or combined objects like LightningDataModules.
Source
Thrown at src/lightning/fabric/fabric.py:1253
raise ValueError("An optimizer should be passed only once to the `setup_optimizers` method.")
if any(_has_meta_device_parameters_or_buffers(optimizer) for optimizer in optimizers):
raise RuntimeError(
"The optimizer has references to the model's meta-device parameters. Materializing them is"
" is currently not supported. Create the optimizer after setting up the model, then call"
" `fabric.setup_optimizers(optimizer)`."
)
def _validate_setup_dataloaders(self, dataloaders: Sequence[DataLoader]) -> None:
self._validate_launched()
if not dataloaders:
raise ValueError("`setup_dataloaders` requires at least one dataloader as input.")
if any(isinstance(dl, _FabricDataLoader) for dl in dataloaders):
raise ValueError("A dataloader should be passed only once to the `setup_dataloaders` method.")
if any(not isinstance(dl, DataLoader) for dl in dataloaders):
raise TypeError("Only PyTorch DataLoader are currently supported in `setup_dataloaders`.")
@staticmethod
def _configure_callbacks(callbacks: Optional[Union[list[Any], Any]]) -> list[Any]:
callbacks = callbacks if callbacks is not None else []
callbacks = callbacks if isinstance(callbacks, list) else [callbacks]
callbacks.extend(_load_external_callbacks("lightning.fabric.callbacks_factory"))
return callbacks
View on GitHub (pinned to 9fed5c27d2)
Solutions
- Wrap your dataset in a `torch.utils.data.DataLoader` before calling setup_dataloaders
- If you have a custom iterable, iterate it manually inside the training loop instead of passing it to setup_dataloaders (you lose Fabric's distributed sampler handling)
- Check `isinstance(obj, torch.utils.data.DataLoader)` before passing
Example fix
# before loader = fabric.setup_dataloaders(my_dataset) # not a DataLoader # after from torch.utils.data import DataLoader loader = fabric.setup_dataloaders(DataLoader(my_dataset, batch_size=32))
Defensive patterns
Strategy: type-guard
Validate before calling
from torch.utils.data import DataLoader assert all(isinstance(dl, DataLoader) for dl in dls), 'only torch DataLoaders supported'
Type guard
from torch.utils.data import DataLoader
def is_torch_dataloader(x) -> bool:
return isinstance(x, DataLoader) Prevention
- Wrap datasets in torch DataLoader before Fabric setup
- Remember Fabric has no LightningDataModule support
When it happens
Trigger: Passing a `IterableDataset`, a plain iterable, a HuggingFace `DataLoader`-like object, a `LightningDataModule`, or any custom loader class to `fabric.setup_dataloaders()`.
Common situations: Migrating from Lightning Trainer where combined data modules or arbitrary iterables were accepted; wrapping datasets with custom batch iterators; passing a dataset directly instead of a DataLoader.
Related errors
- `setup_dataloaders` requires at least one dataloader as inpu
- A dataloader should be passed only once to the `setup_datalo
- `self.log({name}, {value})` was called, but `{type(v).__name
- The dataloader {dataloader} needs to subclass `torch.utils.d
- Filter should be a dictionary, given {filter!r}
AI-assisted analysis of Lightning-AI/pytorch-lightning@9fed5c27d2 (2026-08-28).
Data as JSON: /api/errors/eac3b1fe4b79d54d.
Report an issue: GitHub.