Lightning-AI/pytorch-lightning · error · NotImplementedError
The `configure_payload` method needs to be overridden.
Error message
The `configure_payload` method needs to be overridden.
What it means
Lightning's ServableModuleValidator requires any ServableModule passed to serving validation to implement configure_payload. The check runs in on_train_start via is_overridden; if your model still uses the base ServableModule stub, serving metadata cannot be generated and training halts with NotImplementedError.
Source
Thrown at src/lightning/pytorch/serve/servable_module_validator.py:88
self.server = server
self.timeout = timeout
self.exit_on_failure = exit_on_failure
self.resp: Optional[requests.Response] = None
@override
@rank_zero_only
def on_train_start(self, trainer: "pl.Trainer", servable_module: "pl.LightningModule") -> None:
if isinstance(trainer.strategy, _NOT_SUPPORTED_STRATEGIES):
raise Exception(
f"The current strategy {trainer.strategy.__class__.__qualname__} used "
"by the trainer isn't supported for sanity serving yet."
)
if not isinstance(servable_module, ServableModule):
raise TypeError(f"The provided model should be subclass of {ServableModule.__qualname__}.")
if not is_overridden("configure_payload", servable_module, ServableModule):
raise NotImplementedError("The `configure_payload` method needs to be overridden.")
if not is_overridden("configure_serialization", servable_module, ServableModule):
raise NotImplementedError("The `configure_serialization` method needs to be overridden.")
if not is_overridden("serve_step", servable_module, ServableModule):
raise NotImplementedError("The `serve_step` method needs to be overridden.")
# Note: The Trainer needs to be detached from the pl_module before starting the process.
# This would fail during the deepcopy with DDP.
servable_module.trainer = None
process = Process(target=self._start_server, args=(servable_module, self.host, self.port, self.optimization))
process.start()
servable_module.trainer = trainer
ready = False
t0 = time.time()
while not ready:
with contextlib.suppress(requests.exceptions.ConnectionError):View on GitHub (pinned to 9fed5c27d2)
Solutions
- Override configure_payload in your LightningModule to return the request payload dict, e.g. {"body": {"x": ...}}
- Ensure the override signature matches ServableModule.configure_payload (no args, returns dict)
- Alternatively drop ServableModuleValidator from the callbacks list if serving validation is not needed
Example fix
// before
class MyModel(ServableModule):
def configure_serialization(self): ...
def serve_step(self, **kwargs): ...
// after
class MyModel(ServableModule):
def configure_payload(self):
return {"body": {"x": self.example_input}}
def configure_serialization(self): ...
def serve_step(self, **kwargs): ... Defensive patterns
Strategy: validation
Validate before calling
from lightning.pytorch.utilities import is_overridden
from lightning.pytorch.serve import ServableModule
required = ["configure_payload", "configure_serialization", "serve_step"]
missing = [m for m in required if not is_overridden(m, model, ServableModule)]
assert not missing, f"Override required methods: {missing}" Type guard
def is_fully_servable(m) -> bool:
return all(
is_overridden(meth, m, ServableModule)
for meth in ("configure_payload", "configure_serialization", "serve_step")
) Prevention
- Implement all three ServableModule hooks together as a checklist
- Add a unit test asserting is_overridden for each required method before training
When it happens
Trigger: Attaching ServableModuleValidator callback to a Trainer whose model subclasses ServableModule but does not override configure_payload (only configure_serialization or serve_step implemented).
Common situations: Partially implementing the ServableModule interface, copy-pasting an example model and deleting the payload method, or upgrading Lightning where the serving API became stricter.
Related errors
- The `configure_serialization` method needs to be overridden.
- The `serve_step` method needs to be overridden.
- Unsupported {cls}
- The server didn't start within {self.timeout} seconds.
- Your provided payload {payload} should have a field named "b
AI-assisted analysis of Lightning-AI/pytorch-lightning@9fed5c27d2 (2026-08-28).
Data as JSON: /api/errors/6006d59f0fbe657a.
Report an issue: GitHub.