code: def eval_epoch(logger, loader, model):
      model.eval()
      time_start = time.time()
      for batch in loader:
          batch.to(torch.device(cfg.device))
          pred, true = model(batch)
          loss, pred_score = compute_loss(pred, true)
          logger.update_stats(
              true=true.detach().cpu(),
              pred=pred_score.detach().cpu(),
              loss=loss.item(),
              lr=0,
              time_used=time.time() - time_start,
              params=cfg.params,
          )
          time_start = time.time()
  
file_path: GraphGym/graphgym/contrib/train/example.py
imports: import logging
  import time
  import torch
  from graphgym.checkpoint import clean_ckpt, load_ckpt, save_ckpt
  from graphgym.config import cfg
  from graphgym.loss import compute_loss
  from graphgym.register import register_train
  from graphgym.utils.epoch import is_ckpt_epoch, is_eval_epoch
label_desc: Use image node_id 2 for calling a global function with example usage: eval_epoch(logger, loader, model) without return types