code: def on_validation_end(self, metrics):
      # TODO: This hangs with pipeline parallel.
      metrics.update(
          run_eval_harness(
              self.model,
              self.forward_step_fn,
              self.neox_args,
              eval_tasks=self.neox_args.eval_tasks,
          )
      )
  
imports: import logging
  import os
  import numpy
  from attrdict import AttrMap
  from eval_tasks.eval_adapter import run_eval_harness
  from megatron.neox_arguments import NeoXArgs
  from torch.utils.tensorboard import SummaryWriter
  from determined.pytorch import MetricReducer, PyTorchCallback
label_desc: Use image node_id 2 for calling the EvalHarness obj's underlying member method code with example usage: obj.on_validation_end(metrics) without return types