code: def train_yseq_hvd(workers_per_node, epochs, **config):
      from zoo.orca.learn.pytorch import Estimator
  
      estimator = Estimator.from_torch(
          model=model_creator,
          optimizer=optimizer_creator,
          loss=loss_creator,
          workers_per_node=workers_per_node,
          config=config,
          backend="horovod",
      )
  
      stats = estimator.fit(train_data_creator, epochs=epochs)
      for s in stats:
          for k, v in s.items():
              print(f"{k}: {v}")
      val_stats = estimator.evaluate(val_data_creator)
      val_loss = val_stats["val_loss"]
  
      # retrieve the model
      yseq = estimator.get_model()
      estimator.shutdown()
      return yseq, val_loss
  
imports: import torch
  import torch.nn
  import torch.optim
  from torch.utils.data import DataLoader
  import torch.distributed
  from zoo.chronos.model.tcmf.local_model import TemporalConvNet
  import ray
  import horovod.torch
label_desc: Use image node_id 9 for calling a global function with example usage: train_yseq_hvd(workers_per_node, epochs) and returns: yseq,  val_loss