Lightning-AI/pytorch-lightning · warning · NotImplementedError

The `CSVLogger` does not yet support logging hyperparameters

Error message

The `CSVLogger` does not yet support logging hyperparameters.

What it means

The Fabric `CSVLogger` explicitly does not implement `log_hyperparams`; calling it raises `NotImplementedError`. The CSV writer only records metrics rows, so hyperparameter logging is unsupported by design.

Source

Thrown at src/lightning/fabric/loggers/csv_logs.py:142

    def experiment(self) -> "_ExperimentWriter":
        """Actual ExperimentWriter object. To use ExperimentWriter features anywhere in your code, do the following.

        Example::

            self.logger.experiment.some_experiment_writer_function()

        """
        if self._experiment is not None:
            return self._experiment

        os.makedirs(self._root_dir, exist_ok=True)
        self._experiment = _ExperimentWriter(log_dir=self.log_dir)
        return self._experiment

    @override
    @rank_zero_only
    def log_hyperparams(self, params: Union[dict[str, Any], Namespace]) -> None:
        raise NotImplementedError("The `CSVLogger` does not yet support logging hyperparameters.")

    @override
    @rank_zero_only
    def log_metrics(  # type: ignore[override]
        self, metrics: dict[str, Union[Tensor, float]], step: Optional[int] = None
    ) -> None:
        metrics = _add_prefix(metrics, self._prefix, self.LOGGER_JOIN_CHAR)
        if step is None:
            step = len(self.experiment.metrics)
        self.experiment.log_metrics(metrics, step)
        if (step + 1) % self._flush_logs_every_n_steps == 0:
            self.save()

    @override
    @rank_zero_only
    def save(self) -> None:
        super().save()
        self.experiment.save()

View on GitHub (pinned to 9fed5c27d2)

Solutions

  1. Save hyperparameters yourself, e.g. write the config to JSON/YAML next to the CSV metrics file
  2. Switch to a logger that supports hyperparameters (TensorBoardLogger, MLFlowLogger, WandbLogger)
  3. Guard the call: check `not isinstance(logger, CSVLogger)` or catch NotImplementedError

Example fix

# before
logger.log_hyperparams(config)  # CSVLogger -> NotImplementedError

# after
import json, os
with open(os.path.join(logger.log_dir, 'hparams.json'), 'w') as f:
    json.dump(config, f, default=str)
Defensive patterns

Strategy: try-catch

Validate before calling

from lightning.fabric.loggers.csv_logs import CSVLogger
if not isinstance(logger, CSVLogger):
    logger.log_hyperparams(params)

Type guard

from lightning.fabric.loggers.csv_logs import CSVLogger
def supports_hparams(logger) -> bool:
    return not isinstance(logger, CSVLogger)

Try / catch

try:
    logger.log_hyperparams(params)
except NotImplementedError:
    pass  # CSVLogger does not support hparams; persist separately

Prevention

When it happens

Trigger: Calling `logger.log_hyperparams(params)` on a `lightning.fabric.loggers.csv_logs.CSVLogger`, or having generic logging code / a callback that logs hyperparameters for every configured logger.

Common situations: Sharing a logging utility between TensorBoard and CSV loggers; saving hyperparameters from a config dict via the logger; frameworks that probe all loggers with log_hyperparams.

Related errors


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