Lightning-AI/pytorch-lightning · error · RuntimeError
Expected a precision plugin, got {plugin}
Error message
Expected a precision plugin, got {plugin} What it means
_plugin_to_compute_dtype() maps a Fabric Precision plugin to the torch dtype used for FLOP/throughput measurement. It raises RuntimeError when the passed plugin is not an instance of a lightning.pytorch.plugins.precision.Precision subclass.
Source
Thrown at src/lightning/fabric/utilities/throughput.py:672
return int(_TPU_FLOPS[chip])
def _plugin_to_compute_dtype(plugin: "Precision") -> torch.dtype:
# TODO: integrate this into the precision plugins
from lightning.fabric.plugins import (
BitsandbytesPrecision,
DeepSpeedPrecision,
DoublePrecision,
FSDPPrecision,
HalfPrecision,
MixedPrecision,
Precision,
TransformerEnginePrecision,
XLAPrecision,
)
if not isinstance(plugin, Precision):
raise RuntimeError(f"Expected a precision plugin, got {plugin}")
if isinstance(plugin, BitsandbytesPrecision):
return plugin.dtype
if isinstance(plugin, (HalfPrecision, MixedPrecision)):
return plugin._desired_input_dtype
if isinstance(plugin, DoublePrecision):
return torch.double
if isinstance(plugin, (XLAPrecision, DeepSpeedPrecision)):
return plugin._desired_dtype
if isinstance(plugin, TransformerEnginePrecision):
return torch.int8
if isinstance(plugin, FSDPPrecision):
return plugin.mixed_precision_config.reduce_dtype or torch.float32
if isinstance(plugin, Precision):
return torch.float32
raise NotImplementedError(plugin)
T = TypeVar("T", bound=float)View on GitHub (pinned to 9fed5c27d2)
Solutions
- Pass an actual Precision plugin instance, e.g. fabric.strategy.precision or MixedPrecision('bf16', device='cuda')
- If using DeepSpeed FLOPs profiling, retrieve the plugin from the strategy: ThroughputMonitor(..., precision_plugin=fabric.strategy.precision)
- Check you are importing from lightning.fabric.plugins.precision, not torch or another package
Example fix
# before
monitor = ThroughputMonitor(flops_deepspeed=profile, precision_plugin='bf16')
# after
from lightning.fabric.plugins import MixedPrecision
monitor = ThroughputMonitor(flops_deepspeed=profile, precision_plugin=MixedPrecision('bf16', device='cuda')) Defensive patterns
Strategy: type-guard
Validate before calling
from lightning.fabric.plugins import Precision
plugin = fabric.strategy.precision
assert isinstance(plugin, Precision), f"not a precision plugin: {plugin!r}" Type guard
from lightning.fabric.plugins import Precision
from typing import Any
def is_precision_plugin(p: Any) -> bool:
return isinstance(p, Precision) Prevention
- Always source the plugin from fabric.strategy.precision rather than constructing raw values
- Never pass dtype objects or strings as precision_plugin
When it happens
Trigger: Passing a raw torch dtype, a string like 'bf16', a Trainer precision config dict, or None as the precision_plugin argument of ThroughputMonitor; also passing a strategy or accelerator object instead of the precision plugin.
Common situations: Constructing ThroughputMonitor(flops_deepspeed=..., precision_plugin='bf16') instead of a real plugin instance; grabbing fabric.strategy.precision on a version where the attribute is unset or returns a wrapper; mixing old lightning (pl) imports with new lightning.fabric APIs.
Understand the failure class
Background: "Wrong argument type", "must be a string", "expected Array or Prism::Scope": TypeError and ArgumentError when a library receives a value of the wrong type — this error's family across 28 libraries.
Related errors
- Expected a method or a string, but got: {type(method).__name
- `devices` selected with `CPUAccelerator` should be an int >
- Received both `precision={precision_input}` and `plugins={se
- precision set through both strategy class and plugins, choos
- Precision {repr(precision)} is invalid. Allowed precision va
AI-assisted analysis of Lightning-AI/pytorch-lightning@9fed5c27d2 (2026-08-28).
Data as JSON: /api/errors/a0d5c400f39a014e.
Report an issue: GitHub.