From c2913215ee1df5ec5b575f740c4e616f2f585689 Mon Sep 17 00:00:00 2001 From: lukas leufen <l.leufen@fz-juelich.de> Date: Mon, 29 Jun 2020 18:05:20 +0200 Subject: [PATCH] updated all run scripts with new Workflow class, HPC_setup script is calling now the new run_HPC.py script --- HPC_setup/create_runscripts_HPC.sh | 2 +- run.py | 27 +++-------------- run_HPC.py | 19 ++++++++++++ run_hourly.py | 21 ++----------- run_zam347.py | 13 ++------ src/run.py | 16 ++++------ src/workflows/__init__.py | 2 +- src/workflows/default_workflow.py | 48 ++++++++++++++++++++++++++++-- 8 files changed, 83 insertions(+), 65 deletions(-) create mode 100644 run_HPC.py diff --git a/HPC_setup/create_runscripts_HPC.sh b/HPC_setup/create_runscripts_HPC.sh index 1322f47d..bcbb5fb0 100755 --- a/HPC_setup/create_runscripts_HPC.sh +++ b/HPC_setup/create_runscripts_HPC.sh @@ -112,7 +112,7 @@ timestamp=\`date +"%Y-%m-%d_%H%M-%S"\` export PYTHONPATH=\${PWD}/venv_${hpcsys}/lib/python3.6/site-packages:\${PYTHONPATH} -srun python run.py --experiment_date=\$timestamp +srun python run_HPC.py --experiment_date=\$timestamp EOT fi diff --git a/run.py b/run.py index 2395064c..a9d81906 100644 --- a/run.py +++ b/run.py @@ -1,38 +1,19 @@ __author__ = "Lukas Leufen" -__date__ = '2019-11-14' +__date__ = '2020-06-29' import argparse - -from src.run_modules.experiment_setup import ExperimentSetup -from src.run_modules.partition_check import PartitionCheck -from src.run_modules.model_setup import ModelSetup -from src.run_modules.post_processing import PostProcessing -from src.run_modules.pre_processing import PreProcessing -from src.run_modules.run_environment import RunEnvironment -from src.run_modules.training import Training +from src.workflows import DefaultWorkflow def main(parser_args): - experiment_date = parser_args.experiment_date - with RunEnvironment(): - ExperimentSetup(stations=['DEBW107', 'DEBY081', 'DEBW013', 'DEBW076', 'DEBW087', 'DEBW001'], - station_type='background', trainable=False, create_new_model=True, window_history_size=6, - experiment_date=experiment_date, create_new_bootstraps=False) - PreProcessing() - - PartitionCheck() - - ModelSetup() - Training() + workflow = DefaultWorkflow(**parser_args.__dict__) + workflow.run() - PostProcessing() if __name__ == "__main__": parser = argparse.ArgumentParser() parser.add_argument('--experiment_date', metavar='--exp_date', type=str, default="testrun", help="set experiment date as string") args = parser.parse_args() - main(args) - diff --git a/run_HPC.py b/run_HPC.py new file mode 100644 index 00000000..fc2ead40 --- /dev/null +++ b/run_HPC.py @@ -0,0 +1,19 @@ +__author__ = "Lukas Leufen" +__date__ = '2020-06-29' + +import argparse +from src.workflows import DefaultWorkflowHPC + + +def main(parser_args): + + workflow = DefaultWorkflowHPC(**parser_args.__dict__) + workflow.run() + + +if __name__ == "__main__": + parser = argparse.ArgumentParser() + parser.add_argument('--experiment_date', metavar='--exp_date', type=str, default="testrun", + help="set experiment date as string") + args = parser.parse_args() + main(args) diff --git a/run_hourly.py b/run_hourly.py index df326640..682988f6 100644 --- a/run_hourly.py +++ b/run_hourly.py @@ -3,27 +3,13 @@ __date__ = '2019-11-14' import argparse -from src.run_modules.experiment_setup import ExperimentSetup -from src.run_modules.model_setup import ModelSetup -from src.run_modules.post_processing import PostProcessing -from src.run_modules.pre_processing import PreProcessing -from src.run_modules.run_environment import RunEnvironment -from src.run_modules.training import Training +from src.workflows import DefaultWorkflow def main(parser_args): - experiment_date = parser_args.experiment_date - with RunEnvironment(): - ExperimentSetup(stations=['DEBW107', 'DEBY081', 'DEBW013', 'DEBW076', 'DEBW087', 'DEBW001'], - station_type='background', trainable=True, sampling="hourly", window_history_size=48, - experiment_date=experiment_date) - PreProcessing() - ModelSetup() - - Training() - - PostProcessing() + workflow = DefaultWorkflow(sampling="hourly", window_history_size=48, **parser_args.__dict__) + workflow.run() if __name__ == "__main__": @@ -31,5 +17,4 @@ if __name__ == "__main__": parser.add_argument('--experiment_date', metavar='--exp_date', type=str, default=None, help="set experiment date as string") args = parser.parse_args(["--experiment_date", "testrun"]) - main(args) diff --git a/run_zam347.py b/run_zam347.py index 69b3cd6f..2d351a89 100644 --- a/run_zam347.py +++ b/run_zam347.py @@ -11,6 +11,7 @@ from src.run_modules.post_processing import PostProcessing from src.run_modules.pre_processing import PreProcessing from src.run_modules.run_environment import RunEnvironment from src.run_modules.training import Training +from src.workflows import DefaultWorkflowHPC def load_stations(): @@ -29,17 +30,9 @@ def load_stations(): def main(parser_args): - experiment_date = parser_args.experiment_date - with RunEnvironment(): - ExperimentSetup(stations=load_stations(), station_type='background', trainable=False, create_new_model=True, - experiment_date=experiment_date) - PreProcessing() - ModelSetup() - - Training() - - PostProcessing() + workflow = DefaultWorkflowHPC(stations=load_stations(), **parser_args.__dict__) + workflow.run() if __name__ == "__main__": diff --git a/src/run.py b/src/run.py index 900ebb47..1494be0a 100644 --- a/src/run.py +++ b/src/run.py @@ -1,6 +1,7 @@ +__author__ = "Lukas Leufen" +__date__ = '2020-06-29' -from src.run_modules import * -import argparse +from src.workflows import DefaultWorkflow import inspect @@ -29,16 +30,11 @@ def run(stations=None, batch_size=None, epochs=None): - params = inspect.getfullargspec(ExperimentSetup).args + params = inspect.getfullargspec(DefaultWorkflow).args kwargs = {k: v for k, v in locals().items() if k in params and v is not None} - with RunEnvironment(): - ExperimentSetup(**kwargs) - PreProcessing() - PartitionCheck() - ModelSetup() - Training() - PostProcessing() + workflow = DefaultWorkflow(**kwargs) + workflow.run() if __name__ == "__main__": diff --git a/src/workflows/__init__.py b/src/workflows/__init__.py index 184734ae..57e514cd 100644 --- a/src/workflows/__init__.py +++ b/src/workflows/__init__.py @@ -1,2 +1,2 @@ from src.workflows.abstract_workflow import Workflow -from src.workflows.default_workflow import DefaultWorkflow \ No newline at end of file +from src.workflows.default_workflow import DefaultWorkflow, DefaultWorkflowHPC \ No newline at end of file diff --git a/src/workflows/default_workflow.py b/src/workflows/default_workflow.py index d20d8a73..6a60c6ae 100644 --- a/src/workflows/default_workflow.py +++ b/src/workflows/default_workflow.py @@ -10,8 +10,52 @@ from src.workflows.abstract_workflow import Workflow class DefaultWorkflow(Workflow): - """A default workflow executing ExperimentSetup, PreProcessing, PartitionCheck, ModelSetup, Training and - PostProcessing in exact the mentioned ordering.""" + """A default workflow executing ExperimentSetup, PreProcessing, ModelSetup, Training and PostProcessing in exact + the mentioned ordering.""" + + def __init__(self, stations=None, + station_type=None, + trainable=None, create_new_model=None, + window_history_size=None, + experiment_date="testrun", + network=None, + variables=None, statistics_per_var=None, + start=None, end=None, + target_var=None, target_dim=None, + window_lead_time=None, + dimensions=None, + interpolate_method=None, interpolate_dim=None, limit_nan_fill=None, + train_start=None, train_end=None, val_start=None, val_end=None, test_start=None, test_end=None, + use_all_stations_on_all_data_sets=None, fraction_of_train=None, + experiment_path=None, plot_path=None, forecast_path=None, bootstrap_path=None, overwrite_local_data=None, + sampling=None, + permute_data_on_training=None, extreme_values=None, extremes_on_right_tail_only=None, + transformation=None, + train_min_length=None, val_min_length=None, test_min_length=None, + evaluate_bootstraps=None, number_of_bootstraps=None, create_new_bootstraps=None, + plot_list=None, + model=None, + batch_size=None, + epochs=None): + super().__init__() + + # extract all given kwargs arguments + params = remove_items(inspect.getfullargspec(self.__init__).args, "self") + kwargs = {k: v for k, v in locals().items() if k in params and v is not None} + self._setup(**kwargs) + + def _setup(self, **kwargs): + """Set up default workflow.""" + self.add(ExperimentSetup, **kwargs) + self.add(PreProcessing) + self.add(ModelSetup) + self.add(Training) + self.add(PostProcessing) + + +class DefaultWorkflowHPC(Workflow): + """A default workflow for Jülich HPC systems executing ExperimentSetup, PreProcessing, PartitionCheck, ModelSetup, + Training and PostProcessing in exact the mentioned ordering.""" def __init__(self, stations=None, station_type=None, -- GitLab