Esempio n. 1
0
 def __init__(self, warmup_iter=3):
     """
     Args:
         warmup_iter (int): the number of iterations at the beginning to exclude
             from timing.
     """
     self._warmup_iter = warmup_iter
     self._step_timer = Timer()
Esempio n. 2
0
class IterationTimer(HookBase):
    """
    Track the time spent for each iteration (each run_step call in the trainer).
    Print a summary in the end of training.
    This hook uses the time between the call to its :meth:`before_step`
    and :meth:`after_step` methods.
    Under the convention that :meth:`before_step` of all hooks should only
    take negligible amount of time, the :class:`IterationTimer` hook should be
    placed at the beginning of the list of hooks to obtain accurate timing.
    """
    def __init__(self, warmup_iter=3):
        """
        Args:
            warmup_iter (int): the number of iterations at the beginning to exclude
                from timing.
        """
        self._warmup_iter = warmup_iter
        self._step_timer = Timer()

    def before_train(self):
        self._start_time = time.perf_counter()
        self._total_timer = Timer()
        self._total_timer.pause()

    def after_train(self):
        logger = logging.getLogger(__name__)
        total_time = time.perf_counter() - self._start_time
        total_time_minus_hooks = self._total_timer.seconds()
        hook_time = total_time - total_time_minus_hooks

        num_iter = self.trainer.iter + 1 - self.trainer.start_iter - self._warmup_iter

        if num_iter > 0 and total_time_minus_hooks > 0:
            # Speed is meaningful only after warmup
            # NOTE this format is parsed by grep in some scripts
            logger.info(
                "Overall training speed: {} iterations in {} ({:.4f} s / it)".
                format(
                    num_iter,
                    str(datetime.timedelta(
                        seconds=int(total_time_minus_hooks))),
                    total_time_minus_hooks / num_iter,
                ))

        logger.info("Total training time: {} ({} on hooks)".format(
            str(datetime.timedelta(seconds=int(total_time))),
            str(datetime.timedelta(seconds=int(hook_time))),
        ))

    def before_step(self):
        self._step_timer.reset()
        self._total_timer.resume()

    def after_step(self):
        # +1 because we're in after_step
        iter_done = self.trainer.iter - self.trainer.start_iter + 1
        if iter_done >= self._warmup_iter:
            sec = self._step_timer.seconds()
            self.trainer.storage.put_scalars(time=sec)
        else:
            self._start_time = time.perf_counter()
            self._total_timer.reset()

        self._total_timer.pause()
Esempio n. 3
0
 def before_train(self):
     self._start_time = time.perf_counter()
     self._total_timer = Timer()
     self._total_timer.pause()