Lightning-AI/pytorch-lightning · error · TypeError
The FSDP strategy can only work with the `FSDPPrecision` plu
Error message
The FSDP strategy can only work with the `FSDPPrecision` plugin, found {precision_plugin} What it means
FSDP requires its own precision plugin (FSDPPrecision) because mixed precision under FSDP is applied via wrapped policy dtypes, not the generic MixedPrecision plugin. The precision_plugin setter on FSDPStrategy rejects any non-None plugin that is not an FSDPPrecision instance with TypeError.
Source
Thrown at src/lightning/pytorch/strategies/fsdp.py:239
plugin = self.precision_plugin
if isinstance(plugin, FSDPPrecision):
return plugin.mixed_precision_config
return None
@property
@override
def precision_plugin(self) -> FSDPPrecision:
plugin = self._precision_plugin
if plugin is not None:
assert isinstance(plugin, FSDPPrecision)
return plugin
return FSDPPrecision("32-true")
@precision_plugin.setter
@override
def precision_plugin(self, precision_plugin: Optional[Precision]) -> None:
if precision_plugin is not None and not isinstance(precision_plugin, FSDPPrecision):
raise TypeError(
f"The FSDP strategy can only work with the `FSDPPrecision` plugin, found {precision_plugin}"
)
self._precision_plugin = precision_plugin
@property
@override
def distributed_sampler_kwargs(self) -> dict:
return {"num_replicas": (self.num_nodes * self.num_processes), "rank": self.global_rank}
@property
@override
def restore_checkpoint_after_setup(self) -> bool:
return True
@property
@override
def lightning_restore_optimizer(self) -> bool:
return FalseView on GitHub (pinned to 9fed5c27d2)
Solutions
- Use `FSDPPrecision` (e.g. `FSDPPrecision("16-mixed")`) or simply set `Trainer(precision="16-mixed")` and let FSDPStrategy build its plugin
- Remove the generic MixedPrecision plugin from the plugins list when using FSDP
- For custom precision logic, subclass FSDPPrecision instead of Precision
Example fix
# before
from lightning.pytorch.plugins import MixedPrecision
trainer = Trainer(strategy=FSDPStrategy(), plugins=[MixedPrecision(precision="16-mixed", device="cuda")])
# after
from lightning.fabric.plugins.precision.fsdp import FSDPPrecision
trainer = Trainer(strategy=FSDPStrategy(), plugins=[FSDPPrecision("16-mixed")]) Defensive patterns
Strategy: type-guard
Validate before calling
from lightning.fabric.plugins.precision.fsdp import FSDPPrecision plugins = [p for p in plugins if not isinstance(p, Precision) or isinstance(p, FSDPPrecision)] trainer = Trainer(strategy=FSDPStrategy(), plugins=plugins)
Type guard
from lightning.pytorch.plugins import Precision
from lightning.fabric.plugins.precision.fsdp import FSDPPrecision
def is_fsdp_compatible(p: Precision) -> bool:
return p is None or isinstance(p, FSDPPrecision) Prevention
- Prefer Trainer(precision="16-mixed") and let FSDPStrategy build FSDPPrecision
- Never attach generic MixedPrecision plugins to FSDP runs
When it happens
Trigger: Assigning `strategy.precision_plugin = MixedPrecision(...)` (or passing a non-FSDP precision plugin) to an FSDPStrategy/FSDPStrategy instance; typically via `Trainer(strategy=FSDPStrategy(...), plugins=[precision_plugin])` with a generic plugin.
Common situations: Copy-pasting `plugins=[MixedPrecision(precision="16-mixed", device="cuda")]` from a DDP example onto an FSDP run; wrapping FSDPStrategy with a custom Precision subclass.
Related errors
- `precision={precision!r}` does not use a scaler, found {scal
- Was unable to infer precision type, received {self.precision
- `devices` selected with `CPUAccelerator` should be an int >
- The optimizer has references to the model's meta-device para
- The optimizer has references to the model's meta-device para
AI-assisted analysis of Lightning-AI/pytorch-lightning@9fed5c27d2 (2026-08-28).
Data as JSON: /api/errors/ad8d9deab881ef6a.
Report an issue: GitHub.