class_docstr: An LLM engine that receives requests and generates texts.
  
  This is the main class for the vLLM engine. It receives requests
  from clients and generates texts from the LLM. It includes a tokenizer, a
  language model (possibly distributed across multiple GPUs), and GPU memory
  space allocated for intermediate states (aka KV cache). This class utilizes
  iteration-level scheduling and efficient memory management to maximize the
  serving throughput.
  
  The `LLM` class wraps this class for offline batched inference and the
  `AsyncLLMEngine` class wraps this class for online serving.
  
  NOTE: The config arguments are derived from the `EngineArgs` class. For the
  comprehensive list of arguments, see `EngineArgs`.
  
  Args:
      model_config: The configuration related to the LLM model.
      cache_config: The configuration related to the KV cache memory
          management.
      parallel_config: The configuration related to distributed execution.
      scheduler_config: The configuration related to the request scheduler.
      distributed_init_method: The initialization method for distributed
          execution. See `torch.distributed.init_process_group` for details.
      placement_group: Ray placement group for distributed execution.
          Required for distributed execution.
      log_stats: Whether to log statistics.
docstr: Runs the given method on all workers.
docstr_tok: ["Runs","the","given","method","on","all","workers","."]
code: def _run_workers(
      self,
      method: str,
      *args,
      get_all_outputs: bool = False,
      **kwargs,
  ) -> Any:
      """Runs the given method on all workers."""
      all_outputs = []
      for worker in self.workers:
          # bigdl-llm change start
          # summary: we disable ray here
          # if self.parallel_config.worker_use_ray:
          #     executor = partial(worker.execute_method.remote, method)
          # else:
          executor = getattr(worker, method)
  
          output = executor(*args, **kwargs)
          all_outputs.append(output)
  
      # if self.parallel_config.worker_use_ray:
      #     all_outputs = ray.get(all_outputs)
  
      # bigdl-llm change end
      if get_all_outputs:
          return all_outputs
  
      # Make sure all workers have the same results.
      output = all_outputs[0]
      for other_output in all_outputs[1:]:
          invalidInputError(
              output == other_output,
              "All workers should have same output",
          )
      return output
  
imports: import time
  from typing import TYPE_CHECKING, Any, Iterable, List, Optional, Tuple, Union, Dict
  from bigdl.llm.vllm.config import ModelConfig, SchedulerConfig
  from bigdl.llm.vllm.core.scheduler import SchedulerOutputs, FixedWindowScheduler
  from bigdl.llm.vllm.engine.arg_utils import EngineArgs
  from bigdl.llm.vllm.logger import init_logger
  from bigdl.llm.vllm.outputs import RequestOutput
  from bigdl.llm.vllm.sampling_params import SamplingParams
  from bigdl.llm.vllm.sequence import SamplerOutput, Sequence, SequenceGroup, SequenceGroupMetadata, SequenceStatus, SequenceOutputs
  from bigdl.llm.vllm.transformers_utils.tokenizer import get_tokenizer, detokenize_incrementally
  from bigdl.llm.vllm.utils import Counter
  from bigdl.llm.utils.common import invalidInputError
label_desc: Use image node_id 18 for calling the LLMEngine obj's underlying member method code with example usage: obj._run_workers(method) and returns: output, all_outputs