code: def build(self, epoch, checkpoint_manager):
      with TaskGroup(WorkspaceType.GLOBAL) as upload_task_group:
          for node, manager in checkpoint_manager._node_managers:
              with Node(str(node)), Task():
                  src_path = db_name(
                      epoch, manager._node_name, manager._db_prefix
                  )
                  dest_path = os.path.join(self.dest_dir, str(node))
                  ops.Python(
                      (local_copy_op, [src_path, dest_path], {})
                  )([], [])
      return upload_task_group
  
imports: from caffe2.python.schema import Struct, ConstRecord
  from caffe2.python import core, workspace, model_helper
  from caffe2.python.session import LocalSession
  from caffe2.python.dataset import Dataset
  from caffe2.python.pipeline import pipe
  from caffe2.python.checkpoint import CheckpointManager, MultiNodeCheckpointManager, Job, JobRunner, epoch_limiter, UploadTaskGroupBuilder, db_name
  from caffe2.python.net_builder import ops
  from caffe2.python.task import Node, Task, TaskGroup, WorkspaceType, Cluster
  from caffe2.python.test_util import TestCase
  from caffe2.python.dataio import ReaderWithLimit
  import numpy
  import os
  import shutil
  import tempfile
label_desc: Use image node_id 2 for calling the UploadToLocalFile obj's underlying member method code with example usage: obj.build(epoch, checkpoint_manager) and returns: upload_task_group