|
|
|
from ...dist_utils import master_only |
|
from ..hook import HOOKS |
|
from .base import LoggerHook |
|
|
|
|
|
@HOOKS.register_module() |
|
class NeptuneLoggerHook(LoggerHook): |
|
"""Class to log metrics to NeptuneAI. |
|
|
|
It requires `neptune-client` to be installed. |
|
|
|
Args: |
|
init_kwargs (dict): a dict contains the initialization keys as below: |
|
- project (str): Name of a project in a form of |
|
namespace/project_name. If None, the value of |
|
NEPTUNE_PROJECT environment variable will be taken. |
|
- api_token (str): User’s API token. |
|
If None, the value of NEPTUNE_API_TOKEN environment |
|
variable will be taken. Note: It is strongly recommended |
|
to use NEPTUNE_API_TOKEN environment variable rather than |
|
placing your API token in plain text in your source code. |
|
- name (str, optional, default is 'Untitled'): Editable name of |
|
the run. Name is displayed in the run's Details and in |
|
Runs table as a column. |
|
Check https://docs.neptune.ai/api-reference/neptune#init for |
|
more init arguments. |
|
interval (int): Logging interval (every k iterations). |
|
ignore_last (bool): Ignore the log of last iterations in each epoch |
|
if less than `interval`. |
|
reset_flag (bool): Whether to clear the output buffer after logging |
|
by_epoch (bool): Whether EpochBasedRunner is used. |
|
|
|
.. _NeptuneAI: |
|
https://docs.neptune.ai/you-should-know/logging-metadata |
|
""" |
|
|
|
def __init__(self, |
|
init_kwargs=None, |
|
interval=10, |
|
ignore_last=True, |
|
reset_flag=True, |
|
with_step=True, |
|
by_epoch=True): |
|
|
|
super(NeptuneLoggerHook, self).__init__(interval, ignore_last, |
|
reset_flag, by_epoch) |
|
self.import_neptune() |
|
self.init_kwargs = init_kwargs |
|
self.with_step = with_step |
|
|
|
def import_neptune(self): |
|
try: |
|
import neptune.new as neptune |
|
except ImportError: |
|
raise ImportError( |
|
'Please run "pip install neptune-client" to install neptune') |
|
self.neptune = neptune |
|
self.run = None |
|
|
|
@master_only |
|
def before_run(self, runner): |
|
if self.init_kwargs: |
|
self.run = self.neptune.init(**self.init_kwargs) |
|
else: |
|
self.run = self.neptune.init() |
|
|
|
@master_only |
|
def log(self, runner): |
|
tags = self.get_loggable_tags(runner) |
|
if tags: |
|
for tag_name, tag_value in tags.items(): |
|
if self.with_step: |
|
self.run[tag_name].log( |
|
tag_value, step=self.get_iter(runner)) |
|
else: |
|
tags['global_step'] = self.get_iter(runner) |
|
self.run[tag_name].log(tags) |
|
|
|
@master_only |
|
def after_run(self, runner): |
|
self.run.stop() |
|
|