code: def test_horovod_torch_mnist(ray_start_4_cpus):
      num_workers = 2
      num_epochs = 2
      trainer = HorovodTrainer(
          horovod_torch_train_func,
          train_loop_config={"num_epochs": num_epochs, "lr": 1e-3},
          scaling_config=ScalingConfig(num_workers=num_workers),
      )
      results = trainer.fit()
      result = results.metrics
      assert result[TRAINING_ITERATION] == num_workers
  
      loss = list(results.metrics_dataframe["loss"])
      assert len(loss) == num_epochs
      assert loss[-1] < loss[0]
  
file_path: ray/python/ray/train/tests/test_examples.py
imports: import pytest
  from ray.air.constants import TRAINING_ITERATION
  from ray.train import ScalingConfig
  from ray.train.examples.horovod.horovod_example import train_func
  from ray.train.examples.pytorch.torch_fashion_mnist_example import train_func_per_worker
  from ray.train.examples.pytorch.torch_linear_example import train_func
  from ray.train.examples.pytorch.torch_quick_start import train_func
  from ray.train.examples.tf.tensorflow_mnist_example import train_func
  from ray.train.examples.tf.tensorflow_quick_start import train_func
  from ray.train.horovod.horovod_trainer import HorovodTrainer
  from ray.train.tensorflow.tensorflow_trainer import TensorflowTrainer
  from ray.train.torch.torch_trainer import TorchTrainer
label_desc: Use image node_id 6 for calling a global function with example usage: test_horovod_torch_mnist(ray_start_4_cpus) without return types