| | |
| | 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() |
| |
|