Browse Source

在fitlogcallback中关闭非卡0的记录

tags/v1.0.0alpha
yh_cc 2 years ago
parent
commit
73aed7755d
1 changed files with 23 additions and 18 deletions
  1. +23
    -18
      fastNLP/core/callbacks/fitlog_callback.py

+ 23
- 18
fastNLP/core/callbacks/fitlog_callback.py View File

@@ -3,30 +3,31 @@ __all__ = [
]
from .has_monitor_callback import HasMonitorCallback
from ...envs import _module_available
from ...envs import get_global_rank
if _module_available('fitlog'):
import fitlog


class FitlogCallback(HasMonitorCallback):
"""
自动记录 ``evaluation`` 结果到 ``fitlog`` 中。会自动记录每一次 ``evaluate`` 后的结果;同时会根据
``monitor`` 记录最好的结果。另外,会自动将非 ``rank 0`` 上的 ``fitlog`` 设置为 ``debug`` 状态。

:param monitor: 监控的 metric 值。

* 为 ``None``
将尝试使用 :class:`~fastNLP.Trainer` 中设置 `monitor` 值(如果有设置)。
* 为 ``str``
尝试直接使用该名称从 ``evaluation`` 结果中寻找,如果在 ``evaluation`` 结果中没有找到完全一致的名称,将
使用 最长公共字符串算法 从 ``evaluation`` 结果中找到最匹配的那个作为 ``monitor`` 。
* 为 ``Callable``
接受参数为 ``evaluation`` 的结果(字典类型),返回一个 ``float`` 值作为 ``monitor`` 的结果,如果当前结果中没有相关
的 ``monitor`` 值请返回 ``None`` 。
:param larger_better: 是否是越大越好。
:param log_exception: 是否记录 ``exception`` 。
:param log_loss_every: 多少个 ``batch`` 记录一次 loss 到 ``fitlog`` 中。
"""
def __init__(self, monitor=None, larger_better: bool = True, log_exception:bool=True, log_loss_every:int=0):
"""
自动记录 ``evaluation`` 结果到 ``fitlog`` 中的 ``Callback`` 。会根据 ``monitor`` 记录最好的结果,以及每一次 ``evaluate`` 后的
结果。

:param monitor: 监控的 metric 值。

* 为 ``None``
将尝试使用 :class:`~fastNLP.Trainer` 中设置 `monitor` 值(如果有设置)。
* 为 ``str``
尝试直接使用该名称从 ``evaluation`` 结果中寻找,如果在 ``evaluation`` 结果中没有找到完全一致的名称,将
使用 最长公共字符串算法 从 ``evaluation`` 结果中找到最匹配的那个作为 ``monitor`` 。
* 为 ``Callable``
接受参数为 ``evaluation`` 的结果(字典类型),返回一个 ``float`` 值作为 ``monitor`` 的结果,如果当前结果中没有相关
的 ``monitor`` 值请返回 ``None`` 。
:param larger_better: 是否是越大越好。
:param log_exception: 是否记录 ``exception`` 。
:param log_loss_every: 多少个 ``batch`` 记录一次 loss 到 ``fitlog`` 中。
"""
assert _module_available('fitlog'), "fitlog is not installed."

super().__init__(monitor=monitor, larger_better=larger_better)
@@ -34,6 +35,10 @@ class FitlogCallback(HasMonitorCallback):
self.log_loss_every = log_loss_every
self.avg_loss = 0

def on_after_trainer_initialized(self, trainer, driver):
if get_global_rank() != 0: # 如果不是 global rank 为 0 ,需要关闭 fitlog
fitlog.debug()

def on_evaluate_end(self, trainer, results):
results = self.itemize_results(results)
fitlog.add_metric(results, step=trainer.global_forward_batches, epoch=trainer.cur_epoch_idx)


Loading…
Cancel
Save