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
- Save hyperparameters yourself, e.g. write the config to JSON/YAML next to the CSV metrics file
- Switch to a logger that supports hyperparameters (TensorBoardLogger, MLFlowLogger, WandbLogger)
- 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
- Persist hyperparameters to a JSON/YAML file yourself
- Use try/except NotImplementedError in generic logging utilities
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
- `setup_optimizers` requires at least one optimizer as input.
- An optimizer should be passed only once to the `setup_optimi
- The optimizer has references to the model's meta-device para
- `setup_dataloaders` requires at least one dataloader as inpu
- A dataloader should be passed only once to the `setup_datalo
AI-assisted analysis of Lightning-AI/pytorch-lightning@9fed5c27d2 (2026-08-28).
Data as JSON: /api/errors/68345a5774ff7d02.
Report an issue: GitHub.