| import copy |
| import json |
| import subprocess |
| import torch |
|
|
| import logging |
| LOG = logging.getLogger(__name__) |
|
|
|
|
| def load_json(jsonfile): |
| with open(jsonfile, "r") as jf: |
| res = json.load(jf) |
| return res |
|
|
|
|
| def save_config(config, filepath): |
| with open(filepath, "w") as outfile: |
| json.dump(config, outfile, indent=4) |
|
|
|
|
| def apply_diff(base_cfg, diff): |
| cfg = copy.deepcopy(base_cfg) |
| for k, v in diff.items(): |
| if isinstance(v, dict): |
| cfg[k] = apply_diff(base_cfg[k], v) |
| else: |
| cfg[k] = v |
| return cfg |
|
|
|
|
| def execute_bash_command(bash_command_string): |
| bash_return = subprocess.run(bash_command_string.split(), timeout=20) |
| return bash_return |
|
|
|
|
| def get_torch_device(force_cpu=False, use_mps_if_available=False): |
| try: |
| if torch.cuda.is_available() and not force_cpu: |
| device_string = "cuda" |
| elif use_mps_if_available and torch.backends.mps.is_available() and not force_cpu: |
| device_string = "mps" |
| else: |
| device_string = "cpu" |
| except Exception as exc: |
| LOG.error(f'Exception: {exc}') |
| device_string = "cpu" |
| LOG.info(f'Using device: {device_string}') |
| device = torch.device(device_string) |
| return device |
|
|