docstr: Init an NCCL collective group.
docstr_tok: ["Init","an","NCCL","collective","group","."]
code: def __init__(self, world_size, rank, group_name):
      """Init an NCCL collective group."""
      super(NCCLGroup, self).__init__(world_size, rank, group_name)
  
      # communicator and stream cache.
      # TODO (Hao): we need a lock here...
      self._dev_comm_map = {}
      self._dev_streams_map = {}
  
      # record the used GPU IDs.
      self._used_gpu_indices = set()
  
      # TODO(Fu): might need an event map
      self._dev_event_map = {}
  
      if nccl_util.get_nccl_build_version() < 2000:
          raise RuntimeError("NCCL in Ray requires NCCL >= 2.0.")
      if nccl_util.get_nccl_runtime_version() < 2704:
          logger.warning("NCCL send/recv calls requires NCCL>=2.7.4")
  
imports: import logging
  import datetime
  import time
  import ray
  import cupy
  from ray.util.collective.const import ENV
  from ray.util.collective.collective_group import nccl_util
  from ray.util.collective.collective_group.base_collective_group import BaseGroup
  from ray.util.collective.const import get_store_name
  from ray.util.collective.types import AllReduceOptions, BarrierOptions, Backend, ReduceOptions, BroadcastOptions, AllGatherOptions, ReduceScatterOptions, SendOptions, RecvOptions
  from ray.util.collective.collective_group.cuda_stream import get_stream_pool
label_desc: Use image node_id 1 to create a new NCCLGroup object from inherited base classes: BaseGroup with example: obj = NCCLGroup(world_size, rank, group_name)