code: def _run_multi_process_test(
      self,
      world_size: int,
      backend: str,
      callable: Callable[[], None],
  ) -> None:
      processes = []
      ctx = multiprocessing.get_context("spawn")
      for rank in range(world_size):
          p = ctx.Process(
              target=callable,
              args=(
                  rank,
                  world_size,
                  backend,
              ),
          )
          p.start()
          processes.append(p)
  
      for p in processes:
          p.join()
          self.assertEqual(0, p.exitcode)
  
imports: import multiprocessing
  import os
  import unittest
  from typing import Callable
  from unittest import mock
  import torch.distributed
  from torch._utils_internal import TEST_MASTER_ADDR
  from torchrec.distributed.collective_utils import invoke_on_rank_and_broadcast_result, is_leader, run_on_leader
  from torchrec.test_utils import get_free_port, seed_and_log
label_desc: Use image node_id 3 for calling the CollectiveUtilsTest obj's underlying member method code with example usage: obj._run_multi_process_test(world_size, backend, callable) without return types