docstr: Called at the end of training.
  Subclasses should override for any actions to run.
docstr_tok: ["Called","at","the","end","of","training",".","Subclasses","should","override","for","any","actions","to","run","."]
code: def after_run(self, runner):
      """
      Called at the end of training.
      Subclasses should override for any actions to run.
      """
      if self._is_rank_zero(runner):
          put_local_dir_tree_to_remote(self.tmp_dir, self.log_dir)
          if os.path.exists(self.tmp_dir):
              shutil.rmtree(self.tmp_dir)
  
file_path: BigDL/python/orca/src/bigdl/orca/learn/pytorch/callbacks/tensorboard.py
imports: import os
  import shutil
  import tempfile
  from torch.utils.tensorboard import SummaryWriter
  from bigdl.orca.data.file import put_local_dir_tree_to_remote
  from bigdl.orca.learn.pytorch.callbacks import Callback
  from bigdl.dllib.utils.log4Error import invalidInputError
label_desc: Use image node_id 4 for calling the TensorBoardCallback obj's underlying member method code with example usage: obj.after_run(runner) without return types