code: def reduce_scatter(
      output: torch.Tensor,
      input_list: List[torch.Tensor],
      op: ReduceOp = ReduceOp.SUM,
      group=None,
      async_op: bool = False,
      profiler: CommProfiler = None,
  ) -> Optional[CommHandler]:
      async_check(profiler)
  
      comm_size = dist.get_world_size(group)
      correction = (comm_size - 1) / comm_size
      comm_vol = 0
      for tensor in input_list:
          comm_vol += tensor.element_size() * tensor.numel()
      comm_vol *= correction
      profiler.activate_profiler("ncclKernel_ReduceScatter_", comm_vol)
      profiler.pending_op = torch_reduce_scatter(
          output, input_list, op, group, async_op
      )
  
      if async_op:
          return CommHandler(profiler)
  
      profiler.close_profiler(group)
  
imports: import inspect
  from functools import partial
  from pathlib import Path
  from typing import List, Optional
  import torch
  import torch.distributed
  from torch.autograd.profiler import profile
  from torch.distributed import ReduceOp
  from colossalai.utils import get_current_device
  from .prof_utils import BaseProfiler, _format_bandwidth, _format_memory, _format_time
label_desc: Use image node_id 4 for calling a global function with example usage: reduce_scatter(output, input_list, op, group, async_op, profiler) and returns: CommHandler