code: def setup_torch_ddp(self):
      import torch.distributed as dist
  
      driver_ip = get_driver_node_ip()
      driver_tcp_store_port = find_free_port()
  
      _ = dist.TCPStore(
          driver_ip,
          driver_tcp_store_port,
          -1,
          True,
          dist.constants.default_pg_timeout,
      )
  
      ray.get(
          [
              worker.setup_torch_distribute.remote(
                  driver_ip, driver_tcp_store_port, i, self.num_nodes
              )
              for i, worker in enumerate(self.remote_workers)
          ]
      )
  
      self.init_ddp_process = True
  
imports: from bigdl.orca.learn.ray_estimator import BaseEstimator
  from bigdl.orca.ray import OrcaRayContext
  from bigdl.orca.data.file import enable_multi_fs_save, enable_multi_fs_load
  import io
  import torch
  import ray
  from ray.exceptions import RayActorError
  from abc import abstractmethod, ABCMeta
  from bigdl.orca.learn.pytorch.utils import find_free_port, check_for_failure
  from bigdl.orca.learn.utils import get_driver_node_ip
  from bigdl.dllib.utils.log4Error import invalidInputError, logging
  from typing import Dict
label_desc: Use image node_id 7 for calling the BaseRayEstimator obj's underlying member method code with example usage: obj.setup_torch_ddp() without return types