From 602f17b456c83a58147606745b319de047bf0fed Mon Sep 17 00:00:00 2001 From: Nicki Skafte Date: Thu, 21 Aug 2025 08:17:42 +0200 Subject: [PATCH 1/6] add docstring --- src/lightning/pytorch/loggers/tensorboard.py | 31 ++++++++++++++++++-- 1 file changed, 29 insertions(+), 2 deletions(-) diff --git a/src/lightning/pytorch/loggers/tensorboard.py b/src/lightning/pytorch/loggers/tensorboard.py index f9cc41c67045c..17e2fcfef75a6 100644 --- a/src/lightning/pytorch/loggers/tensorboard.py +++ b/src/lightning/pytorch/loggers/tensorboard.py @@ -18,13 +18,13 @@ import os from argparse import Namespace -from typing import Any, Optional, Union +from typing import TYPE_CHECKING, Any, Optional, Union +from lightning_utilities.core.imports import RequirementCache from torch import Tensor from typing_extensions import override import lightning.pytorch as pl -from lightning.fabric.loggers.tensorboard import _TENSORBOARD_AVAILABLE from lightning.fabric.loggers.tensorboard import TensorBoardLogger as FabricTensorBoardLogger from lightning.fabric.utilities.cloud_io import _is_dir from lightning.fabric.utilities.logger import _convert_params @@ -35,6 +35,14 @@ from lightning.pytorch.utilities.imports import _OMEGACONF_AVAILABLE from lightning.pytorch.utilities.rank_zero import rank_zero_only, rank_zero_warn +_TENSORBOARD_AVAILABLE = RequirementCache("tensorboard") +if TYPE_CHECKING: + # assumes at least one will be installed when type checking + if _TENSORBOARD_AVAILABLE: + from torch.utils.tensorboard import SummaryWriter + else: + from tensorboardX import SummaryWriter # type: ignore[no-redef] + class TensorBoardLogger(Logger, FabricTensorBoardLogger): r"""Log to local or remote file system in `TensorBoard `_ format. @@ -260,3 +268,22 @@ def _get_next_version(self) -> int: return 0 return max(existing_versions) + 1 + + @property + @override + @rank_zero_only + def experiment(self) -> "SummaryWriter": + """Returns the underlying TensorBoard summary writer object. To use TensorBoard features anywhere in your code, + do the following. + + Example:: + + class LitModel(LightningModule): + def training_step(self, batch, batch_idx): + # log a image + self.logger.experiment.add_image('my_image', batch['image'], self.global_step) + # log a histogram + self.logger.experiment.add_histogram('my_histogram', batch['data'], self.global + + """ + return super().experiment From d7ef5af46c5dee0d5158fcceabed6ed87634b1aa Mon Sep 17 00:00:00 2001 From: Nicki Skafte Date: Thu, 21 Aug 2025 08:24:12 +0200 Subject: [PATCH 2/6] add docstring --- src/lightning/fabric/loggers/tensorboard.py | 12 ++++++++++-- src/lightning/pytorch/loggers/tensorboard.py | 8 +++++--- 2 files changed, 15 insertions(+), 5 deletions(-) diff --git a/src/lightning/fabric/loggers/tensorboard.py b/src/lightning/fabric/loggers/tensorboard.py index 208244dc38cd3..5ada282b675de 100644 --- a/src/lightning/fabric/loggers/tensorboard.py +++ b/src/lightning/fabric/loggers/tensorboard.py @@ -173,11 +173,19 @@ def sub_dir(self) -> Optional[str]: @property @rank_zero_experiment def experiment(self) -> "SummaryWriter": - """Actual tensorboard object. To use TensorBoard features anywhere in your code, do the following. + """Returns the underlying TensorBoard summary writer object. Allows you to use TensorBoard logging features + directly in your :class:`~lightning.pytorch.core.LightningModule` or anywhere else in your code with: + + `logger.experiment.some_tensorboard_function()` Example:: - logger.experiment.some_tensorboard_function() + class LitModel(LightningModule): + def training_step(self, batch, batch_idx): + # log a image + self.logger.experiment.add_image('my_image', batch['image'], self.global_step) + # log a histogram + self.logger.experiment.add_histogram('my_histogram', batch['data'], self.global_step) """ if self._experiment is not None: diff --git a/src/lightning/pytorch/loggers/tensorboard.py b/src/lightning/pytorch/loggers/tensorboard.py index 17e2fcfef75a6..eaee6d3894ff7 100644 --- a/src/lightning/pytorch/loggers/tensorboard.py +++ b/src/lightning/pytorch/loggers/tensorboard.py @@ -273,8 +273,10 @@ def _get_next_version(self) -> int: @override @rank_zero_only def experiment(self) -> "SummaryWriter": - """Returns the underlying TensorBoard summary writer object. To use TensorBoard features anywhere in your code, - do the following. + """Returns the underlying TensorBoard summary writer object. Allows you to use TensorBoard logging features + directly in your :class:`~lightning.pytorch.core.LightningModule` or anywhere else in your code with: + + `logger.experiment.some_tensorboard_function()` Example:: @@ -283,7 +285,7 @@ def training_step(self, batch, batch_idx): # log a image self.logger.experiment.add_image('my_image', batch['image'], self.global_step) # log a histogram - self.logger.experiment.add_histogram('my_histogram', batch['data'], self.global + self.logger.experiment.add_histogram('my_histogram', batch['data'], self.global_step) """ return super().experiment From 47b5feeef87e4f6b55a9a58963b246b9107eb7f9 Mon Sep 17 00:00:00 2001 From: Nicki Skafte Date: Fri, 22 Aug 2025 08:16:52 +0200 Subject: [PATCH 3/6] change to rank_zero_experiment decorator --- src/lightning/pytorch/loggers/tensorboard.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/lightning/pytorch/loggers/tensorboard.py b/src/lightning/pytorch/loggers/tensorboard.py index eaee6d3894ff7..4f1d68c91a9e2 100644 --- a/src/lightning/pytorch/loggers/tensorboard.py +++ b/src/lightning/pytorch/loggers/tensorboard.py @@ -25,6 +25,7 @@ from typing_extensions import override import lightning.pytorch as pl +from lightning.fabric.loggers.logger import rank_zero_experiment from lightning.fabric.loggers.tensorboard import TensorBoardLogger as FabricTensorBoardLogger from lightning.fabric.utilities.cloud_io import _is_dir from lightning.fabric.utilities.logger import _convert_params @@ -271,7 +272,7 @@ def _get_next_version(self) -> int: @property @override - @rank_zero_only + @rank_zero_experiment def experiment(self) -> "SummaryWriter": """Returns the underlying TensorBoard summary writer object. Allows you to use TensorBoard logging features directly in your :class:`~lightning.pytorch.core.LightningModule` or anywhere else in your code with: From f7fe54b06454befc1356edb8b4a6d3e820c5a02d Mon Sep 17 00:00:00 2001 From: Nicki Skafte Date: Mon, 25 Aug 2025 14:04:00 +0200 Subject: [PATCH 4/6] try fixing doc build --- src/lightning/pytorch/loggers/tensorboard.py | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/src/lightning/pytorch/loggers/tensorboard.py b/src/lightning/pytorch/loggers/tensorboard.py index 4f1d68c91a9e2..6a62c555c5201 100644 --- a/src/lightning/pytorch/loggers/tensorboard.py +++ b/src/lightning/pytorch/loggers/tensorboard.py @@ -274,11 +274,17 @@ def _get_next_version(self) -> int: @override @rank_zero_experiment def experiment(self) -> "SummaryWriter": - """Returns the underlying TensorBoard summary writer object. Allows you to use TensorBoard logging features - directly in your :class:`~lightning.pytorch.core.LightningModule` or anywhere else in your code with: + """Returns the underlying TensorBoard summary writer object. + + Allows you to use TensorBoard logging features directly in your + :class:`~lightning.pytorch.core.LightningModule` or anywhere else in your code with: `logger.experiment.some_tensorboard_function()` + Returns: + The :class:`torch.utils.tensorboard.SummaryWriter` or :class:`tensorboardX.SummaryWriter` + depending on which is available. + Example:: class LitModel(LightningModule): From adcfeb34163896d0045877ee3bb7f5129a3a195c Mon Sep 17 00:00:00 2001 From: Nicki Skafte Date: Mon, 1 Sep 2025 14:53:44 +0200 Subject: [PATCH 5/6] try fixing --- src/lightning/pytorch/loggers/tensorboard.py | 4 ---- 1 file changed, 4 deletions(-) diff --git a/src/lightning/pytorch/loggers/tensorboard.py b/src/lightning/pytorch/loggers/tensorboard.py index 6a62c555c5201..55ead4e694b18 100644 --- a/src/lightning/pytorch/loggers/tensorboard.py +++ b/src/lightning/pytorch/loggers/tensorboard.py @@ -281,10 +281,6 @@ def experiment(self) -> "SummaryWriter": `logger.experiment.some_tensorboard_function()` - Returns: - The :class:`torch.utils.tensorboard.SummaryWriter` or :class:`tensorboardX.SummaryWriter` - depending on which is available. - Example:: class LitModel(LightningModule): From c9bfbb053ca0a043d882b26ac516097d913b43b4 Mon Sep 17 00:00:00 2001 From: Nicki Skafte Date: Tue, 2 Sep 2025 06:55:36 +0200 Subject: [PATCH 6/6] add requirement --- requirements/pytorch/docs.txt | 1 + 1 file changed, 1 insertion(+) diff --git a/requirements/pytorch/docs.txt b/requirements/pytorch/docs.txt index 80bd25909157d..9a0b0978ee319 100644 --- a/requirements/pytorch/docs.txt +++ b/requirements/pytorch/docs.txt @@ -5,5 +5,6 @@ ipython[notebook] <9.5.0 setuptools<81.0 # workaround for `error in ipython setup command: use_2to3 is invalid.` onnxscript >= 0.2.2, <0.4.0 +tensorboard #-r ../../_notebooks/.actions/requires.txt