code: def get_all_configs(tuning_space: dict, ignore_keys=None):
      """Splits the tuning space dictionary to result in all combinations of values.
  
      Args:
          tuning_space (dict): the tuning space where tunable parameters are lists of values.
      """
  
      def gen_combinations(d: dict):
          keys, values = d.keys(), d.values()
          for v in values:
              if not isinstance(v, list):
                  v = [v]
          values_choices = (
              gen_combinations(v)
              if isinstance(v, dict)
              else get_list(v)
              for v in values
          )
          for comb in itertools.product(*values_choices):
              yield dict(zip(keys, comb))
  
      all_configs = []
      ignored_key_vals = {}
      for ik in ignore_keys:
          ignored_key_vals[ik] = tuning_space.get(ik, {})
          del_if_exists(ik, tuning_space)
      for c in gen_combinations(tuning_space):
          replace_dict(c, ignored_key_vals)
          all_configs.append(c)
      return all_configs
  
imports: import re
  import collections.abc
  import os
  import json
  from deepspeed.runtime.constants import GRADIENT_ACCUMULATION_STEPS, TRAIN_MICRO_BATCH_SIZE_PER_GPU
  import itertools
  import copy
  from ..utils import logger
label_desc: Use image node_id 17 for calling a global function with example usage: get_all_configs(tuning_space, ignore_keys) and returns: all_configs