Lightning-AI/pytorch-lightning · error · RuntimeError
The `{type(self._strategy).__name__}` requires the model and
Error message
The `{type(self._strategy).__name__}` requires the model and optimizer(s) to be set up jointly through `.setup(model, optimizer, ...)`. What it means
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.
Source
Thrown at src/lightning/fabric/fabric.py:1226
if isinstance(self._strategy, FSDPStrategy) and 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 unless you to set up the model and optimizer(s) separately."
" Create and set up the model first through `model = fabric.setup_module(model)`. Then create the"
" optimizer and set it up: `optimizer = fabric.setup_optimizers(optimizer)`."
)
def _validate_setup_module(self, module: nn.Module) -> None:
self._validate_launched()
if isinstance(module, _FabricModule):
raise ValueError("A model should be passed only once to the `setup_module` method.")
def _validate_setup_optimizers(self, optimizers: Sequence[Optimizer]) -> None:
self._validate_launched()
if isinstance(self._strategy, (DeepSpeedStrategy, XLAStrategy)):
raise RuntimeError(
f"The `{type(self._strategy).__name__}` requires the model and optimizer(s) to be set up jointly"
" through `.setup(model, optimizer, ...)`."
)
if not optimizers:
raise ValueError("`setup_optimizers` requires at least one optimizer as input.")
if any(isinstance(opt, _FabricOptimizer) for opt in optimizers):
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:View on GitHub (pinned to 9fed5c27d2)
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
Example fix
# before model = fabric.setup_module(model) optimizer = fabric.setup_optimizers(optimizer) # deepspeed # after model, optimizer = fabric.setup(model, optimizer)
Defensive patterns
Strategy: validation
Validate before calling
from lightning.fabric.strategies import DeepSpeedStrategy, XLAStrategy
if isinstance(fabric.strategy, (DeepSpeedStrategy, XLAStrategy)):
model, optimizer = fabric.setup(model, optimizer)
else:
model = fabric.setup_module(model)
optimizer = fabric.setup_optimizers(optimizer) Prevention
- Know your strategy's contract: deepspeed/XLA require joint model+optimizer setup
When it happens
Trigger: fabric = Fabric(strategy='deepspeed') then fabric.setup_optimizers(optimizer) after separately setting up the model — the separated flow is unsupported for these strategies.
Common situations: Writing strategy-agnostic code with separate setup_module/setup_optimizers calls, then switching strategy='deepspeed' or running on TPU/XLA.
Related errors
- No models were set up for backward. Did you forget to call `
- When using multiple models + deepspeed, please provide the m
- To spawn processes with the `{type(self.strategy).__name__}`
- A model should be passed only once to the `setup` method.
- An optimizer should be passed only once to the `setup` metho
AI-assisted analysis of Lightning-AI/pytorch-lightning@9fed5c27d2 (2026-08-28).
Data as JSON: /api/errors/b0f25afbe5086d39.
Report an issue: GitHub.