summarize_from_feedback/utils/jobs.py (37 lines of code) (raw):

import os import subprocess from dataclasses import dataclass, field from typing import Callable, List import cloudpickle from summarize_from_feedback.utils import hyperparams @dataclass class JobHParams(hyperparams.HParams): name: str = None mode: str = "local" mpi: int = 1 @dataclass class Job(hyperparams.HParams): fn: Callable = None params: JobHParams = field(default_factory=JobHParams) def launch(job: Job): H = job.params if H.mode == "local": with open("/tmp/pickle_fn", "wb") as file: cloudpickle.dump(job.fn, file) env = os.environ.copy() env["JOB_NAME"] = H.name subprocess.check_call( [ "mpiexec", "-n", str(H.mpi), "python", "-c", 'import sys; import pickle; pickle.loads(open("/tmp/pickle_fn", "rb").read())()', ], env=env, ) else: raise NotImplementedError(f"unsupported launch mode {H.mode}") def multilaunch(jobs: List[Job]): return [launch(job) for job in jobs]