Use .comet.config file for CometLogger (#1913)

* Use .comet.config file or env var for API key.

* Make CometLogger API key changes backwards compatible.

* Fix line too long.

* Add documentation about loading from ~/.comet_config.

* Update required comet_ml version.

* Comet logger: allow offline experiments with config file.

This adds a new argument to the logger to control the online / offline mode explicitly so that if you give an API key and a save_dir (e.g. to control where checkpoints go while having ~/.comet.config) you can specify which mode you want.

* Make CometLogger API key changes backwards compatible.

* Comet logger: change online argument to be offline.

For consistency with other loggers.

* chlog

Co-authored-by: Jirka Borovec <jirka@pytorchlightning.ai>
This commit is contained in:
Nathan Hunt 2020-08-07 02:46:50 -05:00 committed by GitHub
parent 4307dd9dc6
commit 234e2b590f
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 29 additions and 11 deletions

View File

@ -41,12 +41,14 @@ The format is based on [Keep a Changelog](http://keepachangelog.com/en/1.0.0/).
- Truncated long version numbers in progress bar ([#2594](https://github.com/PyTorchLightning/pytorch-lightning/pull/2594))
- Enable val/test loop disabling ([#2692](https://github.com/PyTorchLightning/pytorch-lightning/pull/2692))
- Enabling val/test loop disabling ([#2692](https://github.com/PyTorchLightning/pytorch-lightning/pull/2692))
- Refactor into `accelerator` module:
- Refactored into `accelerator` module:
* GPU training ([#2704](https://github.com/PyTorchLightning/pytorch-lightning/pull/2704))
* TPU training ([#2708](https://github.com/PyTorchLightning/pytorch-lightning/pull/2708))
- Using .comet.config file for CometLogger ([#1913](https://github.com/PyTorchLightning/pytorch-lightning/pull/1913))
### Deprecated
- Deprecated Trainer attribute `ckpt_path`, which will now be set by `weights_save_path` ([#2681](https://github.com/PyTorchLightning/pytorch-lightning/pull/2681))

View File

@ -44,7 +44,7 @@ dependencies:
- pip:
- test-tube>=0.7.5
- mlflow>=1.0.0
- comet_ml>=1.0.56
- comet_ml>=3.1.12
- wandb>=0.8.21
- neptune-client>=0.4.109
- horovod>=0.19.1

View File

@ -16,8 +16,7 @@ try:
except ImportError: # pragma: no-cover
# For more information, see: https://www.comet.ml/docs/python-sdk/releases/#release-300
from comet_ml.papi import API # pragma: no-cover
_COMET_AVAILABLE = True
from comet_ml.config import get_config, get_api_key
except ImportError: # pragma: no-cover
CometExperiment = None
CometExistingExperiment = None
@ -25,6 +24,8 @@ except ImportError: # pragma: no-cover
CometBaseExperiment = None
API = None
_COMET_AVAILABLE = False
else:
_COMET_AVAILABLE = True
import torch
@ -78,8 +79,11 @@ class CometLogger(LightningLoggerBase):
>>> trainer = Trainer(logger=comet_logger)
Args:
api_key: Required in online mode. API key, found on Comet.ml
save_dir: Required in offline mode. The path for the directory to save local comet logs
api_key: Required in online mode. API key, found on Comet.ml. If not given, this
will be loaded from the environment variable COMET_API_KEY or ~/.comet.config
if either exists.
save_dir: Required in offline mode. The path for the directory to save local
comet logs. If given, this also sets the directory for saving checkpoints.
workspace: Optional. Name of workspace for this user
project_name: Optional. Send your experiment to a specific project.
Otherwise will be sent to Uncategorized Experiments.
@ -88,6 +92,10 @@ class CometLogger(LightningLoggerBase):
This is used to determine version number
experiment_name: Optional. String representing the name for this particular experiment on Comet.ml.
experiment_key: Optional. If set, restores from existing experiment.
offline: If api_key and save_dir are both given, this determines whether
the experiment will be in online or offline mode. This is useful if you use
save_dir to control the checkpoints directory and have a ~/.comet.config
file but still want to run offline experiments.
"""
def __init__(self,
@ -98,6 +106,7 @@ class CometLogger(LightningLoggerBase):
rest_api_key: Optional[str] = None,
experiment_name: Optional[str] = None,
experiment_key: Optional[str] = None,
offline: bool = False,
**kwargs):
if not _COMET_AVAILABLE:
@ -105,10 +114,15 @@ class CometLogger(LightningLoggerBase):
' install it with `pip install comet-ml`.')
super().__init__()
self._experiment = None
self._save_dir = save_dir
# Determine online or offline mode based on which arguments were passed to CometLogger
if api_key is not None:
api_key = api_key or get_api_key(None, get_config())
if api_key is not None and save_dir is not None:
self.mode = "offline" if offline else "online"
self.api_key = api_key
self._save_dir = save_dir
elif api_key is not None:
self.mode = "online"
self.api_key = api_key
elif save_dir is not None:
@ -116,7 +130,9 @@ class CometLogger(LightningLoggerBase):
self._save_dir = save_dir
else:
# If neither api_key nor save_dir are passed as arguments, raise an exception
raise MisconfigurationException("CometLogger requires either api_key or save_dir during initialization.")
raise MisconfigurationException(
"CometLogger requires either api_key or save_dir during initialization."
)
log.info(f"CometLogger will be initialized in {self.mode} mode")

View File

@ -1,7 +1,7 @@
# extended list of package dependencies to reach full functionality
neptune-client>=0.4.109
comet-ml>=1.0.56
comet-ml>=3.1.12
mlflow>=1.0.0
test_tube>=0.7.5
wandb>=0.8.21