Skip to content

Commit 38ee66e

Browse files
fdelrio89tullie
authored andcommitted
Fix comet logger to log after train (Lightning-AI#892)
* Fix comet logger to log after train * Add clarifying comment to COmetLogger code Explains the need to use CometExistingExperiment in the CometLogger class after CometLogger.finalize.
1 parent c57fafa commit 38ee66e

File tree

1 file changed

+32
-7
lines changed

1 file changed

+32
-7
lines changed

pytorch_lightning/loggers/comet.py

+32-7
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010

1111
try:
1212
from comet_ml import Experiment as CometExperiment
13+
from comet_ml import ExistingExperiment as CometExistingExperiment
1314
from comet_ml import OfflineExperiment as CometOfflineExperiment
1415
try:
1516
from comet_ml.api import API
@@ -33,7 +34,8 @@ class CometLogger(LightningLoggerBase):
3334
"""
3435

3536
def __init__(self, api_key=None, save_dir=None, workspace=None,
36-
rest_api_key=None, project_name=None, experiment_name=None, **kwargs):
37+
rest_api_key=None, project_name=None, experiment_name=None,
38+
experiment_key=None, **kwargs):
3739
r"""
3840
3941
Requires either an API Key (online mode) or a local directory path (offline mode)
@@ -100,6 +102,7 @@ def __init__(self, api_key=None, save_dir=None, workspace=None,
100102

101103
self.workspace = workspace
102104
self.project_name = project_name
105+
self.experiment_key = experiment_key
103106
self._kwargs = kwargs
104107

105108
if rest_api_key is not None:
@@ -131,12 +134,22 @@ def experiment(self):
131134
return self._experiment
132135

133136
if self.mode == "online":
134-
self._experiment = CometExperiment(
135-
api_key=self.api_key,
136-
workspace=self.workspace,
137-
project_name=self.project_name,
138-
**self._kwargs
139-
)
137+
if self.experiment_key is None:
138+
self._experiment = CometExperiment(
139+
api_key=self.api_key,
140+
workspace=self.workspace,
141+
project_name=self.project_name,
142+
**self._kwargs
143+
)
144+
self.experiment_key = self._experiment.get_key()
145+
else:
146+
self._experiment = CometExistingExperiment(
147+
api_key=self.api_key,
148+
workspace=self.workspace,
149+
project_name=self.project_name,
150+
previous_experiment=self.experiment_key,
151+
**self._kwargs
152+
)
140153
else:
141154
self._experiment = CometOfflineExperiment(
142155
offline_directory=self.save_dir,
@@ -160,9 +173,21 @@ def log_metrics(self, metrics, step=None):
160173

161174
self.experiment.log_metrics(metrics, step=step)
162175

176+
def reset_experiment(self):
177+
self._experiment = None
178+
163179
@rank_zero_only
164180
def finalize(self, status):
181+
r"""
182+
When calling self.experiment.end(), that experiment won't log any more data to Comet. That's why, if you need
183+
to log any more data you need to create an ExistingCometExperiment. For example, to log data when testing your
184+
model after training, because when training is finalized CometLogger.finalize is called.
185+
186+
This happens automatically in the CometLogger.experiment property, when self._experiment is set to None
187+
i.e. self.reset_experiment().
188+
"""
165189
self.experiment.end()
190+
self.reset_experiment()
166191

167192
@property
168193
def name(self):

0 commit comments

Comments
 (0)