code: def test_horovod_initialized_correctly(self):
      estimator = Estimator.from_torch(
          model=model_creator,
          optimizer=optimizer_creator,
          loss=nn.MSELoss(),
          scheduler_creator=scheduler_creator,
          config={
              "lr": 1e-2,  # used in optimizer_creator
              "hidden_size": 1,  # used in model_creator
          },
          backend="horovod",
          workers_per_node=2,
      )
  
      def get_size():
          import horovod.torch as hvd
  
          return hvd.size()
  
      results = estimator.estimator.horovod_runner.run(get_size)
      assert results == [2, 2]
  
      def get_rank():
          import horovod.torch as hvd
  
          return hvd.rank()
  
      results = estimator.estimator.horovod_runner.run(get_rank)
      results = sorted(results)
      assert results == [0, 1]
      estimator.shutdown()
  
file_path: analytics-zoo/pyzoo/test/zoo/orca/learn/ray/pytorch/test_estimator_horovod_backend.py
imports: from zoo.examples.orca.learn.horovod.pytorch_estimator import model_creator, optimizer_creator, scheduler_creator, train_data_creator, validation_data_creator
  from zoo.orca.learn.pytorch import Estimator
  from unittest import TestCase
  import pytest
  import torch
  import torch.nn
  import os
  from tempfile import TemporaryDirectory
label_desc: Use image node_id 2 for calling the TestPyTorchEstimator obj's underlying member method code with example usage: obj.test_horovod_initialized_correctly() and returns: hvd, hvd