{"record":{"id":"b9658d2dc24f842c","repo":"Lightning-AI/pytorch-lightning","slug":"the-interval-key-in-lr-scheduler-dict-must-be-s","errorCode":null,"errorMessage":"The \"interval\" key in lr scheduler dict must be \"step\" or \"epoch\" but is \"{scheduler[\"interval\"]}\"","messagePattern":"The \"interval\" key in lr scheduler dict must be \"step\" or \"epoch\" but is \"(.+?)\"","errorType":"exception","errorClass":"MisconfigurationException","httpStatus":null,"severity":"critical","filePath":"src/lightning/pytorch/core/optimizer.py","lineNumber":270,"sourceCode":"    lr_scheduler_configs = []\n    for scheduler in schedulers:\n        if isinstance(scheduler, dict):\n            # check provided keys\n            supported_keys = {field.name for field in fields(LRSchedulerConfig)}\n            extra_keys = scheduler.keys() - supported_keys\n            if extra_keys:\n                rank_zero_warn(\n                    f\"Found unsupported keys in the lr scheduler dict: {extra_keys}.\"\n                    \" HINT: remove them from the output of `configure_optimizers`.\",\n                    category=RuntimeWarning,\n                )\n                scheduler = {k: v for k, v in scheduler.items() if k in supported_keys}\n            if \"scheduler\" not in scheduler:\n                raise MisconfigurationException(\n                    'The lr scheduler dict must have the key \"scheduler\" with its item being an lr scheduler'\n                )\n            if \"interval\" in scheduler and scheduler[\"interval\"] not in (\"step\", \"epoch\"):\n                raise MisconfigurationException(\n                    'The \"interval\" key in lr scheduler dict must be \"step\" or \"epoch\"'\n                    f' but is \"{scheduler[\"interval\"]}\"'\n                )\n            scheduler[\"reduce_on_plateau\"] = scheduler.get(\n                \"reduce_on_plateau\", isinstance(scheduler[\"scheduler\"], optim.lr_scheduler.ReduceLROnPlateau)\n            )\n            if scheduler[\"reduce_on_plateau\"] and scheduler.get(\"monitor\") is None:\n                raise MisconfigurationException(\n                    \"The lr scheduler dict must include a monitor when a `ReduceLROnPlateau` scheduler is used.\"\n                    ' For example: {\"optimizer\": optimizer, \"lr_scheduler\":'\n                    ' {\"scheduler\": scheduler, \"monitor\": \"your_loss\"}}'\n                )\n            is_one_cycle = isinstance(scheduler[\"scheduler\"], optim.lr_scheduler.OneCycleLR)\n            if is_one_cycle and scheduler.get(\"interval\", \"epoch\") == \"epoch\":\n                rank_zero_warn(\n                    \"A `OneCycleLR` scheduler is using 'interval': 'epoch'.\"\n                    \" Are you sure you didn't mean 'interval': 'step'?\",\n                    category=RuntimeWarning,","sourceCodeStart":252,"sourceCodeEnd":288,"githubUrl":"https://github.com/Lightning-AI/pytorch-lightning/blob/9fed5c27d2a62ff0efd6c3573599921d6ff67c14/src/lightning/pytorch/core/optimizer.py#L252-L288","documentation":"In a scheduler dict, the optional 'interval' key controls whether the scheduler steps per 'step' or per 'epoch'. Any other value (e.g. 'batch', 'iteration', 'iteration_step') raises MisconfigurationException echoing the bad value.","triggerScenarios":"Returning {'scheduler': sched, 'interval': 'batch'} from configure_optimizers.","commonSituations":"Coming from older Lightning/PyTorch Ignite where the interval was called 'batch' or 'iteration', or typos like 'epochs'.","solutions":["Use interval=\"step\" or interval=\"epoch\"","If you intended per-batch stepping, that is interval=\"step\""],"exampleFix":"# before\n{'scheduler': sched, 'interval': 'batch'}\n# after\n{'scheduler': sched, 'interval': 'step'}","handlingStrategy":"type-guard","validationCode":"assert interval in (\"step\", \"epoch\")","typeGuard":"def valid_interval(v: str) -> bool:\n    return v in {\"step\", \"epoch\"}","tryCatchPattern":null,"preventionTips":["Remember per-batch stepping is 'step', not 'batch'"],"tags":["lr-scheduler","interval","validation","lightning"],"backgroundTag":"invalid-enum-value","analyzedSha":"9fed5c27d2a62ff0efd6c3573599921d6ff67c14","analyzedAt":"2026-08-28T11:52:41.083Z","schemaVersion":2},"datasetVersion":"2026-08-28T16:17:29.566Z"}