code: def send_backward(
      input_tensor_grad: torch.Tensor,
      tensor_shape: Shape,
      *,
      dtype: Optional[torch.dtype] = None,
      async_comm: bool = False,
      sequence_parallel_enabled: bool = False,
      sync_batch_comm: bool = True,
      batch_p2p_comm: bool = True,
      timers: _Timers = None,
  ) -> None:
      """Send tensor to previous rank in pipeline (backward send)."""
      if parallel_state.is_pipeline_first_stage():
          return
      # if timers is not None:
      #     timers("backward-send").start()
      _communicate(
          tensor_send_next=None,
          tensor_send_prev=input_tensor_grad,
          recv_prev=False,
          recv_next=False,
          tensor_shape=tensor_shape,
          dtype_=dtype,
          async_comm=async_comm,
          sequence_parallel_enabled=sequence_parallel_enabled,
          sync_batch_comm=sync_batch_comm,
          batch_p2p_comm=batch_p2p_comm,
      )
  
imports: from functools import reduce
  import operator
  from typing import Union, Optional, Tuple
  import torch
  from apex.transformer import parallel_state
  from apex.transformer.log_util import get_transformer_logger
  from apex.transformer.utils import split_tensor_into_1d_equal_chunks
  from apex.transformer.utils import gather_split_1d_tensor
  from apex.transformer.pipeline_parallel.utils import Shape
  from apex.transformer.pipeline_parallel._timers import _Timers
label_desc: Use image node_id 6 for calling a global function with example usage: send_backward(input_tensor_grad, tensor_shape) without return types