code: def save_model_checkpoint(
      self, model, optimizer, scheduler, step, current_epoch
  ):
      path_ckpt = join(
          self.config["log_dir"], f"model_{self.name_suffix}_{step}.bin"
      )
      torch.save(
          {
              "current_epoch": current_epoch,
              "model_state_dict": model.state_dict(),
              "optimizer_state_dict": optimizer.state_dict(),
              "scheduler_state_dict": scheduler.state_dict(),
          },
          path_ckpt,
      )
      logger.info("Saved model, optmizer, scheduler to %s" % path_ckpt)
      return
  
imports: import sys
  import os
  import logging
  import random
  import numpy
  import torch
  from torch import nn
  from torch.optim import AdamW
  from util.multigpu_fused_adam import FusedAdam
  from torch.optim.lr_scheduler import LambdaLR
  from torch.utils.data import DataLoader
  import time
  from os.path import join
  from datetime import datetime
  import util
  from util.tensorize_coref import CorefDataProcessor, coref_collate_fn
  from util.tensorize_ner import NERDataProcessor, ner_collate_fn
  from util.tensorize_ere import EREDataProcessor, ere_collate_fn
  from metrics import CorefEvaluator, MentionEvaluator
  from models.model_coref import CorefModel
  from models.model_ner import NERModel
  from models.model_ere import EREModel
  import wandb
label_desc: Use image node_id 7 for calling the Runner obj's underlying member method code with example usage: obj.save_model_checkpoint(model, optimizer, scheduler, step, current_epoch) without return types