Files
pytorch-lightning/pytorch_lightning/loggers/__init__.py
T
Adrian WälchliandJirka Borovec 6e1d72d98a Improved docs for Loggers (#1484)
* improve __init__

* improve logger base

* improve comet logger docs

* improved docs for mlflow

* improved nepune logger docs

* fix matplotlib import issue

* improve tensorboard docs

* improve docs for test tube

* improved trains logger docs

* improve wandb logger docs

* improved docs in experiment_logging.rst

* added MLflow to the list of loggers

* fix too long lines

* fix trains doctest

* fix neptune doctest

* fix mlflow doctest

* Apply suggestions from code review

Co-Authored-By: Jirka Borovec <Borda@users.noreply.github.com>

* Apply suggestions from code review

* fix whitespace

* try bypass mode for neptune (fix doctest api key error)

* try "test" as api key

* Revert "try "test" as api key"

This reverts commit fd77db26d551f08b4b4a12bb93cbd8f7a0814f29.

* try test as api key

* update neptune docs

* bump neptune minimal version

* revert unnecessary bypass code

* test if CI runs doctests in .rst files

* Revert "test if CI runs doctests in .rst files"

This reverts commit a45aeb460a8c4b7445a35dd7b49265f48d11c485.

* add doctest directive

* neptune demo links

* added tutorial link for W&B

* fix line too long

* fix merge error

* fix merge error

* add instructions how to install loggers

* add instructions how to install the loggers

* hide _abc_impl property from docs

* review Borda, 4 spaces

* indentation in example sections

* blank

Co-authored-by: Jirka Borovec <Borda@users.noreply.github.com>
2020-04-16 12:04:12 -04:00

136 lines
4.2 KiB
Python

"""
Lightning supports the most popular logging frameworks (TensorBoard, Comet, Weights and Biases, etc...).
To use a logger, simply pass it into the :class:`~pytorch_lightning.trainer.trainer.Trainer`.
Lightning uses TensorBoard by default.
>>> from pytorch_lightning import Trainer
>>> from pytorch_lightning import loggers
>>> tb_logger = loggers.TensorBoardLogger('logs/')
>>> trainer = Trainer(logger=tb_logger)
Choose from any of the others such as MLflow, Comet, Neptune, WandB, ...
>>> comet_logger = loggers.CometLogger(save_dir='logs/')
>>> trainer = Trainer(logger=comet_logger)
To use multiple loggers, simply pass in a ``list`` or ``tuple`` of loggers ...
>>> tb_logger = loggers.TensorBoardLogger('logs/')
>>> comet_logger = loggers.CometLogger(save_dir='logs/')
>>> trainer = Trainer(logger=[tb_logger, comet_logger])
Note:
All loggers log by default to ``os.getcwd()``. To change the path without creating a logger set
``Trainer(default_root_dir='/your/path/to/save/checkpoints')``
Custom Logger
-------------
You can implement your own logger by writing a class that inherits from
:class:`LightningLoggerBase`. Use the :func:`~pytorch_lightning.loggers.base.rank_zero_only`
decorator to make sure that only the first process in DDP training logs data.
>>> from pytorch_lightning.loggers import LightningLoggerBase, rank_zero_only
>>> class MyLogger(LightningLoggerBase):
...
... @rank_zero_only
... def log_hyperparams(self, params):
... # params is an argparse.Namespace
... # your code to record hyperparameters goes here
... pass
...
... @rank_zero_only
... def log_metrics(self, metrics, step):
... # metrics is a dictionary of metric names and values
... # your code to record metrics goes here
... pass
...
... def save(self):
... # Optional. Any code necessary to save logger data goes here
... pass
...
... @rank_zero_only
... def finalize(self, status):
... # Optional. Any code that needs to be run after training
... # finishes goes here
... pass
If you write a logger that may be useful to others, please send
a pull request to add it to Lighting!
Using loggers
-------------
Call the logger anywhere except ``__init__`` in your
:class:`~pytorch_lightning.core.lightning.LightningModule` by doing:
>>> from pytorch_lightning import LightningModule
>>> class LitModel(LightningModule):
... def training_step(self, batch, batch_idx):
... # example
... self.logger.experiment.whatever_method_summary_writer_supports(...)
...
... def any_lightning_module_function_or_hook(self):
... self.logger.experiment.add_histogram(...)
Read more in the `Experiment Logging use case <./experiment_logging.html>`_.
Supported Loggers
-----------------
"""
from os import environ
from pytorch_lightning.loggers.base import LightningLoggerBase, LoggerCollection, rank_zero_only
from pytorch_lightning.loggers.tensorboard import TensorBoardLogger
__all__ = [
'LightningLoggerBase',
'LoggerCollection',
'TensorBoardLogger',
]
try:
# needed to prevent ImportError and duplicated logs.
environ["COMET_DISABLE_AUTO_LOGGING"] = "1"
from pytorch_lightning.loggers.comet import CometLogger
except ImportError: # pragma: no-cover
del environ["COMET_DISABLE_AUTO_LOGGING"] # pragma: no-cover
else:
__all__.append('CometLogger')
try:
from pytorch_lightning.loggers.mlflow import MLFlowLogger
except ImportError: # pragma: no-cover
pass # pragma: no-cover
else:
__all__.append('MLFlowLogger')
try:
from pytorch_lightning.loggers.neptune import NeptuneLogger
except ImportError: # pragma: no-cover
pass # pragma: no-cover
else:
__all__.append('NeptuneLogger')
try:
from pytorch_lightning.loggers.test_tube import TestTubeLogger
except ImportError: # pragma: no-cover
pass # pragma: no-cover
else:
__all__.append('TestTubeLogger')
try:
from pytorch_lightning.loggers.wandb import WandbLogger
except ImportError: # pragma: no-cover
pass # pragma: no-cover
else:
__all__.append('WandbLogger')
try:
from pytorch_lightning.loggers.trains import TrainsLogger
except ImportError: # pragma: no-cover
pass # pragma: no-cover
else:
__all__.append('TrainsLogger')