| | import os |
| | import inspect |
| | import sys |
| | import yaml |
| | |
| | from loguru import logger |
| |
|
| | def setup_logger(save_dir, distributed_rank=0, filename="log.txt", mode="a"): |
| | """setup logger for training and testing. |
| | Args: |
| | save_dir(str): location to save log file |
| | distributed_rank(int): device rank when multi-gpu environment |
| | filename (string): log save name. |
| | mode(str): log file write mode, `append` or `override`. default is `a`. |
| | |
| | Return: |
| | logger instance. |
| | """ |
| | loguru_format = ( |
| | "<blue>{time: MM-DD HH:mm:ss}</blue> | " |
| | |
| | |
| | "<level>{message}</level>" |
| | ) |
| |
|
| | logger.remove() |
| | save_file = os.path.join(save_dir, filename) |
| | if mode == "o" and os.path.exists(save_file): |
| | os.remove(save_file) |
| | |
| | if distributed_rank == 0: |
| | logger.add( |
| | sys.stderr, |
| | format=loguru_format, |
| | level="INFO", |
| | enqueue=True, |
| | ) |
| | logger.add(save_file, |
| | format=loguru_format, |
| | ) |
| |
|
| |
|
| | def set_args_and_logger(args, rank): |
| | """ |
| | set logger file and print args |
| | """ |
| | args_name_dir = args.out_path + "custom/" + args.name + args.notes + "/" |
| | if rank == 0: |
| | if not os.path.exists(args_name_dir): os.makedirs(args_name_dir) |
| | args_name = args_name_dir + "/" + args.name +".yaml" |
| | if os.path.exists(args_name): |
| | s_add = 10 |
| | logger.warning(f"Already exist args, add {s_add} to ran_seed to continue training") |
| | args.random_seed += s_add |
| | else: |
| | with open(args_name, "w+") as f: |
| | yaml.dump(args.__dict__, f, default_flow_style=True) |
| | |
| | setup_logger(args_name_dir, rank, filename=f"{args.name}.txt") |