Skip to content
GitLab
Menu
Projects
Groups
Snippets
Loading...
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
Menu
Open sidebar
OpenDAS
MMCV
Commits
94c071b3
Unverified
Commit
94c071b3
authored
Apr 24, 2022
by
Artem
Committed by
GitHub
Apr 24, 2022
Browse files
[Feature] Add ClearMLLoggerHook (#1906)
* added clearml logger support * review fixes * review fixes
parent
4fb59b98
Changes
5
Show whitespace changes
Inline
Side-by-side
Showing
5 changed files
with
102 additions
and
11 deletions
+102
-11
mmcv/runner/__init__.py
mmcv/runner/__init__.py
+5
-4
mmcv/runner/hooks/__init__.py
mmcv/runner/hooks/__init__.py
+5
-4
mmcv/runner/hooks/logger/__init__.py
mmcv/runner/hooks/logger/__init__.py
+3
-1
mmcv/runner/hooks/logger/clearml.py
mmcv/runner/hooks/logger/clearml.py
+62
-0
tests/test_runner/test_hooks.py
tests/test_runner/test_hooks.py
+27
-2
No files found.
mmcv/runner/__init__.py
View file @
94c071b3
...
@@ -10,9 +10,10 @@ from .dist_utils import (allreduce_grads, allreduce_params, get_dist_info,
...
@@ -10,9 +10,10 @@ from .dist_utils import (allreduce_grads, allreduce_params, get_dist_info,
init_dist
,
master_only
)
init_dist
,
master_only
)
from
.epoch_based_runner
import
EpochBasedRunner
,
Runner
from
.epoch_based_runner
import
EpochBasedRunner
,
Runner
from
.fp16_utils
import
LossScaler
,
auto_fp16
,
force_fp32
,
wrap_fp16_model
from
.fp16_utils
import
LossScaler
,
auto_fp16
,
force_fp32
,
wrap_fp16_model
from
.hooks
import
(
HOOKS
,
CheckpointHook
,
ClosureHook
,
DistEvalHook
,
from
.hooks
import
(
HOOKS
,
CheckpointHook
,
ClearMLLoggerHook
,
ClosureHook
,
DistSamplerSeedHook
,
DvcliveLoggerHook
,
EMAHook
,
EvalHook
,
DistEvalHook
,
DistSamplerSeedHook
,
DvcliveLoggerHook
,
Fp16OptimizerHook
,
GradientCumulativeFp16OptimizerHook
,
EMAHook
,
EvalHook
,
Fp16OptimizerHook
,
GradientCumulativeFp16OptimizerHook
,
GradientCumulativeOptimizerHook
,
Hook
,
IterTimerHook
,
GradientCumulativeOptimizerHook
,
Hook
,
IterTimerHook
,
LoggerHook
,
MlflowLoggerHook
,
NeptuneLoggerHook
,
LoggerHook
,
MlflowLoggerHook
,
NeptuneLoggerHook
,
OptimizerHook
,
PaviLoggerHook
,
SegmindLoggerHook
,
OptimizerHook
,
PaviLoggerHook
,
SegmindLoggerHook
,
...
@@ -68,5 +69,5 @@ __all__ = [
...
@@ -68,5 +69,5 @@ __all__ = [
'ModuleDict'
,
'ModuleList'
,
'GradientCumulativeOptimizerHook'
,
'ModuleDict'
,
'ModuleList'
,
'GradientCumulativeOptimizerHook'
,
'GradientCumulativeFp16OptimizerHook'
,
'DefaultRunnerConstructor'
,
'GradientCumulativeFp16OptimizerHook'
,
'DefaultRunnerConstructor'
,
'SegmindLoggerHook'
,
'LinearAnnealingMomentumUpdaterHook'
,
'SegmindLoggerHook'
,
'LinearAnnealingMomentumUpdaterHook'
,
'LinearAnnealingLrUpdaterHook'
'LinearAnnealingLrUpdaterHook'
,
'ClearMLLoggerHook'
]
]
mmcv/runner/hooks/__init__.py
View file @
94c071b3
...
@@ -5,9 +5,10 @@ from .ema import EMAHook
...
@@ -5,9 +5,10 @@ from .ema import EMAHook
from
.evaluation
import
DistEvalHook
,
EvalHook
from
.evaluation
import
DistEvalHook
,
EvalHook
from
.hook
import
HOOKS
,
Hook
from
.hook
import
HOOKS
,
Hook
from
.iter_timer
import
IterTimerHook
from
.iter_timer
import
IterTimerHook
from
.logger
import
(
DvcliveLoggerHook
,
LoggerHook
,
MlflowLoggerHook
,
from
.logger
import
(
ClearMLLoggerHook
,
DvcliveLoggerHook
,
LoggerHook
,
NeptuneLoggerHook
,
PaviLoggerHook
,
SegmindLoggerHook
,
MlflowLoggerHook
,
NeptuneLoggerHook
,
PaviLoggerHook
,
TensorboardLoggerHook
,
TextLoggerHook
,
WandbLoggerHook
)
SegmindLoggerHook
,
TensorboardLoggerHook
,
TextLoggerHook
,
WandbLoggerHook
)
from
.lr_updater
import
(
CosineAnnealingLrUpdaterHook
,
from
.lr_updater
import
(
CosineAnnealingLrUpdaterHook
,
CosineRestartLrUpdaterHook
,
CyclicLrUpdaterHook
,
CosineRestartLrUpdaterHook
,
CyclicLrUpdaterHook
,
ExpLrUpdaterHook
,
FixedLrUpdaterHook
,
ExpLrUpdaterHook
,
FixedLrUpdaterHook
,
...
@@ -43,5 +44,5 @@ __all__ = [
...
@@ -43,5 +44,5 @@ __all__ = [
'SyncBuffersHook'
,
'EMAHook'
,
'EvalHook'
,
'DistEvalHook'
,
'ProfilerHook'
,
'SyncBuffersHook'
,
'EMAHook'
,
'EvalHook'
,
'DistEvalHook'
,
'ProfilerHook'
,
'GradientCumulativeOptimizerHook'
,
'GradientCumulativeFp16OptimizerHook'
,
'GradientCumulativeOptimizerHook'
,
'GradientCumulativeFp16OptimizerHook'
,
'SegmindLoggerHook'
,
'LinearAnnealingLrUpdaterHook'
,
'SegmindLoggerHook'
,
'LinearAnnealingLrUpdaterHook'
,
'LinearAnnealingMomentumUpdaterHook'
'LinearAnnealingMomentumUpdaterHook'
,
'ClearMLLoggerHook'
]
]
mmcv/runner/hooks/logger/__init__.py
View file @
94c071b3
# Copyright (c) OpenMMLab. All rights reserved.
# Copyright (c) OpenMMLab. All rights reserved.
from
.base
import
LoggerHook
from
.base
import
LoggerHook
from
.clearml
import
ClearMLLoggerHook
from
.dvclive
import
DvcliveLoggerHook
from
.dvclive
import
DvcliveLoggerHook
from
.mlflow
import
MlflowLoggerHook
from
.mlflow
import
MlflowLoggerHook
from
.neptune
import
NeptuneLoggerHook
from
.neptune
import
NeptuneLoggerHook
...
@@ -12,5 +13,6 @@ from .wandb import WandbLoggerHook
...
@@ -12,5 +13,6 @@ from .wandb import WandbLoggerHook
__all__
=
[
__all__
=
[
'LoggerHook'
,
'MlflowLoggerHook'
,
'PaviLoggerHook'
,
'LoggerHook'
,
'MlflowLoggerHook'
,
'PaviLoggerHook'
,
'TensorboardLoggerHook'
,
'TextLoggerHook'
,
'WandbLoggerHook'
,
'TensorboardLoggerHook'
,
'TextLoggerHook'
,
'WandbLoggerHook'
,
'NeptuneLoggerHook'
,
'DvcliveLoggerHook'
,
'SegmindLoggerHook'
'NeptuneLoggerHook'
,
'DvcliveLoggerHook'
,
'SegmindLoggerHook'
,
'ClearMLLoggerHook'
]
]
mmcv/runner/hooks/logger/clearml.py
0 → 100644
View file @
94c071b3
# Copyright (c) OpenMMLab. All rights reserved.
from
...dist_utils
import
master_only
from
..hook
import
HOOKS
from
.base
import
LoggerHook
@
HOOKS
.
register_module
()
class
ClearMLLoggerHook
(
LoggerHook
):
"""Class to log metrics with clearml.
It requires `clearml`_ to be installed.
Args:
init_kwargs (dict): A dict contains the `clearml.Task.init`
initialization keys. See `taskinit`_ for more details.
interval (int): Logging interval (every k iterations). Default 10.
ignore_last (bool): Ignore the log of last iterations in each epoch
if less than `interval`. Default: True.
reset_flag (bool): Whether to clear the output buffer after logging.
Default: False.
by_epoch (bool): Whether EpochBasedRunner is used. Default: True.
.. _clearml:
https://clear.ml/docs/latest/docs/
.. _taskinit:
https://clear.ml/docs/latest/docs/references/sdk/task/#taskinit
"""
def
__init__
(
self
,
init_kwargs
=
None
,
interval
=
10
,
ignore_last
=
True
,
reset_flag
=
False
,
by_epoch
=
True
):
super
(
ClearMLLoggerHook
,
self
).
__init__
(
interval
,
ignore_last
,
reset_flag
,
by_epoch
)
self
.
import_clearml
()
self
.
init_kwargs
=
init_kwargs
def
import_clearml
(
self
):
try
:
import
clearml
except
ImportError
:
raise
ImportError
(
'Please run "pip install clearml" to install clearml'
)
self
.
clearml
=
clearml
@
master_only
def
before_run
(
self
,
runner
):
super
(
ClearMLLoggerHook
,
self
).
before_run
(
runner
)
task_kwargs
=
self
.
init_kwargs
if
self
.
init_kwargs
else
{}
self
.
task
=
self
.
clearml
.
Task
.
init
(
**
task_kwargs
)
self
.
task_logger
=
self
.
task
.
get_logger
()
@
master_only
def
log
(
self
,
runner
):
tags
=
self
.
get_loggable_tags
(
runner
)
for
tag
,
val
in
tags
.
items
():
self
.
task_logger
.
report_scalar
(
tag
,
tag
,
val
,
self
.
get_iter
(
runner
))
tests/test_runner/test_hooks.py
View file @
94c071b3
...
@@ -23,8 +23,8 @@ from torch.utils.data import DataLoader
...
@@ -23,8 +23,8 @@ from torch.utils.data import DataLoader
from
mmcv.fileio.file_client
import
PetrelBackend
from
mmcv.fileio.file_client
import
PetrelBackend
# yapf: disable
# yapf: disable
from
mmcv.runner
import
(
CheckpointHook
,
Dvclive
LoggerHook
,
EMA
Hook
,
from
mmcv.runner
import
(
CheckpointHook
,
ClearML
LoggerHook
,
DvcliveLogger
Hook
,
Fp16OptimizerHook
,
EMAHook
,
Fp16OptimizerHook
,
GradientCumulativeFp16OptimizerHook
,
GradientCumulativeFp16OptimizerHook
,
GradientCumulativeOptimizerHook
,
IterTimerHook
,
GradientCumulativeOptimizerHook
,
IterTimerHook
,
MlflowLoggerHook
,
NeptuneLoggerHook
,
OptimizerHook
,
MlflowLoggerHook
,
NeptuneLoggerHook
,
OptimizerHook
,
...
@@ -1572,6 +1572,31 @@ def test_dvclive_hook_model_file(tmp_path):
...
@@ -1572,6 +1572,31 @@ def test_dvclive_hook_model_file(tmp_path):
shutil
.
rmtree
(
runner
.
work_dir
)
shutil
.
rmtree
(
runner
.
work_dir
)
def
test_clearml_hook
():
sys
.
modules
[
'clearml'
]
=
MagicMock
()
runner
=
_build_demo_runner
()
hook
=
ClearMLLoggerHook
(
init_kwargs
=
{
'project_name'
:
'proj'
,
'task_name'
:
'task'
,
})
loader
=
DataLoader
(
torch
.
ones
((
5
,
2
)))
runner
.
register_hook
(
hook
)
runner
.
run
([
loader
,
loader
],
[(
'train'
,
1
),
(
'val'
,
1
)])
shutil
.
rmtree
(
runner
.
work_dir
)
hook
.
clearml
.
Task
.
init
.
assert_called_with
(
project_name
=
'proj'
,
task_name
=
'task'
)
hook
.
task
.
get_logger
.
assert_called_with
()
report_scalar_calls
=
[
call
(
'momentum'
,
'momentum'
,
0.95
,
6
),
call
(
'learning_rate'
,
'learning_rate'
,
0.02
,
6
),
]
hook
.
task_logger
.
report_scalar
.
assert_has_calls
(
report_scalar_calls
,
any_order
=
True
)
def
_build_demo_runner_without_hook
(
runner_type
=
'EpochBasedRunner'
,
def
_build_demo_runner_without_hook
(
runner_type
=
'EpochBasedRunner'
,
max_epochs
=
1
,
max_epochs
=
1
,
max_iters
=
None
,
max_iters
=
None
,
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment