code: def setup(
      self, params, backend="ray", runner_cls=None, workers_per_node=1
  ):
      ray_ctx = OrcaRayContext.get()
      if backend == "ray":
          self.init_ddp_process = False
          self.cores_per_node = (
              ray_ctx.ray_node_cpu_cores // workers_per_node
          )
          self.num_nodes = ray_ctx.num_ray_nodes * workers_per_node
          RemoteRunner = ray.remote(num_cpus=self.cores_per_node)(
              runner_cls
          )
          self.remote_workers = [
              RemoteRunner.remote(**params)
              for i in range(self.num_nodes)
          ]
          ray.get(
              [
                  worker.setup.remote(self.cores_per_node)
                  for i, worker in enumerate(self.remote_workers)
              ]
          )
          ray.get(
              [
                  worker.setup_torch_estimator.remote(i, self.num_nodes)
                  for i, worker in enumerate(self.remote_workers)
              ]
          )
      elif backend == "horovod":
          from bigdl.orca.learn.horovod.horovod_ray_runner import (
              HorovodRayRunner,
          )
  
          self.horovod_runner = HorovodRayRunner(
              ray_ctx,
              worker_cls=runner_cls,
              worker_param=params,
              workers_per_node=workers_per_node,
          )
          self.remote_workers = self.horovod_runner.remote_workers
          cores_per_node = self.horovod_runner.cores_per_node
          ray.get(
              [
                  worker.setup.remote(cores_per_node)
                  for i, worker in enumerate(self.remote_workers)
              ]
          )
  
          ray.get(
              [
                  worker.setup_horovod.remote()
                  for i, worker in enumerate(self.remote_workers)
              ]
          )
      else:
          invalidInputError(
              False,
              'Only "ray" and "horovod" are supported '
              "values of backend, but got {}".format(backend),
          )
      self.num_workers = len(self.remote_workers)
  
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 6 for calling the BaseRayEstimator obj's underlying member method code with example usage: obj.setup(params, backend, runner_cls, workers_per_node) without return types