code: def _check_forward(
      self,
      mb_locs_local,
      mb_confs_local,
      gt_mb_locs_local,
      gt_mb_labels_local,
      k,
  ):
      loc_loss_local, conf_loss_local = multibox_loss(
          mb_locs_local,
          mb_confs_local,
          gt_mb_locs_local,
          gt_mb_labels_local,
          k,
          self.comm,
      )
  
      loc_loss_local = cuda.to_cpu(loc_loss_local.array)
      conf_loss_local = cuda.to_cpu(conf_loss_local.array)
      loc_loss = (
          self.comm.allreduce_obj(loc_loss_local) / self.comm.size
      )
      conf_loss = (
          self.comm.allreduce_obj(conf_loss_local) / self.comm.size
      )
  
      expect_loc_loss, expect_conf_loss = multibox_loss(
          self.mb_locs,
          self.mb_confs,
          self.gt_mb_locs,
          self.gt_mb_labels,
          k,
      )
      np.testing.assert_almost_equal(
          loc_loss, expect_loc_loss.array, decimal=2
      )
      np.testing.assert_almost_equal(
          conf_loss, expect_conf_loss.array, decimal=2
      )
  
imports: from __future__ import division
  import numpy
  import six
  import unittest
  import chainer
  from chainer.backends import cuda
  import chainer.functions
  from chainer import testing
  from chainermn import create_communicator
  from chainercv.links.model.ssd import multibox_loss
  from chainercv.utils.testing import attr
label_desc: Use image node_id 2 for calling the TestMultiNodeMultiboxLoss obj's underlying member method code with example usage: obj._check_forward(mb_locs_local, mb_confs_local, gt_mb_locs_local, gt_mb_labels_local, k) without return types