class_docstr: This should be a pickable class.
class_docstr_tok: ["This","should","be","a","pickable","class","."]
code: def _start_ray_node(self, command, tag):
      modified_env = self._prepare_env()
      print("Starting {} by running: {}".format(tag, command))
      process_info = session_execute(
          command=command, env=modified_env, tag=tag
      )
      spark_executor_pid = (
          RayServiceFuncGenerator._get_spark_executor_pid()
      )
      RayServiceFuncGenerator.start_ray_daemon(
          self.python_loc,
          pid_to_watch=spark_executor_pid,
          pgid_to_kill=process_info.pgid,
      )
      import ray._private.services as rservices
  
      process_info.node_ip = rservices.get_node_ip_address()
      return process_info
  
imports: import os
  import re
  import subprocess
  import time
  import uuid
  import random
  import warnings
  import tempfile
  import filelock
  import multiprocessing
  from packaging import version
  from zoo.ray.process import session_execute, ProcessMonitor
  from zoo.ray.utils import is_local
  from zoo.ray.utils import resource_to_bytes
  from zoo.ray.utils import get_parent_pid
label_desc: Use image node_id 9 for calling the RayServiceFuncGenerator obj's underlying member method code with example usage: obj._start_ray_node(command, tag) and returns: process_info