code: def on_train_end(self, logs=None):
      img_sec_mean = np.mean(self.img_secs)
      img_sec_conf = 1.96 * np.std(self.img_secs)
      print(
          "Img/sec per %s: %.1f +-%.1f"
          % (device, img_sec_mean, img_sec_conf)
      )
      print(
          "Total img/sec on %d %s(s): %.1f +-%.1f"
          % (
              hvd.size(),
              device,
              hvd.size() * img_sec_mean,
              hvd.size() * img_sec_conf,
          )
      )
  
file_path: horovod/examples/tensorflow2/tensorflow2_keras_synthetic_benchmark.py
imports: import argparse
  import os
  import numpy
  from timeit import default_timer
  import tensorflow
  import horovod.tensorflow.keras
  from tensorflow.keras import applications
label_desc: Use image node_id 2 for calling the TimingCallback obj's underlying member method code with example usage: obj.on_train_end(logs) without return types