class_docstr: Gather tensors from all workers with support for backward propagation:
  This implementation does not cut the gradients as torch.distributed.all_gather does.
code: def backward(ctx, *grads):
      all_gradients = torch.stack(grads)
      dist.all_reduce(all_gradients)
      return all_gradients[dist.get_rank()]
  
file_path: vissl/vissl/utils/distributed_utils.py
imports: from typing import List
  import torch
  import torch.distributed
  from classy_vision.generic.distributed_util import convert_to_distributed_tensor, convert_to_normal_tensor, is_distributed_training_run
label_desc: Use image node_id 2 for calling the GatherLayer obj's underlying member method code with example usage: obj.backward(ctx) and returns: all_gradients