code: def save(self, runner_state: dict, metarunner_state: dict):
      to_save = {
          "runner_state": runner_state,
          "metarunner_state": metarunner_state,
          "metadata": self.metadata,
      }
      torch_utils.safe_save(to_save, self.save_path)
  
imports: from typing import Dict
  from dataclasses import dataclass
  import torch
  import jiant.tasks.evaluate
  import jiant.utils.torch_utils
  from jiant.proj.main.components.container_setup import JiantTaskContainer
  from jiant.proj.main.modeling.primary import JiantModel, wrap_jiant_forward
  from jiant.shared.constants import PHASE
  from jiant.shared.runner import complex_backpropagate, get_train_dataloader_from_cache, get_eval_dataloader_from_cache
  from jiant.utils.display import maybe_tqdm
  from jiant.utils.python.datastructures import InfiniteYield, ExtendedDataClassMixin
label_desc: Use image node_id 2 for calling the CheckpointSaver obj's underlying member method code with example usage: obj.save(runner_state, metarunner_state) without return types