class_docstr: The Slurm Evaluator is a class designed to continuously monitor VISSL pretrainings
  and launch evaluations as checkpoints become available. The method takes a
  config dictionary consisting of the training checkpoint directory, an array of
  benchmarks, and information on how often to evaluate the trainings.
code: def _validate_evaluation_setup(self):
      if self.evaluation_iter_freq > -1:
          assert (
              self.evaluation_iter_freq
              % self.training_config.CHECKPOINT.CHECKPOINT_ITER_FREQUENCY
          ) == 0, "Evaluation iter frequency must evenly divide the checkpoint iter frequency"  # NOQA
  
      if self.evaluation_phase_freq > -1:
          assert (
              self.evaluation_phase_freq
              % self.training_config.CHECKPOINT.CHECKPOINT_FREQUENCY
          ) == 0, "Evaluation phase frequency must evenly divide the checkpoint phase frequency"  # NOQA
  
      assert g_pathmgr.exists(
          self.training_config.SLURM.LOG_FOLDER
      ), "Training slurm log folder must exist"
      assert g_pathmgr.exists(
          self.training_config.CHECKPOINT.DIR
      ), "Training slurm checkpoint folder must exist"
  
imports: import collections
  import json
  import logging
  import os
  import time
  from datetime import datetime
  from pathlib import Path
  from typing import List
  import submitit
  from iopath.common.file_io import g_pathmgr
  from vissl.config.attr_dict import AttrDict
  from vissl.utils.distributed_launcher import launch_distributed_on_slurm
  from vissl.utils.hydra_config import compose_hydra_configuration, convert_to_attrdict
  from vissl.utils.io import load_file, makedir
  from vissl.utils.misc import flatten_dict, retry
label_desc: Use image node_id 8 for calling the BenchmarkSuiteScheduler obj's underlying member method code with example usage: obj._validate_evaluation_setup() without return types