import json from pprint import pprint import subprocess import random with open("config_template.json", "r") as f: config_template = json.load(f) variables = [(k, v) for k, v in config_template.items() if isinstance(v, list)] consts = {k: v for k, v in config_template.items() if not isinstance(v, list)} # pprint(consts) def all_assignments(variables, consts): if len(variables) == 0: yield consts return k, vs = variables[0] for assignment in all_assignments(variables[1:], consts): for value in vs: if isinstance(value, dict): yield {**value, **assignment} else: yield {k: value, **assignment} assignments = list(all_assignments(variables, consts)) random.shuffle(assignments) for assignment in assignments: with open("config_hpgs.json", "w") as f: json.dump(assignment, f, indent=2) subprocess.run( [ "torchrun", "--standalone", "--nproc-per-node", "gpu", "distributed.py", "config_hpgs.json", ] )