Exemplo n.º 1
0
def get_logger(name, log_file=None, log_level=logging.INFO):
    """Initialize and get a logger by name.

    If the logger has not been initialized, this method will initialize the
    logger by adding one or two handlers, otherwise the initialized logger will
    be directly returned. During initialization, a StreamHandler will always be
    added. If `log_file` is specified and the process rank is 0, a FileHandler
    will also be added.

    Args:
        name (str): Logger name.
        log_file (str | None): The log filename. If specified, a FileHandler
            will be added to the logger.
        log_level (int): The logger level. Note that only the process of
            rank 0 is affected, and other processes will set the level to
            "Error" thus be silent most of the time.

    Returns:
        logging.Logger: The expected logger.
    """
    logger = logging.getLogger(name)
    if name in logger_initialized:
        return logger

    # handle hierarchical names
    # e.g., logger "a" is initialized, then logger "a.b" will skip the
    # initialization since it is a child of "a".
    for logger_name in logger_initialized:
        if name.startswith(logger_name):
            return logger

    # fix stream twice bug
    # while logger.handlers:
    #     logger.handlers.pop()

    stream_handler = logging.StreamHandler()
    handlers = [stream_handler]

    rank = get_rank()

    # only rank 0 will add a FileHandler
    if rank == 0 and log_file is not None:
        file_handler = logging.FileHandler(log_file, 'w')
        handlers.append(file_handler)

    formatter = logging.Formatter(
        '%(asctime)s - %(name)s - %(levelname)s - %(message)s')
    for handler in handlers:
        handler.setFormatter(formatter)
        handler.setLevel(log_level)
        logger.addHandler(handler)

    if rank == 0:
        logger.setLevel(log_level)
    else:
        logger.setLevel(logging.ERROR)

    logger_initialized[name] = True

    return logger
Exemplo n.º 2
0
    def __init__(self, interval=-1, by_epoch=True, out_dir=None, **kwargs):
        self.interval = interval
        self.by_epoch = by_epoch
        self.out_dir = out_dir
        self.args = kwargs

        self.local_rank = get_rank()
Exemplo n.º 3
0
    def __init__(self, dataloader, **eval_kwargs):
        if not isinstance(dataloader, DataLoader):
            raise TypeError('dataloader must be a mge DataLoader, '
                            f'but got { type(dataloader)}')
        self.dataloader = dataloader
        self.eval_kwargs = eval_kwargs
        self.interval = self.eval_kwargs.pop('interval', 10000)
        self.save_image = self.eval_kwargs.pop('save_image', False)
        self.save_path = self.eval_kwargs.pop('save_path', None)
        self.log_dir_path = self.eval_kwargs.pop('log_path', None)
        self.log_path = os.path.join(self.log_dir_path, "eval.log")
        mkdir_or_exist(self.log_dir_path)
        self.logger = get_logger(name="EvalIterHook", log_file=self.log_path)

        # dist
        if is_distributed():
            self.local_rank = get_rank()
            self.nranks = get_world_size()
        else:
            self.local_rank = 0
            self.nranks = 1
Exemplo n.º 4
0
 def __init__(self):
     super(BaseModel, self).__init__()
     self.local_rank = get_rank()