Lightning-AI/pytorch-lightning · error · ValueError
You cannot set both `activation_checkpointing` and `activati
Error message
You cannot set both `activation_checkpointing` and `activation_checkpointing_policy`. Use the latter.
What it means
FSDPStrategy exposes two ways to select which layers get activation checkpointing: the legacy activation_checkpointing (module class or list of classes) and the newer activation_checkpointing_policy (a policy dict). Passing both is rejected to avoid conflicting specifications; the policy kwarg is the recommended one.
Source
Thrown at src/lightning/fabric/strategies/fsdp.py:708
return self._process_group_backend or _get_default_process_group_backend_for_device(self.root_device)
def _set_world_ranks(self) -> None:
if self.cluster_environment is not None:
self.cluster_environment.set_global_rank(self.node_rank * self.num_processes + self.local_rank)
self.cluster_environment.set_world_size(self.num_nodes * self.num_processes)
# `LightningEnvironment.set_global_rank` will do this too, but we cannot rely on that implementation detail
# additionally, for some implementations, the setter is a no-op, so it's safer to access the getter
rank_zero_only.rank = utils_rank_zero_only.rank = self.global_rank
def _activation_checkpointing_kwargs(
activation_checkpointing: Optional[Union[type[Module], list[type[Module]]]],
activation_checkpointing_policy: Optional["_POLICY"],
) -> dict:
if activation_checkpointing is None and activation_checkpointing_policy is None:
return {}
if activation_checkpointing is not None and activation_checkpointing_policy is not None:
raise ValueError(
"You cannot set both `activation_checkpointing` and `activation_checkpointing_policy`. Use the latter."
)
if activation_checkpointing is not None:
if isinstance(activation_checkpointing, list):
classes = tuple(activation_checkpointing)
else:
classes = (activation_checkpointing,)
rank_zero_deprecation(
f"`FSDPStrategy(activation_checkpointing={activation_checkpointing})` is deprecated, use "
f"`FSDPStrategy(activation_checkpointing_policy={set(classes)})` instead."
)
return {"check_fn": lambda submodule: isinstance(submodule, classes)}
if isinstance(activation_checkpointing_policy, set):
return _auto_wrap_policy_kwargs(activation_checkpointing_policy, {})
return {"auto_wrap_policy": activation_checkpointing_policy}
def _auto_wrap_policy_kwargs(policy: Optional["_POLICY"], kwargs: dict) -> dict:View on GitHub (pinned to 9fed5c27d2)
Solutions
- Remove activation_checkpointing and express the same selection via activation_checkpointing_policy
- Translate class lists to policy form: {TransformerBlock: ...} or use checkpoint policies like every_other_transformer_layer_policy
Example fix
# before
FSDPStrategy(
activation_checkpointing=[TransformerBlock],
activation_checkpointing_policy={TransformerBlock: None},
)
# after
FSDPStrategy(
activation_checkpointing_policy={TransformerBlock: None},
) Defensive patterns
Strategy: validation
Validate before calling
assert not (activation_checkpointing and activation_checkpointing_policy), 'pass only activation_checkpointing_policy'
Prevention
- Prefer activation_checkpointing_policy in new code
- Lint configs for legacy kwargs after Lightning upgrades
When it happens
Trigger: FSDPStrategy(activation_checkpointing=[TransformerBlock], activation_checkpointing_policy={TransformerBlock: ...}) — both kwargs non-None in the same constructor call.
Common situations: Copy-pasting config from an old example (activation_checkpointing) into a newer script that already sets a policy; merging YAML configs where both keys survive; upgrading Lightning and keeping the legacy kwarg while adding the new one.
Related errors
- The optimizer has references to the model's meta-device para
- `precision={precision!r})` is not supported in FSDP. `precis
- `precision={precision!r}` does not use a scaler, found {scal
- Gradient clipping is not implemented for optimizers handling
- Found multiple FSDP models in the given state. Saving checkp
AI-assisted analysis of Lightning-AI/pytorch-lightning@9fed5c27d2 (2026-08-28).
Data as JSON: /api/errors/26b79c224217d6d0.
Report an issue: GitHub.