code: def _run_horovod(csv_filename, **ludwig_kwargs):
      """Execute the training script across multiple workers in parallel."""
      input_features, output_features, rel_path = _prepare_data(
          csv_filename
      )
      cmdline = [
          "horovodrun",
          "-np",
          "2",
          sys.executable,
          TEST_SCRIPT,
          "--rel-path",
          rel_path,
          "--input-features",
          shlex.quote(json.dumps(input_features)),
          "--output-features",
          shlex.quote(json.dumps(output_features)),
          "--ludwig-kwargs",
          shlex.quote(json.dumps(ludwig_kwargs)),
      ]
      exit_code = subprocess.call(
          " ".join(cmdline), shell=True, env=os.environ.copy()
      )
      assert exit_code == 0
  
file_path: ludwig/tests/integration_tests/test_horovod.py
imports: import json
  import os
  import platform
  import shlex
  import subprocess
  import sys
  import pytest
  import torch
  from ludwig.constants import ENCODER, TYPE
  from tests.integration_tests.utils import category_feature, ENCODERS, generate_data, sequence_feature
label_desc: Use image node_id 2 for calling a global function with example usage: _run_horovod(csv_filename) without return types