class_docstr: Graph Transformer.
  
  This is the bulk of the AutoDist backend logic, taking a single-node,
  single-GPU graph and transforming it into a distributed
  graph. This all happens based on the `Strategy` provided.
  
  The transformation occurs over several steps:
  
  1. Partitions the necessary variables
  2. Replicates the graph the desired number of times
  3. Within the graph, synchronizes gradients with in-graph logic
  4. Adds between-graph gradient synchronization logic
docstr: Perform between-graph replication of the graph.
  
  Args:
      multi_gpu_graph_item (GraphItem): The graph to replication.
  
  Returns:
      GraphItem
docstr_tok: ["Perform","between-graph","replication","of","the","graph",".","Args",":","multi_gpu_graph_item","(","GraphItem",")",":","The","graph","to","replication",".","Returns",":","GraphItem"]
code: def _between_graph_apply(self, multi_gpu_graph_item: GraphItem):
      """
      Perform between-graph replication of the graph.
  
      Args:
          multi_gpu_graph_item (GraphItem): The graph to replication.
  
      Returns:
          GraphItem
      """
      new_graph_item = multi_gpu_graph_item
      new_graph_item.set_optimize()
      for var_name, syncer in self._synchronizers.items():
          new_graph_item = syncer.between_graph_apply(
              new_graph_item, var_name
          )
      new_graph_item.reset_optimize()
      self._prune_colocation_groups(new_graph_item)
      # TODO: make this work
      # update_shard_values_for_worker(num_workers, worker_id)
      return new_graph_item
  
file_path: autodist/autodist/kernel/graph_transformer.py
imports: from tensorflow.core.framework.attr_value_pb2 import AttrValue
  from tensorflow.python.eager import context
  from tensorflow.python.framework import device_spec
  from autodist.graph_item import GraphItem
  from autodist.kernel.partitioner import VariablePartitioner
  from autodist.kernel.replicator import Replicator
  from autodist.kernel.synchronization.synchronizer import Synchronizer
  from autodist.utils import logging, visualization_util
label_desc: Use image node_id 6 for calling the GraphTransformer obj's underlying member method code with example usage: obj._between_graph_apply(multi_gpu_graph_item) and returns: new_graph_item