1- from typing import Iterable
1+ #!/usr/bin/env python
2+ from typing import Dict , Iterable
23import argparse
34import logging
45
56from catalyst import utils
67from catalyst .registry import REGISTRY
78
89
9- def parse_args ():
10+ def parse_args (args : Iterable = None , namespace : argparse . Namespace = None ):
1011 """Parses the command line arguments and returns arguments and config."""
1112 parser = argparse .ArgumentParser ()
1213 parser .add_argument (
@@ -29,18 +30,14 @@ def parse_args():
2930 )
3031 utils .boolean_flag (parser , "benchmark" , default = None , help = "Use CuDNN benchmark" )
3132
32- args , unknown_args = parser .parse_known_args ()
33+ args , unknown_args = parser .parse_known_args (args = args , namespace = namespace )
3334 return vars (args ), unknown_args
3435
3536
36- def run_from_config (
37- configs : Iterable [str ],
38- deterministic : bool = None ,
39- benchmark : bool = None ,
40- ) -> None :
41- """Creates Runner from YAML configs and runs experiment."""
42- logger = logging .getLogger (__name__ )
43-
37+ def process_configs (
38+ configs : Iterable [str ], deterministic : bool = None , benchmark : bool = None
39+ ) -> Dict :
40+ """Merges YAML configs and prepares env."""
4441 # there is no way to set deterministic/benchmark flags with a runner,
4542 # so do it manually
4643 utils .prepare_cudnn (deterministic , benchmark )
@@ -49,9 +46,13 @@ def run_from_config(
4946 for config_path in configs :
5047 config_part = utils .load_config (config_path , ordered = True )
5148 config = utils .merge_dicts (config , config_part )
52- # config_copy = copy.deepcopy(config)
5349
54- experiment_params = REGISTRY .get_from_params (** config )
50+ return config
51+
52+
53+ def run_from_params (experiment_params : Dict ) -> None :
54+ """Runs multi-stage experiment."""
55+ logger = logging .getLogger (__name__ )
5556
5657 runner = experiment_params ["runner" ]
5758 for stage_params in experiment_params ["run" ]:
@@ -62,15 +63,21 @@ def run_from_config(
6263 if result is not None :
6364 logger .info (f"{ name } :\n { result } " )
6465
65- # TODO: check if needed
66- # logdir = getattr(runner, "logdir", getattr(runner, "_logdir"), None)
67- # if logdir and utils.get_rank() <= 0:
68- # utils.dump_environment(logdir=logdir, config=config_copy, configs_path=configs)
66+
67+ def run_from_config (
68+ configs : Iterable [str ],
69+ deterministic : bool = None ,
70+ benchmark : bool = None ,
71+ ) -> None :
72+ """Creates Runner from YAML configs and runs experiment."""
73+ config = process_configs (configs , deterministic = deterministic , benchmark = benchmark )
74+ experiment_params = REGISTRY .get_from_params (** config )
75+ run_from_params (experiment_params )
6976
7077
7178def main ():
7279 """Runs the ``catalyst-run`` script."""
73- kwargs , unknown_args = parse_args ()
80+ kwargs , _ = parse_args ()
7481 run_from_config (** kwargs )
7582
7683
0 commit comments