code: def run(self, target, args=..., nprocs=1, envs=None) -> Any:
      if envs is not None:
          if isinstance(envs, list):
              invalidInputError(
                  nprocs == len(envs),
                  "envs must have the same length with nprocs",
              )
          elif isinstance(envs, dict):
              envs = [envs] * nprocs
          else:
              invalidInputError(
                  False, "envs must be a dict or a list of dict"
              )
  
      return self.run_subprocess(
          target, args=args, nprocs=nprocs, envs=envs
      )
  
file_path: BigDL/python/nano/src/bigdl/nano/deps/horovod/multiprocs_backend.py
imports: from bigdl.nano.utils.common import Backend
  from bigdl.nano.utils.common import invalidInputError
  import os
  from tempfile import TemporaryDirectory
  from typing import Any
label_desc: Use image node_id 3 for calling the HorovodBackend obj's underlying member method code with example usage: obj.run(target, args, nprocs, envs) and returns: self