{"record":{"id":"b0f25afbe5086d39","repo":"Lightning-AI/pytorch-lightning","slug":"the-type-self-strategy-name-requires-the","errorCode":null,"errorMessage":"The `{type(self._strategy).__name__}` requires the model and optimizer(s) to be set up jointly through `.setup(model, optimizer, ...)`.","messagePattern":"The `(.+?)` requires the model and optimizer\\(s\\) to be set up jointly through `\\.setup\\(model, optimizer, \\.\\.\\.\\)`\\.","errorType":"exception","errorClass":"RuntimeError","httpStatus":null,"severity":"error","filePath":"src/lightning/fabric/fabric.py","lineNumber":1226,"sourceCode":"        if isinstance(self._strategy, FSDPStrategy) and any(\n            _has_meta_device_parameters_or_buffers(optimizer) for optimizer in optimizers\n        ):\n            raise RuntimeError(\n                \"The optimizer has references to the model's meta-device parameters. Materializing them is\"\n                \" is currently not supported unless you to set up the model and optimizer(s) separately.\"\n                \" Create and set up the model first through `model = fabric.setup_module(model)`. Then create the\"\n                \" optimizer and set it up: `optimizer = fabric.setup_optimizers(optimizer)`.\"\n            )\n\n    def _validate_setup_module(self, module: nn.Module) -> None:\n        self._validate_launched()\n        if isinstance(module, _FabricModule):\n            raise ValueError(\"A model should be passed only once to the `setup_module` method.\")\n\n    def _validate_setup_optimizers(self, optimizers: Sequence[Optimizer]) -> None:\n        self._validate_launched()\n        if isinstance(self._strategy, (DeepSpeedStrategy, XLAStrategy)):\n            raise RuntimeError(\n                f\"The `{type(self._strategy).__name__}` requires the model and optimizer(s) to be set up jointly\"\n                \" through `.setup(model, optimizer, ...)`.\"\n            )\n\n        if not optimizers:\n            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:","sourceCodeStart":1208,"sourceCodeEnd":1244,"githubUrl":"https://github.com/Lightning-AI/pytorch-lightning/blob/9fed5c27d2a62ff0efd6c3573599921d6ff67c14/src/lightning/fabric/fabric.py#L1208-L1244","documentation":"DeepSpeedStrategy and XLAStrategy couple the model and optimizer into a single engine/session, so optimizers cannot be set up standalone. _validate_setup_optimizers raises RuntimeError for these strategies, directing you to the joint .setup(model, optimizer, ...) call.","triggerScenarios":"fabric = Fabric(strategy='deepspeed') then fabric.setup_optimizers(optimizer) after separately setting up the model — the separated flow is unsupported for these strategies.","commonSituations":"Writing strategy-agnostic code with separate setup_module/setup_optimizers calls, then switching strategy='deepspeed' or running on TPU/XLA.","solutions":["Use the joint call: model, optimizer = fabric.setup(model, optimizer)","Branch your code: for deepspeed/XLA use joint setup, otherwise separate setup is fine"],"exampleFix":"# before\nmodel = fabric.setup_module(model)\noptimizer = fabric.setup_optimizers(optimizer)  # deepspeed\n# after\nmodel, optimizer = fabric.setup(model, optimizer)","handlingStrategy":"validation","validationCode":"from lightning.fabric.strategies import DeepSpeedStrategy, XLAStrategy\nif isinstance(fabric.strategy, (DeepSpeedStrategy, XLAStrategy)):\n    model, optimizer = fabric.setup(model, optimizer)\nelse:\n    model = fabric.setup_module(model)\n    optimizer = fabric.setup_optimizers(optimizer)","typeGuard":null,"tryCatchPattern":null,"preventionTips":["Know your strategy's contract: deepspeed/XLA require joint model+optimizer setup"],"tags":["lightning","fabric","deepspeed","xla","setup","joint-setup"],"backgroundTag":"strategy-requires-joint-setup","analyzedSha":"9fed5c27d2a62ff0efd6c3573599921d6ff67c14","analyzedAt":"2026-08-28T11:52:41.083Z","schemaVersion":2},"datasetVersion":"2026-08-28T16:17:29.566Z"}