コード例 #1
0
ファイル: environments.py プロジェクト: ClemensBuechner/lab
 def _get_run_job_body(self):
     return tools.fill_template(
         self.RUN_JOB_BODY_TEMPLATE_FILE,
         task_order=" ".join(str(i) for i in self._get_task_order()),
         exp_path="../" + self.exp.name,
         python=tools.get_python_executable(),
     )
コード例 #2
0
 def _write_run_dispatcher(self):
     dispatcher_content = tools.fill_template(
         'run-dispatcher.py', task_order=self._get_task_order())
     self.exp.add_new_file('',
                           'run-dispatcher.py',
                           dispatcher_content,
                           permissions=0o755)
コード例 #3
0
 def _get_step_job_body(self, step):
     return tools.fill_template(
         self.STEP_JOB_BODY_TEMPLATE_FILE,
         cwd=os.getcwd(),
         python=tools.get_python_executable(),
         script=sys.argv[0],
         step_name=step.name)
コード例 #4
0
    def write_main_script(self):
        script = tools.fill_template(
            'local-job.py',
            task_order=self._get_task_order(),
            processes=self.processes)

        self.exp.add_new_file('', self.EXP_RUN_SCRIPT, script, permissions=0o755)
コード例 #5
0
    def write_main_script(self):
        script = tools.fill_template(
            "local-job.py",
            task_order=self._get_task_order(len(self.exp.runs)),
            processes=self.processes,
        )

        self.exp.add_new_file("", self.EXP_RUN_SCRIPT, script, permissions=0o755)
コード例 #6
0
 def _get_run_job_body(self, run_step):
     num_runs = len(self.exp.runs)
     num_tasks = self._get_num_tasks(run_step)
     logging.info(f"Grouping {num_runs} runs into {num_tasks} Slurm tasks.")
     return tools.fill_template(
         self.RUN_JOB_BODY_TEMPLATE_FILE,
         exp_path="../" + self.exp.name,
         num_runs=num_runs,
         python=tools.get_python_executable(),
         runs_per_task=self._get_num_runs_per_task(),
         task_order=" ".join(str(i) for i in self._get_task_order(num_tasks)),
     )
コード例 #7
0
ファイル: experiment.py プロジェクト: silvansievers/lab
    def _build_run_script(self):
        if not self.commands:
            logging.critical("Please add at least one command")

        exp_vars = self.experiment._env_vars
        run_vars = self._env_vars
        doubly_used_vars = set(exp_vars) & set(run_vars)
        if doubly_used_vars:
            logging.critical(
                f"Resource names cannot be shared between experiments "
                f"and runs, they must be unique: {doubly_used_vars}"
            )
        env_vars = exp_vars
        env_vars.update(run_vars)
        env_vars = self._prepare_env_vars(env_vars)

        def make_call(name, cmd, kwargs):
            kwargs["name"] = name

            # Support running globally installed binaries.
            def format_arg(arg):
                if isinstance(arg, str):
                    try:
                        return repr(arg.format(**env_vars))
                    except KeyError as err:
                        logging.critical(f"Resource {err} is undefined.")
                else:
                    return repr(str(arg))

            def format_key_value_pair(key, val):
                if isinstance(val, str):
                    formatted_value = format_arg(val)
                else:
                    formatted_value = repr(val)
                return f"{key}={formatted_value}"

            cmd_string = f"[{', '.join([format_arg(arg) for arg in cmd])}]"
            kwargs_string = ", ".join(
                format_key_value_pair(key, value)
                for key, value in sorted(kwargs.items())
            )
            parts = [cmd_string]
            if kwargs_string:
                parts.append(kwargs_string)
            return f"Call({', '.join(parts)}, **redirects).wait()\n"

        calls_text = "\n".join(
            make_call(name, cmd, kwargs)
            for name, (cmd, kwargs) in self.commands.items()
        )
        run_script = tools.fill_template("run.py", calls=calls_text)

        self.add_new_file("", "run", run_script, permissions=0o755)
コード例 #8
0
ファイル: experiment.py プロジェクト: bernardobgam/blocmarket
    def _build_run_script(self):
        if not self.commands:
            logging.critical('Please add at least one command')

        exp_vars = self.experiment._env_vars
        run_vars = self._env_vars
        doubly_used_vars = set(exp_vars) & set(run_vars)
        if doubly_used_vars:
            logging.critical(
                'Resource names cannot be shared between experiments '
                'and runs, they must be unique: {}'.format(doubly_used_vars))
        env_vars = exp_vars
        env_vars.update(run_vars)
        env_vars = self._prepare_env_vars(env_vars)

        def make_call(name, cmd, kwargs):
            kwargs['name'] = name

            # Support running globally installed binaries.
            def format_arg(arg):
                if isinstance(arg, tools.string_type):
                    try:
                        return repr(arg.format(**env_vars))
                    except KeyError as err:
                        logging.critical(
                            'Resource {} is undefined.'.format(err))
                else:
                    return repr(str(arg))

            def format_key_value_pair(key, val):
                if isinstance(val, tools.string_type):
                    formatted_value = format_arg(val)
                else:
                    formatted_value = repr(val)
                return '{}={}'.format(key, formatted_value)

            cmd_string = '[{}]'.format(', '.join(
                [format_arg(arg) for arg in cmd]))
            kwargs_string = ', '.join(
                format_key_value_pair(key, value)
                for key, value in sorted(kwargs.items()))
            parts = [cmd_string]
            if kwargs_string:
                parts.append(kwargs_string)
            return ('Call({}, **redirects).wait()\n'.format(', '.join(parts)))

        calls_text = '\n'.join(
            make_call(name, cmd, kwargs)
            for name, (cmd, kwargs) in self.commands.items())
        run_script = tools.fill_template('run.py', calls=calls_text)

        self.add_new_file('', 'run', run_script, permissions=0o755)
コード例 #9
0
ファイル: environments.py プロジェクト: ClemensBuechner/lab
 def _get_job_header(self, step, is_last):
     job_params = self._get_job_params(step, is_last)
     return tools.fill_template(self.JOB_HEADER_TEMPLATE_FILE, **job_params)
コード例 #10
0
 def _get_run_job_body(self):
     return tools.fill_template(self.RUN_JOB_BODY_TEMPLATE_FILE,
                                task_order=' '.join(
                                    str(i) for i in self._get_task_order()),
                                exp_path='../' + self.exp.name)