10
10
11
11
try :
12
12
from comet_ml import Experiment as CometExperiment
13
+ from comet_ml import ExistingExperiment as CometExistingExperiment
13
14
from comet_ml import OfflineExperiment as CometOfflineExperiment
14
15
try :
15
16
from comet_ml .api import API
@@ -33,7 +34,8 @@ class CometLogger(LightningLoggerBase):
33
34
"""
34
35
35
36
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 ):
37
39
r"""
38
40
39
41
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,
100
102
101
103
self .workspace = workspace
102
104
self .project_name = project_name
105
+ self .experiment_key = experiment_key
103
106
self ._kwargs = kwargs
104
107
105
108
if rest_api_key is not None :
@@ -131,12 +134,22 @@ def experiment(self):
131
134
return self ._experiment
132
135
133
136
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
+ )
140
153
else :
141
154
self ._experiment = CometOfflineExperiment (
142
155
offline_directory = self .save_dir ,
@@ -160,9 +173,21 @@ def log_metrics(self, metrics, step=None):
160
173
161
174
self .experiment .log_metrics (metrics , step = step )
162
175
176
+ def reset_experiment (self ):
177
+ self ._experiment = None
178
+
163
179
@rank_zero_only
164
180
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
+ """
165
189
self .experiment .end ()
190
+ self .reset_experiment ()
166
191
167
192
@property
168
193
def name (self ):
0 commit comments