Skip to content

Commit 72f1976

Browse files
remove duplicate metric vs step log for train loop (#4173)
* remove duplicate metric vs step log * remove duplicate metric vs step log * remove duplicate metric vs step log * fix ddp index issue
1 parent f976e85 commit 72f1976

File tree

4 files changed

+21
-14
lines changed

4 files changed

+21
-14
lines changed

pytorch_lightning/trainer/training_loop.py

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -477,13 +477,18 @@ def _track_gradient_norm(self):
477477
def log_training_step_metrics(self, opt_closure_result, batch_callback_metrics, batch_log_metrics):
478478
# track callback metrics
479479
callback_metrics = opt_closure_result.training_step_output.callback_metrics
480-
batch_callback_metrics.append(callback_metrics)
481480

482481
# decide which metrics to log (results vs dict return)
483482
using_results_obj = isinstance(opt_closure_result.training_step_output, Result)
484483
if using_results_obj:
485-
metrics_to_log = opt_closure_result.training_step_output.batch_log_metrics
486-
step_pbar_metrics = opt_closure_result.training_step_output.batch_pbar_metrics
484+
metrics_to_log = opt_closure_result.training_step_output.get_batch_log_metrics(
485+
include_forked_originals=False
486+
)
487+
step_pbar_metrics = opt_closure_result.training_step_output.get_batch_pbar_metrics(
488+
include_forked_originals=False
489+
)
490+
forked_metrics = opt_closure_result.training_step_output.get_forked_metrics()
491+
callback_metrics.update(forked_metrics)
487492
else:
488493
metrics_to_log = opt_closure_result.training_step_output.log_metrics
489494
step_pbar_metrics = opt_closure_result.training_step_output.pbar_on_batch_end
@@ -496,6 +501,8 @@ def log_training_step_metrics(self, opt_closure_result, batch_callback_metrics,
496501
self.trainer.logger_connector.add_progress_bar_metrics(step_pbar_metrics)
497502
self.trainer.logger_connector.callback_metrics.update(step_pbar_metrics)
498503

504+
batch_callback_metrics.append(callback_metrics)
505+
499506
def process_hiddens(self, opt_closure_result):
500507
hiddens = opt_closure_result.hiddens
501508
if isinstance(opt_closure_result.training_step_output, Result):

tests/trainer/logging/test_eval_loop_logging_1_0.py

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -64,7 +64,6 @@ def backward(self, loss, optimizer, optimizer_idx):
6464

6565
# make sure all the metrics are available for callbacks
6666
expected_logged_metrics = {
67-
'a',
6867
'a2',
6968
'a_step',
7069
'a_epoch',
@@ -137,7 +136,6 @@ def backward(self, loss, optimizer, optimizer_idx):
137136
expected_logged_metrics = {
138137
'epoch',
139138
'a',
140-
'b',
141139
'b_step',
142140
'b_epoch',
143141
'c',

tests/trainer/logging/test_train_loop_logging_1_0.py

Lines changed: 10 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@
1919
import torch
2020
import pytest
2121

22-
from pytorch_lightning import Trainer
22+
from pytorch_lightning import Trainer, callbacks
2323
from tests.base.deterministic_model import DeterministicModel
2424
from torch.utils.data import Dataset
2525

@@ -80,6 +80,7 @@ def backward(self, loss, optimizer, optimizer_idx):
8080
max_epochs=2,
8181
log_every_n_steps=1,
8282
weights_summary=None,
83+
checkpoint_callback=callbacks.ModelCheckpoint(monitor='l_se')
8384
)
8485
trainer.fit(model)
8586

@@ -95,7 +96,6 @@ def backward(self, loss, optimizer, optimizer_idx):
9596
'default',
9697
'l_e',
9798
'l_s',
98-
'l_se',
9999
'l_se_step',
100100
'l_se_epoch',
101101
}
@@ -105,7 +105,6 @@ def backward(self, loss, optimizer, optimizer_idx):
105105
expected_pbar_metrics = {
106106
'p_e',
107107
'p_s',
108-
'p_se',
109108
'p_se_step',
110109
'p_se_epoch',
111110
}
@@ -116,6 +115,7 @@ def backward(self, loss, optimizer, optimizer_idx):
116115
expected_callback_metrics = set()
117116
expected_callback_metrics = expected_callback_metrics.union(logged_metrics)
118117
expected_callback_metrics = expected_callback_metrics.union(pbar_metrics)
118+
expected_callback_metrics.update({'p_se', 'l_se'})
119119
expected_callback_metrics.remove('epoch')
120120
assert callback_metrics == expected_callback_metrics
121121

@@ -163,7 +163,7 @@ def backward(self, loss, optimizer, optimizer_idx):
163163

164164
# make sure all the metrics are available for callbacks
165165
logged_metrics = set(trainer.logged_metrics.keys())
166-
expected_logged_metrics = {'epoch', 'a', 'a_step', 'a_epoch', 'b', 'b1', 'a1', 'a2'}
166+
expected_logged_metrics = {'epoch', 'a_step', 'a_epoch', 'b', 'b1', 'a1', 'a2'}
167167
assert logged_metrics == expected_logged_metrics
168168

169169
pbar_metrics = set(trainer.progress_bar_metrics.keys())
@@ -178,6 +178,7 @@ def backward(self, loss, optimizer, optimizer_idx):
178178
expected_callback_metrics = expected_callback_metrics.union(logged_metrics)
179179
expected_callback_metrics = expected_callback_metrics.union(pbar_metrics)
180180
expected_callback_metrics.remove('epoch')
181+
expected_callback_metrics.add('a')
181182
assert callback_metrics == expected_callback_metrics
182183

183184

@@ -226,23 +227,24 @@ def training_epoch_end(self, outputs):
226227
# make sure all the metrics are available for callbacks
227228
logged_metrics = set(trainer.logged_metrics.keys())
228229
expected_logged_metrics = {
229-
'a', 'a_step', 'a_epoch',
230-
'b', 'b_step', 'b_epoch',
230+
'a_step', 'a_epoch',
231+
'b_step', 'b_epoch',
231232
'c',
232233
'd/e/f',
233234
'epoch'
234235
}
235236
assert logged_metrics == expected_logged_metrics
236237

237238
pbar_metrics = set(trainer.progress_bar_metrics.keys())
238-
expected_pbar_metrics = {'b', 'c', 'b_epoch', 'b_step'}
239+
expected_pbar_metrics = {'c', 'b_epoch', 'b_step'}
239240
assert pbar_metrics == expected_pbar_metrics
240241

241242
callback_metrics = set(trainer.callback_metrics.keys())
242243
callback_metrics.remove('debug_epoch')
243244
expected_callback_metrics = set()
244245
expected_callback_metrics = expected_callback_metrics.union(logged_metrics)
245246
expected_callback_metrics = expected_callback_metrics.union(pbar_metrics)
247+
expected_callback_metrics.update({'a', 'b'})
246248
expected_callback_metrics.remove('epoch')
247249
assert callback_metrics == expected_callback_metrics
248250

@@ -355,7 +357,7 @@ def train_dataloader(self):
355357
trainer.fit(model)
356358

357359
generated = set(trainer.logged_metrics.keys())
358-
expected = {'a', 'a_step', 'a_epoch', 'epoch'}
360+
expected = {'a_step', 'a_epoch', 'epoch'}
359361
assert generated == expected
360362

361363

tests/trainer/optimization/test_manual_optimization.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -213,7 +213,7 @@ def configure_optimizers(self):
213213
num_manual_backward_calls = 3
214214
assert trainer.dev_debugger.count_events('backward_call') == limit_train_batches * num_manual_backward_calls
215215

216-
expected = {'a', 'a_step', 'a_epoch', 'epoch'}
216+
expected = {'a_step', 'a_epoch', 'epoch'}
217217
logged = set(trainer.logged_metrics.keys())
218218
assert expected == logged
219219

0 commit comments

Comments
 (0)