code: def _run_multi_process_test(
      self,
      *,
      callable: Callable[
          ...,
          None,
      ],
      world_size: int = 2,
      # pyre-ignore
      **kwargs,
  ) -> None:
      ctx = multiprocessing.get_context("forkserver")
      processes = []
      for rank in range(world_size):
          kwargs["rank"] = rank
          kwargs["world_size"] = world_size
          p = ctx.Process(
              target=callable,
              kwargs=kwargs,
          )
          p.start()
          processes.append(p)
  
      for p in processes:
          p.join()
          self.assertEqual(0, p.exitcode)
  
file_path: torchrec/torchrec/distributed/test_utils/multi_process.py
imports: import multiprocessing
  import os
  import unittest
  from typing import Any, Callable, Dict, List, Optional
  import torch
  import torch.distributed
  from torchrec.distributed.comm import _CROSS_PG, _INTRA_PG
  from torchrec.test_utils import get_free_port, init_distributed_single_host, seed_and_log
label_desc: Use image node_id 3 for calling the MultiProcessTestBase obj's underlying member method code with example usage: obj._run_multi_process_test() without return types