code: def run(self):
      pbar = tqdm(total=len(self.experiment_queue))
  
      while len(self.experiment_queue) > 0:
          exp = self.experiment_queue.pop(0)
          logger.debug(
              f'Popped exp_id = {exp["exp_id"]} from the queue'
          )
          logger.debug(f"Resource status: {self.status()}")
          reservations = self.resource_request(exp)
  
          if not reservations:
              logger.debug(
                  f'Unable to schedule exp_id = {exp["exp_id"]}'
              )
              self.experiment_queue.insert(0, exp)
              logger.debug(
                  f'Put exp_id = {exp["exp_id"]} back into the queue'
              )
              self.experiment_check(pbar)
          else:
              desc = ""
              for reservation in reservations:
                  reservation.slots.sort()
                  slots = ",".join(map(str, reservation.slots))
                  desc += f"{reservation.node.host}:{slots}@"
              desc = desc[:-1]
              logger.debug(
                  f'Running exp_id = {exp["exp_id"]} on {desc}'
              )
              self.run_job(exp, reservations)
  
      # All pending experiments are scheduled, waiting for them to complete
      while len(self.running_experiments) > 0:
          self.experiment_check(pbar)
  
imports: import copy
  from numpy import BUFSIZE
  import json
  import subprocess
  import sys
  import threading
  import time
  import base64
  import os
  import hjson
  from tqdm import tqdm
  from ..utils import logger
  from .constants import AUTOTUNING, AUTOTUNING_METRIC_PATH
  from .utils import get_val_by_key, search_error, was_interruptted
  from deepspeed import comm
label_desc: Use image node_id 7 for calling the ResourceManager obj's underlying member method code with example usage: obj.run() without return types