class_docstr: MpiCommunicatorBase
  
  Implementation of communicator interface defined by
  :class:`CommunicatorBase`. This communicator assumes MPI4py and
  all ChainerMN processes are invoked by ``mpirun`` (``mpiexec``)
  command. Although this lacks several important methods such as
  ``multi_node_mean_grad`` to be impelmented with speficic algorithm. See
  hierarchical communicator or pure_nccl communicator for example.
code: def _pack_params_to_buffer(
      self,
      params,
      attr_name,
      buffer,
      allreduce_grad_dtype,
      zero_fill,
      stream=None,
  ):
      if self.batched_copy:
          params_data = _memory_utility.ParamsData(
              params, attr_name, zero_fill
          )
          _memory_utility._batched_pack_params(
              params_data, buffer, allreduce_grad_dtype, stream=stream
          )
          self.params_data = params_data
      else:
          _memory_utility.pack_params(
              params,
              attr_name,
              buffer,
              transfer_dtype=allreduce_grad_dtype,
              zero_fill=zero_fill,
              stream=stream,
          )
  
imports: import mpi4py
  import numpy
  import chainer
  import chainer.backends
  import chainer.utils
  from chainer.utils import collections_abc
  from chainermn.communicators import _communication_utility
  from chainermn.communicators._communication_utility import chunked_bcast_obj
  from chainermn.communicators import _memory_utility
  from chainermn.communicators import communicator_base
  import chainerx
label_desc: Use image node_id 30 for calling the MpiCommunicatorBase obj's underlying member method code with example usage: obj._pack_params_to_buffer(params, attr_name, buffer, allreduce_grad_dtype, zero_fill, stream) without return types