# Copyright (c) ModelScope Contributors. All rights reserved. from swift.utils import check_json_format, is_last_rank from .base import MegatronCallback from .utils import rewrite_logs class TensorboardCallback(MegatronCallback): def __init__(self, trainer): super().__init__(trainer) args = self.args self.config = check_json_format(vars(args)) self.save_dir = args.tensorboard_dir if self.save_dir is None: self.save_dir = f'{args.output_dir}/runs' from torch.utils.tensorboard import SummaryWriter self.writer = None if is_last_rank(): self.writer = SummaryWriter(log_dir=self.save_dir, max_queue=args.tensorboard_queue_size) for k, v in self.config.items(): self.writer.add_text(k, str(v), global_step=self.state.iteration) def on_log(self, logs): logs = rewrite_logs(logs) if self.writer: for k, v in logs.items(): self.writer.add_scalar(k, v, self.state.iteration) def on_train_end(self): if self.writer: self.writer.close() self.writer = None