Skip to content

Commit 538c58f

Browse files
authored
Expose metric names in logger setup helpers (#3772)
Fixes #829. ## Summary - add `trainer_metric_names` and `evaluator_metric_names` options to the simplified logger setup helpers - keep the existing default behavior of logging `metric_names="all"` - allow users to filter out unsupported metrics such as 2D `ConfusionMatrix` tensors when using `setup_tb_logging` ## Tests - `python -m ruff format ignite/handlers/logger_utils.py tests/ignite/contrib/handlers/test_logger_utils.py` - `python -m ruff check ignite/handlers/logger_utils.py tests/ignite/contrib/handlers/test_logger_utils.py` - `python -m pytest tests/ignite/contrib/handlers/test_logger_utils.py::test__setup_logging_metric_names tests/ignite/contrib/handlers/test_logger_utils.py::test_setup_tb_logging tests/ignite/contrib/handlers/test_logger_utils.py::test_setup_tb_logging_evaluator_metric_names_filter_tensor_metrics`
1 parent af73c61 commit 538c58f

2 files changed

Lines changed: 200 additions & 11 deletions

File tree

ignite/handlers/logger_utils.py

Lines changed: 150 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -29,13 +29,18 @@
2929
"setup_trains_logging",
3030
]
3131

32+
_MetricNames = str | list[str]
33+
3234

3335
def _setup_logging(
3436
logger: BaseLogger,
3537
trainer: Engine,
3638
optimizers: Optimizer | dict[str, Optimizer] | dict[None, Optimizer] | None,
3739
evaluators: Engine | dict[str, Engine] | None,
3840
log_every_iters: int,
41+
*,
42+
trainer_metric_names: _MetricNames = "all",
43+
evaluator_metric_names: _MetricNames = "all",
3944
) -> None:
4045
if optimizers is not None:
4146
if not isinstance(optimizers, (Optimizer, Mapping)):
@@ -49,7 +54,10 @@ def _setup_logging(
4954
log_every_iters = 1
5055

5156
logger.attach_output_handler(
52-
trainer, event_name=Events.ITERATION_COMPLETED(every=log_every_iters), tag="training", metric_names="all"
57+
trainer,
58+
event_name=Events.ITERATION_COMPLETED(every=log_every_iters),
59+
tag="training",
60+
metric_names=trainer_metric_names,
5361
)
5462

5563
if optimizers is not None:
@@ -71,7 +79,11 @@ def _setup_logging(
7179
gst = global_step_from_engine(trainer, custom_event_name=event_name)
7280
for k, evaluator in evaluators.items():
7381
logger.attach_output_handler(
74-
evaluator, event_name=Events.COMPLETED, tag=k, metric_names="all", global_step_transform=gst
82+
evaluator,
83+
event_name=Events.COMPLETED,
84+
tag=k,
85+
metric_names=evaluator_metric_names,
86+
global_step_transform=gst,
7587
)
7688

7789

@@ -81,6 +93,9 @@ def setup_tb_logging(
8193
optimizers: Optimizer | dict[str, Optimizer] | None = None,
8294
evaluators: Engine | dict[str, Engine] | None = None,
8395
log_every_iters: int = 100,
96+
*,
97+
trainer_metric_names: _MetricNames = "all",
98+
evaluator_metric_names: _MetricNames = "all",
8499
**kwargs: Any,
85100
) -> TensorboardLogger:
86101
"""Method to setup TensorBoard logging on trainer and a list of evaluators. Logged metrics are:
@@ -98,8 +113,13 @@ def setup_tb_logging(
98113
keys are used as tags arguments for logging.
99114
log_every_iters: interval for loggers attached to iteration events. To log every iteration,
100115
value can be set to 1 or None.
116+
trainer_metric_names: list of trainer metric names to plot or a string "all" to plot all available metrics.
117+
evaluator_metric_names: list of evaluator metric names to plot or a string "all" to plot all available metrics.
101118
kwargs: optional keyword args to be passed to construct the logger.
102119
120+
.. versionchanged:: 0.6.0
121+
Added ``trainer_metric_names`` and ``evaluator_metric_names`` parameters.
122+
103123
Returns:
104124
:class:`~ignite.handlers.tensorboard_logger.TensorboardLogger`
105125
@@ -120,7 +140,15 @@ def setup_tb_logging(
120140
tb_logger.close()
121141
"""
122142
logger = TensorboardLogger(log_dir=output_path, **kwargs)
123-
_setup_logging(logger, trainer, optimizers, evaluators, log_every_iters)
143+
_setup_logging(
144+
logger,
145+
trainer,
146+
optimizers,
147+
evaluators,
148+
log_every_iters,
149+
trainer_metric_names=trainer_metric_names,
150+
evaluator_metric_names=evaluator_metric_names,
151+
)
124152
return logger
125153

126154

@@ -129,6 +157,9 @@ def setup_visdom_logging(
129157
optimizers: Optimizer | dict[str, Optimizer] | None = None,
130158
evaluators: Engine | dict[str, Engine] | None = None,
131159
log_every_iters: int = 100,
160+
*,
161+
trainer_metric_names: _MetricNames = "all",
162+
evaluator_metric_names: _MetricNames = "all",
132163
**kwargs: Any,
133164
) -> VisdomLogger:
134165
"""Method to setup Visdom logging on trainer and a list of evaluators. Logged metrics are:
@@ -150,8 +181,13 @@ def setup_visdom_logging(
150181
keys are used as tags arguments for logging.
151182
log_every_iters: interval for loggers attached to iteration events. To log every iteration,
152183
value can be set to 1 or None.
184+
trainer_metric_names: list of trainer metric names to plot or a string "all" to plot all available metrics.
185+
evaluator_metric_names: list of evaluator metric names to plot or a string "all" to plot all available metrics.
153186
kwargs: optional keyword args to be passed to construct the logger.
154187
188+
.. versionchanged:: 0.6.0
189+
Added ``trainer_metric_names`` and ``evaluator_metric_names`` parameters.
190+
155191
Returns:
156192
:class:`~ignite.handlers.visdom_logger.VisdomLogger`
157193
@@ -171,7 +207,15 @@ def setup_visdom_logging(
171207
vd_logger.close()
172208
"""
173209
logger = VisdomLogger(**kwargs)
174-
_setup_logging(logger, trainer, optimizers, evaluators, log_every_iters)
210+
_setup_logging(
211+
logger,
212+
trainer,
213+
optimizers,
214+
evaluators,
215+
log_every_iters,
216+
trainer_metric_names=trainer_metric_names,
217+
evaluator_metric_names=evaluator_metric_names,
218+
)
175219
return logger
176220

177221

@@ -180,6 +224,9 @@ def setup_mlflow_logging(
180224
optimizers: Optimizer | dict[str, Optimizer] | None = None,
181225
evaluators: Engine | dict[str, Engine] | None = None,
182226
log_every_iters: int = 100,
227+
*,
228+
trainer_metric_names: _MetricNames = "all",
229+
evaluator_metric_names: _MetricNames = "all",
183230
**kwargs: Any,
184231
) -> MLflowLogger:
185232
"""Method to setup MLflow logging on trainer and a list of evaluators. Logged metrics are:
@@ -196,8 +243,13 @@ def setup_mlflow_logging(
196243
keys are used as tags arguments for logging.
197244
log_every_iters: interval for loggers attached to iteration events. To log every iteration,
198245
value can be set to 1 or None.
246+
trainer_metric_names: list of trainer metric names to plot or a string "all" to plot all available metrics.
247+
evaluator_metric_names: list of evaluator metric names to plot or a string "all" to plot all available metrics.
199248
kwargs: optional keyword args to be passed to construct the logger.
200249
250+
.. versionchanged:: 0.6.0
251+
Added ``trainer_metric_names`` and ``evaluator_metric_names`` parameters.
252+
201253
Returns:
202254
:class:`~ignite.handlers.mlflow_logger.MLflowLogger`
203255
@@ -217,7 +269,15 @@ def setup_mlflow_logging(
217269
mlflow_logger.close()
218270
"""
219271
logger = MLflowLogger(**kwargs)
220-
_setup_logging(logger, trainer, optimizers, evaluators, log_every_iters)
272+
_setup_logging(
273+
logger,
274+
trainer,
275+
optimizers,
276+
evaluators,
277+
log_every_iters,
278+
trainer_metric_names=trainer_metric_names,
279+
evaluator_metric_names=evaluator_metric_names,
280+
)
221281
return logger
222282

223283

@@ -226,6 +286,9 @@ def setup_neptune_logging(
226286
optimizers: Optimizer | dict[str, Optimizer] | None = None,
227287
evaluators: Engine | dict[str, Engine] | None = None,
228288
log_every_iters: int = 100,
289+
*,
290+
trainer_metric_names: _MetricNames = "all",
291+
evaluator_metric_names: _MetricNames = "all",
229292
**kwargs: Any,
230293
) -> NeptuneLogger:
231294
"""Method to setup Neptune logging on trainer and a list of evaluators. Logged metrics are:
@@ -242,8 +305,13 @@ def setup_neptune_logging(
242305
keys are used as tags arguments for logging.
243306
log_every_iters: interval for loggers attached to iteration events. To log every iteration,
244307
value can be set to 1 or None.
308+
trainer_metric_names: list of trainer metric names to plot or a string "all" to plot all available metrics.
309+
evaluator_metric_names: list of evaluator metric names to plot or a string "all" to plot all available metrics.
245310
kwargs: optional keyword args to be passed to construct the logger.
246311
312+
.. versionchanged:: 0.6.0
313+
Added ``trainer_metric_names`` and ``evaluator_metric_names`` parameters.
314+
247315
Returns:
248316
:class:`~ignite.handlers.neptune_logger.NeptuneLogger`
249317
@@ -263,7 +331,15 @@ def setup_neptune_logging(
263331
neptune_logger.close()
264332
"""
265333
logger = NeptuneLogger(**kwargs)
266-
_setup_logging(logger, trainer, optimizers, evaluators, log_every_iters)
334+
_setup_logging(
335+
logger,
336+
trainer,
337+
optimizers,
338+
evaluators,
339+
log_every_iters,
340+
trainer_metric_names=trainer_metric_names,
341+
evaluator_metric_names=evaluator_metric_names,
342+
)
267343
return logger
268344

269345

@@ -272,6 +348,9 @@ def setup_wandb_logging(
272348
optimizers: Optimizer | dict[str, Optimizer] | None = None,
273349
evaluators: Engine | dict[str, Engine] | None = None,
274350
log_every_iters: int = 100,
351+
*,
352+
trainer_metric_names: _MetricNames = "all",
353+
evaluator_metric_names: _MetricNames = "all",
275354
**kwargs: Any,
276355
) -> WandBLogger:
277356
"""Method to setup WandB logging on trainer and a list of evaluators. Logged metrics are:
@@ -288,8 +367,13 @@ def setup_wandb_logging(
288367
keys are used as tags arguments for logging.
289368
log_every_iters: interval for loggers attached to iteration events. To log every iteration,
290369
value can be set to 1 or None.
370+
trainer_metric_names: list of trainer metric names to plot or a string "all" to plot all available metrics.
371+
evaluator_metric_names: list of evaluator metric names to plot or a string "all" to plot all available metrics.
291372
kwargs: optional keyword args to be passed to construct the logger.
292373
374+
.. versionchanged:: 0.6.0
375+
Added ``trainer_metric_names`` and ``evaluator_metric_names`` parameters.
376+
293377
Returns:
294378
:class:`~ignite.handlers.wandb_logger.WandBLogger`
295379
@@ -309,7 +393,15 @@ def setup_wandb_logging(
309393
wandb_logger.close()
310394
"""
311395
logger = WandBLogger(**kwargs)
312-
_setup_logging(logger, trainer, optimizers, evaluators, log_every_iters)
396+
_setup_logging(
397+
logger,
398+
trainer,
399+
optimizers,
400+
evaluators,
401+
log_every_iters,
402+
trainer_metric_names=trainer_metric_names,
403+
evaluator_metric_names=evaluator_metric_names,
404+
)
313405
return logger
314406

315407

@@ -318,6 +410,9 @@ def setup_plx_logging(
318410
optimizers: Optimizer | dict[str, Optimizer] | None = None,
319411
evaluators: Engine | dict[str, Engine] | None = None,
320412
log_every_iters: int = 100,
413+
*,
414+
trainer_metric_names: _MetricNames = "all",
415+
evaluator_metric_names: _MetricNames = "all",
321416
**kwargs: Any,
322417
) -> PolyaxonLogger:
323418
"""Method to setup Polyaxon logging on trainer and a list of evaluators. Logged metrics are:
@@ -334,8 +429,13 @@ def setup_plx_logging(
334429
keys are used as tags arguments for logging.
335430
log_every_iters: interval for loggers attached to iteration events. To log every iteration,
336431
value can be set to 1 or None.
432+
trainer_metric_names: list of trainer metric names to plot or a string "all" to plot all available metrics.
433+
evaluator_metric_names: list of evaluator metric names to plot or a string "all" to plot all available metrics.
337434
kwargs: optional keyword args to be passed to construct the logger.
338435
436+
.. versionchanged:: 0.6.0
437+
Added ``trainer_metric_names`` and ``evaluator_metric_names`` parameters.
438+
339439
Returns:
340440
:class:`~ignite.handlers.polyaxon_logger.PolyaxonLogger`
341441
@@ -355,7 +455,15 @@ def setup_plx_logging(
355455
plx_logger.close()
356456
"""
357457
logger = PolyaxonLogger(**kwargs)
358-
_setup_logging(logger, trainer, optimizers, evaluators, log_every_iters)
458+
_setup_logging(
459+
logger,
460+
trainer,
461+
optimizers,
462+
evaluators,
463+
log_every_iters,
464+
trainer_metric_names=trainer_metric_names,
465+
evaluator_metric_names=evaluator_metric_names,
466+
)
359467
return logger
360468

361469

@@ -364,6 +472,9 @@ def setup_clearml_logging(
364472
optimizers: Optimizer | dict[str, Optimizer] | None = None,
365473
evaluators: Engine | dict[str, Engine] | None = None,
366474
log_every_iters: int = 100,
475+
*,
476+
trainer_metric_names: _MetricNames = "all",
477+
evaluator_metric_names: _MetricNames = "all",
367478
**kwargs: Any,
368479
) -> ClearMLLogger:
369480
"""Method to setup ClearML logging on trainer and a list of evaluators. Logged metrics are:
@@ -380,8 +491,13 @@ def setup_clearml_logging(
380491
keys are used as tags arguments for logging.
381492
log_every_iters: interval for loggers attached to iteration events. To log every iteration,
382493
value can be set to 1 or None.
494+
trainer_metric_names: list of trainer metric names to plot or a string "all" to plot all available metrics.
495+
evaluator_metric_names: list of evaluator metric names to plot or a string "all" to plot all available metrics.
383496
kwargs: optional keyword args to be passed to construct the logger.
384497
498+
.. versionchanged:: 0.6.0
499+
Added ``trainer_metric_names`` and ``evaluator_metric_names`` parameters.
500+
385501
Returns:
386502
:class:`~ignite.handlers.clearml_logger.ClearMLLogger`
387503
@@ -401,7 +517,15 @@ def setup_clearml_logging(
401517
clearml_logger.close()
402518
"""
403519
logger = ClearMLLogger(**kwargs)
404-
_setup_logging(logger, trainer, optimizers, evaluators, log_every_iters)
520+
_setup_logging(
521+
logger,
522+
trainer,
523+
optimizers,
524+
evaluators,
525+
log_every_iters,
526+
trainer_metric_names=trainer_metric_names,
527+
evaluator_metric_names=evaluator_metric_names,
528+
)
405529
return logger
406530

407531

@@ -410,8 +534,23 @@ def setup_trains_logging(
410534
optimizers: Optimizer | dict[str, Optimizer] | None = None,
411535
evaluators: Engine | dict[str, Engine] | None = None,
412536
log_every_iters: int = 100,
537+
*,
538+
trainer_metric_names: _MetricNames = "all",
539+
evaluator_metric_names: _MetricNames = "all",
413540
**kwargs: Any,
414541
) -> ClearMLLogger:
415-
"""``setup_trains_logging`` was renamed to :func:`~ignite.handlers.logger_utils.setup_clearml_logging`."""
542+
"""``setup_trains_logging`` was renamed to :func:`~ignite.handlers.logger_utils.setup_clearml_logging`.
543+
544+
.. versionchanged:: 0.6.0
545+
Added ``trainer_metric_names`` and ``evaluator_metric_names`` parameters.
546+
"""
416547
warnings.warn("setup_trains_logging was renamed to setup_clearml_logging.")
417-
return setup_clearml_logging(trainer, optimizers, evaluators, log_every_iters, **kwargs)
548+
return setup_clearml_logging(
549+
trainer,
550+
optimizers,
551+
evaluators,
552+
log_every_iters,
553+
trainer_metric_names=trainer_metric_names,
554+
evaluator_metric_names=evaluator_metric_names,
555+
**kwargs,
556+
)

0 commit comments

Comments
 (0)