Lightning-AI/pytorch-lightning · error · MisconfigurationException
f"`reload_dataloaders_every_n_epochs` should be an int >= 0,
Error message
f"`reload_dataloaders_every_n_epochs` should be an int >= 0, got {reload_dataloaders_every_n_epochs}." What it means
DataConnector validation at Trainer init: reload_dataloaders_every_n_epochs must be an int and >= 0. 0 means never reload; N means reload dataloaders every N epochs. Non-ints (floats, strings) and negatives are rejected.
Source
Thrown at src/lightning/pytorch/trainer/connectors/data_connector.py:74
check_val_every_n_epoch: Optional[int],
) -> None:
self.trainer.datamodule = None
if check_val_every_n_epoch is not None and not isinstance(check_val_every_n_epoch, int):
raise MisconfigurationException(
f"`check_val_every_n_epoch` should be an integer, found {check_val_every_n_epoch!r}."
)
if check_val_every_n_epoch is None and isinstance(val_check_interval, float):
raise MisconfigurationException(
"`val_check_interval` should be an integer or a time-based duration (str 'DD:HH:MM:SS', "
"datetime.timedelta, or dict kwargs for timedelta) when `check_val_every_n_epoch=None`."
)
self.trainer.check_val_every_n_epoch = check_val_every_n_epoch
if not isinstance(reload_dataloaders_every_n_epochs, int) or (reload_dataloaders_every_n_epochs < 0):
raise MisconfigurationException(
f"`reload_dataloaders_every_n_epochs` should be an int >= 0, got {reload_dataloaders_every_n_epochs}."
)
self.trainer.reload_dataloaders_every_n_epochs = reload_dataloaders_every_n_epochs
def prepare_data(self) -> None:
trainer = self.trainer
# on multi-gpu jobs we only want to manipulate (download, etc) on node_rank=0, local_rank=0
# or in the case where each node needs to do its own manipulation in which case just local_rank=0
local_rank_zero = trainer.local_rank == 0
global_rank_zero = trainer.local_rank == 0 and trainer.node_rank == 0
datamodule = trainer.datamodule
lightning_module = trainer.lightning_module
# handle datamodule prepare data:
if datamodule is not None and is_overridden("prepare_data", datamodule):
prepare_data_per_node = datamodule.prepare_data_per_nodeView on GitHub (pinned to 9fed5c27d2)
Solutions
- Pass a non-negative int, e.g., reload_dataloaders_every_n_epochs=1 (reload every epoch) or 0 (never)
- Cast values from external configs: int(value)
- Validate sweep/config values before Trainer construction
Example fix
# before trainer = Trainer(reload_dataloaders_every_n_epochs=1.0) # after trainer = Trainer(reload_dataloaders_every_n_epochs=1)
Defensive patterns
Strategy: type-guard
Validate before calling
reload = cfg["reload_dataloaders_every_n_epochs"]
if not isinstance(reload, int) or isinstance(reload, bool) or reload < 0:
reload = max(0, int(reload))
trainer = Trainer(reload_dataloaders_every_n_epochs=reload) Type guard
def is_valid_reload_n(v) -> bool:
return isinstance(v, int) and not isinstance(v, bool) and v >= 0 Prevention
- Validate non-negative ints in your config schema
- Cast sweep outputs before Trainer construction
When it happens
Trigger: Trainer(reload_dataloaders_every_n_epochs=-1), =1.0, or a value from config/sweep arriving as float or str.
Common situations: Config files with quoted numbers; hyperparameter search tools yielding floats; users assuming -1 means 'always' or 'disabled'.
Related errors
- f"`check_val_every_n_epoch` should be an integer, found {che
- "`val_check_interval` should be an integer or a time-based d
- `name` must be a str, found {name}
- Expected `torch.nn.Module` or `torch.optim.Optimizer`, got:
- The provided lr scheduler `{scheduler.__class__.__name__}` i
AI-assisted analysis of Lightning-AI/pytorch-lightning@9fed5c27d2 (2026-08-28).
Data as JSON: /api/errors/f6f2db29897be10b.
Report an issue: GitHub.