code: def train_example(loggers, loaders, model, optimizer, scheduler):
      start_epoch = 0
      if cfg.train.auto_resume:
          start_epoch = load_ckpt(
              model, optimizer, scheduler, cfg.train.epoch_resume
          )
      if start_epoch == cfg.optim.max_epoch:
          logging.info("Checkpoint found, Task already done")
      else:
          logging.info("Start from epoch %s", start_epoch)
  
      num_splits = len(loggers)
      for cur_epoch in range(start_epoch, cfg.optim.max_epoch):
          train_epoch(
              loggers[0], loaders[0], model, optimizer, scheduler
          )
          loggers[0].write_epoch(cur_epoch)
          if is_eval_epoch(cur_epoch):
              for i in range(1, num_splits):
                  eval_epoch(loggers[i], loaders[i], model)
                  loggers[i].write_epoch(cur_epoch)
          if is_ckpt_epoch(cur_epoch):
              save_ckpt(model, optimizer, scheduler, cur_epoch)
      for logger in loggers:
          logger.close()
      if cfg.train.ckpt_clean:
          clean_ckpt()
  
      logging.info("Task done, results saved in %s", cfg.run_dir)
  
file_path: pytorch_geometric/graphgym/custom_graphgym/train/example.py
imports: import logging
  import time
  import torch
  from torch_geometric.graphgym.checkpoint import clean_ckpt, load_ckpt, save_ckpt
  from torch_geometric.graphgym.config import cfg
  from torch_geometric.graphgym.loss import compute_loss
  from torch_geometric.graphgym.register import register_train
  from torch_geometric.graphgym.utils.epoch import is_ckpt_epoch, is_eval_epoch
label_desc: Use image node_id 3 for calling a global function with example usage: train_example(loggers, loaders, model, optimizer, scheduler) without return types