Files
pytorch-lightning/pytorch_lightning/loggers/__init__.py
T
22a7264e9a improve partial Codecov (#1172)
* ignore in setup

* show report

* abs imports

* abstract pass

* cover loggers

* doctest trains

* locals

* pass

* revert tensorboard

* use tensorboardX

* revert tensorboardX

* fix trains

* Add TrainsLogger.set_credentials (#1179)

* Add TrainsLogger.set_credentials to control trains server configuration and authentication from code. Sync trains package version.
Fix CI Trains tests

* Add global TrainsLogger set_bypass_mode (#1187)

* Add global TrainsLogger set_bypass_mode skips all external communication

Co-authored-by: bmartinn <>

* rm some no-cov

Co-authored-by: Martin.B <51887611+bmartinn@users.noreply.github.com>
2020-03-19 09:14:29 -04:00

134 lines
3.9 KiB
Python

"""
Lightning supports most popular logging frameworks (Tensorboard, comet, weights and biases, etc...).
To use a logger, simply pass it into the trainer. To use multiple loggers, simply pass in a ``list``
or ``tuple`` of loggers.
.. code-block:: python
from pytorch_lightning import loggers
# lightning uses tensorboard by default
tb_logger = loggers.TensorBoardLogger()
trainer = Trainer(logger=tb_logger)
# or choose from any of the others such as MLFlow, Comet, Neptune, Wandb
comet_logger = loggers.CometLogger()
trainer = Trainer(logger=comet_logger)
# or pass a list
tb_logger = loggers.TensorBoardLogger()
comet_logger = loggers.CometLogger()
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_save_path='/your/path/to/save/checkpoints')``
Custom logger
-------------
You can implement your own logger by writing a class that inherits from
``LightningLoggerBase``. Use the ``rank_zero_only`` decorator to make sure that
only the first process in DDP training logs data.
.. code-block:: python
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
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 LightningModule by doing:
.. code-block:: python
def train_step(...):
# example
self.logger.experiment.whatever_method_summary_writer_supports(...)
def any_lightning_module_function_or_hook(...):
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__ = ['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')