code: def start_workers(modules_info: dict, gpus: list, backend_addr: str):
      """
      InferenceWorker class provides workers for different GPU device.
  
      Args:
          modules_info(dict): modules info, include module name, version
          gpus(list): GPU devices index
          backend_addr(str): the port of PaddleHub-Serving zmq backend address
  
      Examples:
      .. code-block:: python
  
          modules_info = {'lac': {'init_args': {'version': '2.1.0'},
                                  'predict_args': {'batch_size': 1}}}
          start_workers(modules_name, ['0', '1', '2'], 'ipc://backend.ipc')
  
      """
      work_file = os.path.join(
          os.path.split(os.path.realpath(__file__))[0], "worker.py"
      )
      modules_info = json.dumps(modules_info)
      for index in range(len(gpus)):
          subprocess.Popen(
              [
                  "python",
                  work_file,
                  modules_info,
                  gpus[index],
                  backend_addr,
              ]
          )
  
file_path: PaddleHub/paddlehub/serving/device.py
imports: import zmq
  import time
  import os
  import json
  import platform
  import traceback
  import subprocess
  from paddlehub.utils import log
  from paddlehub.utils.utils import is_port_occupied
label_desc: Use image node_id 1 for calling a global function with example usage: start_workers(modules_info, gpus, backend_addr) without return types