From 9647fc02b5bfb7d33d25229b917caf3c0829641d Mon Sep 17 00:00:00 2001 From: bhimrazy Date: Fri, 27 Jun 2025 01:11:00 +0545 Subject: [PATCH 1/7] docs: improve docstrings for ExperimentWriter and CSVLogger classes --- src/lightning/pytorch/loggers/csv_logs.py | 26 +++++++++++++++++++---- 1 file changed, 22 insertions(+), 4 deletions(-) diff --git a/src/lightning/pytorch/loggers/csv_logs.py b/src/lightning/pytorch/loggers/csv_logs.py index 5ad7353310af4..638e00c89d1bf 100644 --- a/src/lightning/pytorch/loggers/csv_logs.py +++ b/src/lightning/pytorch/loggers/csv_logs.py @@ -38,8 +38,10 @@ class ExperimentWriter(_FabricExperimentWriter): r"""Experiment writer for CSVLogger. - Currently, supports to log hyperparameters and metrics in YAML and CSV - format, respectively. + Logs hyperparameters to YAML format and metrics to CSV format. + + - **Hyperparameters**: Saved to ``hparams.yaml`` via the ``log_hparams()`` method + - **Metrics**: Saved to ``metrics.csv`` (inherited from parent class) This logger supports logging to remote filesystems via ``fsspec``. Make sure you have it installed. @@ -62,15 +64,24 @@ def log_hparams(self, params: dict[str, Any]) -> None: class CSVLogger(Logger, FabricCSVLogger): - r"""Log to local file system in yaml and CSV format. + r"""Log to local file system in YAML and CSV format. + + This logger automatically saves: - Logs are saved to ``os.path.join(save_dir, name, version)``. + - **Metrics**: Logged to CSV format in ``metrics.csv`` + - **Hyperparameters**: Logged to YAML format in ``hparams.yaml`` (when ``log_hyperparams()`` is called) Example: >>> from lightning.pytorch import Trainer >>> from lightning.pytorch.loggers import CSVLogger >>> logger = CSVLogger("logs", name="my_exp_name") >>> trainer = Trainer(logger=logger) + # This will create: + # logs/my_exp_name/version_0/metrics.csv + # logs/my_exp_name/version_0/hparams.yaml (when hyperparams are logged) + + Note: + Logs are saved to ``os.path.join(save_dir, name, version)``. Args: save_dir: Save directory @@ -140,6 +151,13 @@ def save_dir(self) -> str: @override @rank_zero_only def log_hyperparams(self, params: Optional[Union[dict[str, Any], Namespace]] = None) -> None: + """Log hyperparameters to YAML format. + + Hyperparameters are saved to ``hparams.yaml`` in the log directory. + + Args: + params: Dictionary or Namespace containing hyperparameters to log. + """ params = _convert_params(params) self.experiment.log_hparams(params) From d1bdde8f93dd6663aab807bd1af469816e502bf4 Mon Sep 17 00:00:00 2001 From: bhimrazy Date: Tue, 1 Jul 2025 14:24:54 +0545 Subject: [PATCH 2/7] update --- src/lightning/pytorch/loggers/csv_logs.py | 22 ++++++---------------- 1 file changed, 6 insertions(+), 16 deletions(-) diff --git a/src/lightning/pytorch/loggers/csv_logs.py b/src/lightning/pytorch/loggers/csv_logs.py index 638e00c89d1bf..6418ae8c8395c 100644 --- a/src/lightning/pytorch/loggers/csv_logs.py +++ b/src/lightning/pytorch/loggers/csv_logs.py @@ -38,10 +38,8 @@ class ExperimentWriter(_FabricExperimentWriter): r"""Experiment writer for CSVLogger. - Logs hyperparameters to YAML format and metrics to CSV format. - - - **Hyperparameters**: Saved to ``hparams.yaml`` via the ``log_hparams()`` method - - **Metrics**: Saved to ``metrics.csv`` (inherited from parent class) + Currently, supports to log hyperparameters and metrics in YAML and CSV + format, respectively. This logger supports logging to remote filesystems via ``fsspec``. Make sure you have it installed. @@ -64,24 +62,15 @@ def log_hparams(self, params: dict[str, Any]) -> None: class CSVLogger(Logger, FabricCSVLogger): - r"""Log to local file system in YAML and CSV format. - - This logger automatically saves: + r"""Log to local file system in yaml and CSV format. - - **Metrics**: Logged to CSV format in ``metrics.csv`` - - **Hyperparameters**: Logged to YAML format in ``hparams.yaml`` (when ``log_hyperparams()`` is called) + Logs are saved to ``os.path.join(save_dir, name, version)``. Example: >>> from lightning.pytorch import Trainer >>> from lightning.pytorch.loggers import CSVLogger >>> logger = CSVLogger("logs", name="my_exp_name") >>> trainer = Trainer(logger=logger) - # This will create: - # logs/my_exp_name/version_0/metrics.csv - # logs/my_exp_name/version_0/hparams.yaml (when hyperparams are logged) - - Note: - Logs are saved to ``os.path.join(save_dir, name, version)``. Args: save_dir: Save directory @@ -153,7 +142,8 @@ def save_dir(self) -> str: def log_hyperparams(self, params: Optional[Union[dict[str, Any], Namespace]] = None) -> None: """Log hyperparameters to YAML format. - Hyperparameters are saved to ``hparams.yaml`` in the log directory. + Hyperparameters are automatically saved to ``hparams.yaml`` in the log directory. + This is separate from metrics, which are saved to ``metrics.csv`` via ``self.log()``. Args: params: Dictionary or Namespace containing hyperparameters to log. From 391f3ab881e033a8a8d02c5eb4c51dbf1beb39b7 Mon Sep 17 00:00:00 2001 From: bhimrazy Date: Tue, 1 Jul 2025 14:35:18 +0545 Subject: [PATCH 3/7] docs: enhance docstrings for ExperimentWriter and CSVLogger classes --- src/lightning/pytorch/loggers/csv_logs.py | 18 +++++++++++------- 1 file changed, 11 insertions(+), 7 deletions(-) diff --git a/src/lightning/pytorch/loggers/csv_logs.py b/src/lightning/pytorch/loggers/csv_logs.py index 6418ae8c8395c..e48f72eec062b 100644 --- a/src/lightning/pytorch/loggers/csv_logs.py +++ b/src/lightning/pytorch/loggers/csv_logs.py @@ -38,13 +38,12 @@ class ExperimentWriter(_FabricExperimentWriter): r"""Experiment writer for CSVLogger. - Currently, supports to log hyperparameters and metrics in YAML and CSV - format, respectively. + Logs metrics in CSV format and hyperparameters in YAML format. This logger supports logging to remote filesystems via ``fsspec``. Make sure you have it installed. Args: - log_dir: Directory for the experiment logs + log_dir: Directory where experiment logs will be saved. """ @@ -55,14 +54,20 @@ def __init__(self, log_dir: str) -> None: self.hparams: dict[str, Any] = {} def log_hparams(self, params: dict[str, Any]) -> None: - """Record hparams and save into files.""" + """Save hyperparameters to a YAML file in the log directory. + + Args: + params: Dictionary of hyperparameters to log. + """ self.hparams.update(params) hparams_file = os.path.join(self.log_dir, self.NAME_HPARAMS_FILE) save_hparams_to_yaml(hparams_file, self.hparams) class CSVLogger(Logger, FabricCSVLogger): - r"""Log to local file system in yaml and CSV format. + r"""Log to local file system in CSV and YAML format. + + Metrics are logged to CSV format while hyperparameters are logged to YAML format. Logs are saved to ``os.path.join(save_dir, name, version)``. @@ -142,8 +147,7 @@ def save_dir(self) -> str: def log_hyperparams(self, params: Optional[Union[dict[str, Any], Namespace]] = None) -> None: """Log hyperparameters to YAML format. - Hyperparameters are automatically saved to ``hparams.yaml`` in the log directory. - This is separate from metrics, which are saved to ``metrics.csv`` via ``self.log()``. + Hyperparameters are saved to ``hparams.yaml`` in the log directory. Args: params: Dictionary or Namespace containing hyperparameters to log. From e6cecc93db36ca82ee72a39afb39f1032af9d708 Mon Sep 17 00:00:00 2001 From: bhimrazy Date: Tue, 1 Jul 2025 14:42:46 +0545 Subject: [PATCH 4/7] docs: enhance docstring for log_hparams method in CSVLogger class --- src/lightning/pytorch/loggers/csv_logs.py | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/src/lightning/pytorch/loggers/csv_logs.py b/src/lightning/pytorch/loggers/csv_logs.py index e48f72eec062b..52797e13dce07 100644 --- a/src/lightning/pytorch/loggers/csv_logs.py +++ b/src/lightning/pytorch/loggers/csv_logs.py @@ -148,9 +148,16 @@ def log_hyperparams(self, params: Optional[Union[dict[str, Any], Namespace]] = N """Log hyperparameters to YAML format. Hyperparameters are saved to ``hparams.yaml`` in the log directory. + This method is automatically called when using ``self.save_hyperparameters()`` + in your LightningModule, but can also be called manually. Args: params: Dictionary or Namespace containing hyperparameters to log. + + Example: + >>> logger = CSVLogger("logs") + >>> logger.log_hyperparams({"learning_rate": 0.001, "batch_size": 32}) + >>> # This creates logs/lightning_logs/version_0/hparams.yaml """ params = _convert_params(params) self.experiment.log_hparams(params) From 1fc44a77ad2d3dc3b22bfa27e00ca44f4664c8d2 Mon Sep 17 00:00:00 2001 From: bhimrazy Date: Tue, 1 Jul 2025 14:42:59 +0545 Subject: [PATCH 5/7] docs: enhance docstring for log_hparams method in ExperimentWriter class --- src/lightning/pytorch/loggers/csv_logs.py | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/lightning/pytorch/loggers/csv_logs.py b/src/lightning/pytorch/loggers/csv_logs.py index 52797e13dce07..e26e9b2450962 100644 --- a/src/lightning/pytorch/loggers/csv_logs.py +++ b/src/lightning/pytorch/loggers/csv_logs.py @@ -56,6 +56,9 @@ def __init__(self, log_dir: str) -> None: def log_hparams(self, params: dict[str, Any]) -> None: """Save hyperparameters to a YAML file in the log directory. + This method updates the internal hyperparameters dictionary and saves + all hyperparameters to ``hparams.yaml`` in the log directory. + Args: params: Dictionary of hyperparameters to log. """ From a36955aac6c8958752b157ffa840a45ff0701124 Mon Sep 17 00:00:00 2001 From: bhimrazy Date: Tue, 1 Jul 2025 14:48:26 +0545 Subject: [PATCH 6/7] docs: enhance docstring for CSVLogger class with detailed usage examples and file structure --- src/lightning/pytorch/loggers/csv_logs.py | 57 ++++++++++++++++++++--- 1 file changed, 51 insertions(+), 6 deletions(-) diff --git a/src/lightning/pytorch/loggers/csv_logs.py b/src/lightning/pytorch/loggers/csv_logs.py index e26e9b2450962..88b88f5fcf158 100644 --- a/src/lightning/pytorch/loggers/csv_logs.py +++ b/src/lightning/pytorch/loggers/csv_logs.py @@ -70,15 +70,60 @@ def log_hparams(self, params: dict[str, Any]) -> None: class CSVLogger(Logger, FabricCSVLogger): r"""Log to local file system in CSV and YAML format. - Metrics are logged to CSV format while hyperparameters are logged to YAML format. + **Metrics** (from ``self.log()`` calls) are logged to CSV format while **hyperparameters** + (from ``self.log_hyperparams()`` or ``self.save_hyperparameters()``) are logged to YAML format. - Logs are saved to ``os.path.join(save_dir, name, version)``. + Logs are saved to ``os.path.join(save_dir, name, version)``. The CSV file is named ``metrics.csv`` + and the YAML file is named ``hparams.yaml``. + + This logger supports logging to remote filesystems via ``fsspec``. Make sure you have it installed. Example: - >>> from lightning.pytorch import Trainer - >>> from lightning.pytorch.loggers import CSVLogger - >>> logger = CSVLogger("logs", name="my_exp_name") - >>> trainer = Trainer(logger=logger) + + .. code-block:: python + + from lightning.pytorch import Trainer + from lightning.pytorch.loggers import CSVLogger + + # Basic usage + logger = CSVLogger("logs", name="my_exp_name") + trainer = Trainer(logger=logger) + + Use the logger anywhere in your :class:`~lightning.pytorch.core.LightningModule` as follows: + + .. code-block:: python + + import torch + from lightning.pytorch import LightningModule + + class LitModel(LightningModule): + def __init__(self, learning_rate=0.001, batch_size=32): + super().__init__() + # This will log hyperparameters to hparams.yaml + self.save_hyperparameters() + + def training_step(self, batch, batch_idx): + loss = self.compute_loss(batch) + # This will log metrics to metrics.csv + self.log("train_loss", loss) + return loss + + def configure_optimizers(self): + return torch.optim.Adam(self.parameters(), lr=self.hparams.learning_rate) + + You can also manually log hyperparameters: + + .. code-block:: python + + # Log additional hyperparameters manually + logger.log_hyperparams({"dropout": 0.2, "optimizer": "adam"}) + + **File Structure:** + + The logger creates the following files in the log directory: + + - ``metrics.csv``: Contains metrics from ``self.log()`` calls + - ``hparams.yaml``: Contains hyperparameters from ``self.save_hyperparameters()`` or ``self.log_hyperparams()`` Args: save_dir: Save directory From e13ab061b7a426170d1de800d01246c4617836e0 Mon Sep 17 00:00:00 2001 From: "pre-commit-ci[bot]" <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Tue, 1 Jul 2025 09:08:44 +0000 Subject: [PATCH 7/7] [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci --- src/lightning/pytorch/loggers/csv_logs.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/lightning/pytorch/loggers/csv_logs.py b/src/lightning/pytorch/loggers/csv_logs.py index 88b88f5fcf158..08c43b0376330 100644 --- a/src/lightning/pytorch/loggers/csv_logs.py +++ b/src/lightning/pytorch/loggers/csv_logs.py @@ -61,6 +61,7 @@ def log_hparams(self, params: dict[str, Any]) -> None: Args: params: Dictionary of hyperparameters to log. + """ self.hparams.update(params) hparams_file = os.path.join(self.log_dir, self.NAME_HPARAMS_FILE) @@ -206,6 +207,7 @@ def log_hyperparams(self, params: Optional[Union[dict[str, Any], Namespace]] = N >>> logger = CSVLogger("logs") >>> logger.log_hyperparams({"learning_rate": 0.001, "batch_size": 32}) >>> # This creates logs/lightning_logs/version_0/hparams.yaml + """ params = _convert_params(params) self.experiment.log_hparams(params)