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 False

View on GitHub (pinned to 9fed5c27d2)

Solutions

  1. Use `FSDPPrecision` (e.g. `FSDPPrecision("16-mixed")`) or simply set `Trainer(precision="16-mixed")` and let FSDPStrategy build its plugin
  2. Remove the generic MixedPrecision plugin from the plugins list when using FSDP
  3. 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

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


AI-assisted analysis of Lightning-AI/pytorch-lightning@9fed5c27d2 (2026-08-28). Data as JSON: /api/errors/ad8d9deab881ef6a. Report an issue: GitHub.