code: def test_horovod_learning_rate_schedule(self):
      import horovod
  
      major, minor, patch = horovod.__version__.split(".")
  
      larger_major = int(major) > 0
      larger_minor = int(major) == 0 and int(minor) > 19
      larger_patch = (
          int(major) == 0 and int(minor) == 19 and int(patch) >= 2
      )
  
      if larger_major or larger_minor or larger_patch:
          ray_ctx = RayContext.get()
          batch_size = 32
          workers_per_node = 4
          global_batch_size = batch_size * workers_per_node
          config = {"lr": 0.8}
          trainer = Estimator.from_keras(
              model_creator=simple_model,
              compile_args_creator=compile_args,
              verbose=True,
              config=config,
              backend="horovod",
              workers_per_node=workers_per_node,
          )
          import horovod.tensorflow.keras as hvd
  
          callbacks = [
              hvd.callbacks.LearningRateWarmupCallback(
                  warmup_epochs=5, initial_lr=0.4, verbose=True
              ),
              hvd.callbacks.LearningRateScheduleCallback(
                  start_epoch=5,
                  end_epoch=10,
                  multiplier=1.0,
                  initial_lr=0.4,
              ),
              hvd.callbacks.LearningRateScheduleCallback(
                  start_epoch=10,
                  end_epoch=15,
                  multiplier=1e-1,
                  initial_lr=0.4,
              ),
              hvd.callbacks.LearningRateScheduleCallback(
                  start_epoch=15,
                  end_epoch=20,
                  multiplier=1e-2,
                  initial_lr=0.4,
              ),
              hvd.callbacks.LearningRateScheduleCallback(
                  start_epoch=20, multiplier=1e-3, initial_lr=0.4
              ),
              LRChecker(),
          ]
          for i in range(30):
              trainer.fit(
                  create_train_datasets,
                  epochs=1,
                  batch_size=global_batch_size,
                  callbacks=callbacks,
              )
      else:
          # skip tests in horovod lower version
          pass
  
imports: import shutil
  from unittest import TestCase
  import numpy
  import pytest
  import tensorflow
  from zoo import init_nncontext
  from zoo.orca.data import XShards
  import zoo.orca.data.pandas
  from zoo.orca.learn.tf2 import Estimator
  from zoo.ray import RayContext
  import ray
  import os
label_desc: Use image node_id 6 for calling the TestTFRayEstimator obj's underlying member method code with example usage: obj.test_horovod_learning_rate_schedule() without return types