code: def __init__(self, mpi_comm):
      super(NonCudaAwareCommunicator, self).__init__(mpi_comm)
      if not nccl._available:
          raise RuntimeError(
              "NCCL is not available. "
              "Please confirm that NCCL is enabled in CuPy."
          )
      if nccl.get_version() < 2302:
          warnings.warn(
              "NCCL 2.2 and older versions are deprecated.",
              DeprecationWarning,
          )
  
      # We have to delay the initialization of communicators. This is because
      # NCCL's communicators use the current CUDA devices at the time of
      # initialization. Therefore, we have to initialize NCCL communicators
      # after users set the devices to use.
      self.inter_mpi_comm = None
      self.intra_nccl_comm = None
  
      self.gpu_buffer_a = _memory_utility.DeviceMemory()
      self.gpu_buffer_b = _memory_utility.DeviceMemory()
      self.cpu_buffer_a = _memory_utility.HostPinnedMemory()
      self.cpu_buffer_b = _memory_utility.HostPinnedMemory()
  
file_path: chainer/chainermn/communicators/non_cuda_aware_communicator.py
imports: import warnings
  import chainer.cuda
  import chainerx
  import math
  import mpi4py.MPI
  import numpy
  from chainermn.communicators import _communication_utility
  from chainermn.communicators import _memory_utility
  from chainermn.communicators import mpi_communicator_base
  from chainermn import nccl
label_desc: Use image node_id 1 to create a new NonCudaAwareCommunicator object from inherited base classes: mpi_communicator_base with example: obj = NonCudaAwareCommunicator(mpi_comm)