code: def _grouped_allgather_grad(op, *grads):
      """Gradient for the grouped allgather op.
  
      Args:
        op: An operation.
        grad: List of `Tensor` gradients with respect to the outputs of the op.
  
      Returns:
        The gradients with respect to the inputs of the op.
      """
      ignore_name_scope = op.get_attr("ignore_name_scope")
      process_set_id = op.get_attr("process_set_id")
      temp_process_set_object = _temp_process_set_object(process_set_id)
      # Not using _grouped_allreduce here because all its input tensors need to be of the same dtype, but TensorFlow may
      # give us float32 zero gradients here despite non-zero gradients being, e.g, float64.
      grads = [
          _allreduce(
              g,
              op=Average,
              ignore_name_scope=ignore_name_scope,
              process_set=temp_process_set_object,
          )
          for g in grads
      ]
  
      split_sizes = []
      with tf.device("/cpu:0"):
          # Keep the split size tensors on CPU.
          for x in op.inputs:
              d = tf.shape(x)
              d = tf.reshape(d[0], [1])
  
              s = temp_process_set_object.size()
              d = tf.reshape(
                  allgather(
                      d,
                      ignore_name_scope=ignore_name_scope,
                      process_set=temp_process_set_object,
                  ),
                  [s],
              )
              split_sizes.append(d)
  
      splits_list = [
          tf.split(grad, num_or_size_splits=d, axis=0)
          for grad, d in zip(grads, split_sizes)
      ]
      return [
          splits[temp_process_set_object.rank()]
          for splits in splits_list
      ]
  
imports: import re
  import tensorflow
  from tensorflow.python.framework import load_library
  from tensorflow.python.framework import ops
  from tensorflow.python.platform import resource_loader
  from horovod.common.util import check_installed_version, get_ext_suffix, get_average_backwards_compatibility_fun, gpu_available, num_rank_is_power_2
  from horovod.common.basics import HorovodBasics
  from horovod.common.process_sets import _setup
  from horovod.common.process_sets import ProcessSet, global_process_set, add_process_set, remove_process_set, _temp_process_set_object
  from horovod.tensorflow.util import _executing_eagerly
label_desc: Use image node_id 12 for calling a global function with example usage: _grouped_allgather_grad(op) and returns: unknown