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

  1. Override configure_payload in your LightningModule to return the request payload dict, e.g. {"body": {"x": ...}}
  2. Ensure the override signature matches ServableModule.configure_payload (no args, returns dict)
  3. 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

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


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