From fd51991288040c67831c22cb8ff96fb2d1416019 Mon Sep 17 00:00:00 2001 From: aramoto99 Date: Tue, 2 Aug 2022 17:43:52 +0900 Subject: [PATCH 01/12] (WIP) Add dynamic loading of optimizer by importlib. --- aiaccel/optimizer/optimizer.py | 17 ++++++++++++ aiaccel/start.py | 48 +++++++++++++++++----------------- examples/benchmark/config.yaml | 4 +-- 3 files changed, 43 insertions(+), 26 deletions(-) create mode 100644 aiaccel/optimizer/optimizer.py diff --git a/aiaccel/optimizer/optimizer.py b/aiaccel/optimizer/optimizer.py new file mode 100644 index 000000000..cb745c1c9 --- /dev/null +++ b/aiaccel/optimizer/optimizer.py @@ -0,0 +1,17 @@ +import copy +from pathlib import Path +from importlib.machinery import SourceFileLoader + + +class OptimizerLoeader: + def __init__(self, optimizer_dir: Path): + self.path = optimizer_dir / "search.py" + + if self.path.exists() is False: + assert False + + self.opt = SourceFileLoader('optimizer', str(self.path)).load_module() + + def get(self): + print(self.opt.__name__) + return self.opt \ No newline at end of file diff --git a/aiaccel/start.py b/aiaccel/start.py index a0dc17d76..46a37a5c3 100644 --- a/aiaccel/start.py +++ b/aiaccel/start.py @@ -12,11 +12,8 @@ from aiaccel.master.local_master import LocalMaster from aiaccel.scheduler.abci_scheduler import AbciScheduler from aiaccel.scheduler.local_scheduler import LocalScheduler -from aiaccel.optimizer.grid.search import GridSearchOptimizer from aiaccel.optimizer.nelder_mead.search import NelderMeadSearchOptimizer -from aiaccel.optimizer.random.search import RandomSearchOptimizer -from aiaccel.optimizer.sobol.search import SobolSearchOptimizer -from aiaccel.optimizer.tpe.search import TpeSearchOptimizer +from aiaccel.optimizer.optimizer import OptimizerLoeader from aiaccel.util import filesystem as fs from aiaccel.easy_visualizer import EasyVisualizer from aiaccel import parameter as pt @@ -25,6 +22,7 @@ from aiaccel.util.buffer import Buffer from aiaccel.config import Config from aiaccel.util.terminal import Terminal +from pathlib import Path class Arguments: @@ -507,34 +505,36 @@ class CreationOptimizer: def __init__(self, config_path: str) -> None: config = Config(config_path) algorithm = config.search_algorithm.get() + self.optimizer = OptimizerLoeader(Path(algorithm)).get() + # self.optimizer = NelderMeadSearchOptimizer - # === grid search=== - if algorithm.lower() == aiaccel.search_algorithm_grid: - self.optimizer = GridSearchOptimizer + # # === grid search=== + # if algorithm.lower() == aiaccel.search_algorithm_grid: + # self.optimizer = GridSearchOptimizer - # === nelder-mead search=== - elif algorithm.lower() == aiaccel.search_algorithm_nelder_mead: - self.optimizer = NelderMeadSearchOptimizer + # # === nelder-mead search=== + # elif algorithm.lower() == aiaccel.search_algorithm_nelder_mead: + # self.optimizer = NelderMeadSearchOptimizer - # === ramdom search=== - elif algorithm.lower() == aiaccel.search_algorithm_random: - self.optimizer = RandomSearchOptimizer + # # === ramdom search=== + # elif algorithm.lower() == aiaccel.search_algorithm_random: + # self.optimizer = RandomSearchOptimizer - # === sobol search === - elif algorithm.lower() == aiaccel.search_algorithm_sobol: - self.optimizer = SobolSearchOptimizer + # # === sobol search === + # elif algorithm.lower() == aiaccel.search_algorithm_sobol: + # self.optimizer = SobolSearchOptimizer - # === tpe search === - elif algorithm.lower() == aiaccel.search_algorithm_tpe: - self.optimizer = TpeSearchOptimizer + # # === tpe search === + # elif algorithm.lower() == aiaccel.search_algorithm_tpe: + # self.optimizer = TpeSearchOptimizer - # === other (error) === - else: - self.optimizer = None - config = None + # # === other (error) === + # else: + # self.optimizer = None + # config = None def __call__(self) -> Any: - return self.optimizer + return self.optimizer.NelderMeadSearchOptimizer class Master(CreationMaster(Arguments()['config'])()): diff --git a/examples/benchmark/config.yaml b/examples/benchmark/config.yaml index ea7f9e12f..e5dbfdcfa 100644 --- a/examples/benchmark/config.yaml +++ b/examples/benchmark/config.yaml @@ -13,9 +13,9 @@ ABCI: job_execution_options: "" optimize: - #search_algorithm: "nelder-mead" + search_algorithm: "../../aiaccel/optimizer/nelder_mead" #search_algorithm: "random" - search_algorithm: "sobol" + #search_algorithm: "sobol" #search_algorithm: "grid" #search_algorithm: "tpe" goal: "minimize" From ad3ac34645c226cc1ebc3ab73fd8b8be23db7a35 Mon Sep 17 00:00:00 2001 From: aramoto99 Date: Wed, 3 Aug 2022 00:51:19 +0900 Subject: [PATCH 02/12] (WIP) Add dynamic loading of optimizer by importlib. --- aiaccel/common.py | 10 +- aiaccel/config.py | 425 +----------------- aiaccel/optimizer/grid/search.py | 4 +- aiaccel/optimizer/nelder_mead/search.py | 4 +- aiaccel/optimizer/optimizer.py | 26 +- aiaccel/optimizer/random/search.py | 2 +- aiaccel/optimizer/sobol/search.py | 4 +- aiaccel/optimizer/tpe/search.py | 4 +- aiaccel/start.py | 33 +- docs/manual_jp.md | 4 +- examples/benchmark/config.yaml | 10 +- examples/resnet50_cifar10/config.yaml | 2 +- examples/schwefel/config.yaml | 2 +- examples/sphere/config.yaml | 2 +- examples/styblinski-tang/config.yaml | 2 +- examples/wrapper_sample/config.yaml | 2 +- tests/blackbox_test/benchmark2/testcode.py | 2 +- tests/integration/sphere/test_sphere_grid.py | 2 +- .../sphere/test_sphere_nelder_mead.py | 2 +- .../integration/sphere/test_sphere_random.py | 2 +- tests/integration/sphere/test_sphere_sobol.py | 2 +- tests/integration/sphere/test_sphere_tpe.py | 2 +- .../sphere/test_sphere_grid_resumption.py | 2 +- .../test_sphere_nelder_mead_resumption.py | 2 +- .../sphere/test_sphere_random_resumption.py | 2 +- .../sphere/test_sphere_sobol_resumption.py | 2 +- .../sphere/test_sphere_tpe_resumption.py | 2 +- tests/test_data/config.json | 2 +- tests/test_data/config_abci.json | 2 +- tests/test_data/config_grid.json | 2 +- tests/test_data/config_grid_resumption.json | 2 +- tests/test_data/config_nelder-mead.json | 2 +- .../config_nelder-mead_resumption.json | 2 +- tests/test_data/config_random.json | 2 +- tests/test_data/config_random_resumption.json | 2 +- tests/test_data/config_sobol.json | 2 +- tests/test_data/config_sobol_resumption.json | 2 +- tests/test_data/config_tpe.json | 2 +- tests/test_data/config_tpe_resumption.json | 2 +- tests/test_data/grid_config.json | 2 +- tests/unit/abci_test/additionaloptions.json | 2 +- tests/unit/abci_test/additionaloptions2.json | 2 +- tests/unit/abci_test/cfg.json | 2 +- tests/unit/abci_test/cfg2.json | 2 +- tests/unit/abci_test/cfg3.json | 2 +- tests/unit/optimizer_test/test_grid_search.py | 10 +- tests/unit/optimizer_test/test_nelder_mead.py | 4 +- .../optimizer_test/test_nelder_mead_search.py | 6 +- tests/unit/optimizer_test/test_optimizer.py | 25 ++ .../unit/optimizer_test/test_random_search.py | 6 +- .../unit/optimizer_test/test_sobol_search.py | 6 +- tests/unit/optimizer_test/test_tpe_search.py | 6 +- tests/unit/test_config.py | 2 +- tests/unit/test_module.py | 4 +- 54 files changed, 123 insertions(+), 540 deletions(-) create mode 100644 tests/unit/optimizer_test/test_optimizer.py diff --git a/aiaccel/common.py b/aiaccel/common.py index 14ada2e15..1a327fa89 100644 --- a/aiaccel/common.py +++ b/aiaccel/common.py @@ -58,11 +58,11 @@ resource_type_local = 'local' resource_type_abci = 'abci' -search_algorithm_grid = 'grid' -search_algorithm_nelder_mead = 'nelder-mead' -search_algorithm_random = 'random' -search_algorithm_sobol = 'sobol' -search_algorithm_tpe = 'tpe' +search_algorithm_grid = 'aiaccel.optimizer.grid' +search_algorithm_nelder_mead = 'aiaccel.optimizer.nelder_mead' +search_algorithm_random = 'aiaccel.optimizer.random' +search_algorithm_sobol = 'aiaccel.optimizer.sobol' +search_algorithm_tpe = 'aiaccel.optimizer.tpe' def get_module_type_from_class_name(class_name: str) -> str: diff --git a/aiaccel/config.py b/aiaccel/config.py index f70f04687..15d0b028b 100644 --- a/aiaccel/config.py +++ b/aiaccel/config.py @@ -4,11 +4,7 @@ from typing import Any, Union import confile import copy -from aiaccel.common import search_algorithm_grid from aiaccel.common import search_algorithm_nelder_mead -from aiaccel.common import search_algorithm_random -from aiaccel.common import search_algorithm_sobol -from aiaccel.common import search_algorithm_tpe from aiaccel.util.terminal import Terminal from aiaccel.util.wd import get_num_node_all # wd/ import sys @@ -400,7 +396,7 @@ def __init__( .format(self.job_script_preamble.get()) ) sys.exit() - self.hps_format_check() + # self.hps_format_check() def define_items(self, config_file_path, warn): """ Define the configuration of the configuration file @@ -829,422 +825,3 @@ def define_items(self, config_file_path, warn): group="verification", keys=("condition") ) - - def hps_format_check(self): - """ Check the hyperparameter items. - Note - Available items - * Random: uniform_float, uniform_int, categorical, ordinal - * Grid: uniform_float, uniform_int, categorical, ordinal - * Sobol: uniform_float, uniform_int - * NM: uniform_float, uniform_int - * TPE: niform_float, uniform_int, categorical, ordinal - """ - algorithm = self.search_algorithm.get() - hyperparameters = self.hyperparameters.get() - - if hyperparameters == []: - Terminal().print_error( - "'hyperparameters' are empty." - ) - sys.exit() - - # === item check (individual)=== - if algorithm.lower() == search_algorithm_random: - self._check_random_setting_format(algorithm, hyperparameters) - - elif algorithm.lower() == search_algorithm_grid: - self._check_grid_setting_format(algorithm, hyperparameters) - - elif algorithm.lower() == search_algorithm_sobol: - self._check_sobol_setting_format(algorithm, hyperparameters) - - elif algorithm.lower() == search_algorithm_nelder_mead: - self._check_neldermead_setting_format(algorithm, hyperparameters) - - elif algorithm.lower() == search_algorithm_tpe: - self._check_tpe_setting_format(algorithm, hyperparameters) - - else: - Terminal().print_error( - "algorithm: {} is not suportted.\n" - " You can set 'random', 'grid', 'sobol', " - "'nelder-mead', and 'tpe'" - .format(algorithm) - ) - sys.exit() - - def _check_random_setting_format( - self, - algorithm: str, - hyperparameters: list - ) -> None: - """ Check the format when random seach. - Args - algorithm (str): A name of seach algorithm. - hyperparameters (list): Items of hyperparametes - Note - Available items - uniform_float, uniform_int, categorical, ordinal - """ - hp_types = [ - 'uniform_float', - 'uniform_int', - 'categorical', - 'ordinal' - ] - fmt = FormatChecker(algorithm, hp_types, hyperparameters) - - # int, float - necessary_items = ["name", "type", "lower", "upper"] - optional_items = ["initial", "comment"] - fmt.check_uniform_int(necessary_items, optional_items) - fmt.check_uniform_float(necessary_items, optional_items) - - # categorical - necessary_items = ["name", "type", "choices"] - optional_items = ["initial", "comment"] - fmt.check_categorical(necessary_items, optional_items) - - # ordinal - necessary_items = ["name", "type", "lower", "upper", "sequence"] - optional_items = ["initial", "comment"] - fmt.check_ordinal(necessary_items, optional_items) - - # initial check - fmt.check_initial_type([int, float, str]) - - def _check_grid_setting_format( - self, - algorithm: str, - hyperparameters: list - ) -> None: - """ Check the format when grid search. - - Args: - algorithm (str): A name of seach algorithm. - hyperparameters (list): Items of hyperparametes - Note - Available items - uniform_float, uniform_int, categorical, ordinal - """ - hp_types = [ - 'uniform_float', - 'uniform_int' - ] - fmt = FormatChecker(algorithm, hp_types, hyperparameters) - - # int, float - necessary_items = [ - "name", "type", "lower", "upper", "log", "base", "step" - ] - optional_items = ["comment"] - fmt.check_uniform_int(necessary_items, optional_items) - fmt.check_uniform_float(necessary_items, optional_items) - - # categorical - necessary_items = ["name", "type", "choices"] - optional_items = ["comment"] - fmt.check_categorical(necessary_items, optional_items) - - # ordinal - necessary_items = ["name", "type", "lower", "upper", "sequence"] - optional_items = ["comment"] - fmt.check_ordinal(necessary_items, optional_items) - - # initial check - fmt.check_initial_type([int, float, str]) - - def _check_sobol_setting_format(self, algorithm, hyperparameters): - """ Check the format when sobol search. - - Args: - algorithm (str): A name of seach algorithm. - hyperparameters (list): Items of hyperparametes. - Note - Available items - * Sobol: uniform_float, uniform_int - """ - - # - # (Issues #14) - # https://gitlab.com/onishi-lab/opt/-/issues/14 - # The calculated value of hyperparameters set to int type - # in sobol search becomes a float. - # -> Int type is not supported. - # - - hp_types = [ - 'uniform_float' - ] - fmt = FormatChecker(algorithm, hp_types, hyperparameters) - - # int, float - necessary_items = ["name", "type", "lower", "upper"] - optional_items = ["initial", "comment"] - fmt.check_uniform_int(necessary_items, optional_items) - fmt.check_uniform_float(necessary_items, optional_items) - - # initial check - fmt.check_initial_type([int, float]) - - def _check_neldermead_setting_format( - self, - algorithm: str, - hyperparameters: list - ): - """ Check the format when nelder-mead search. - - Args: - algorithm (str): A name of seach algorithm. - hyperparameters (list): Items of hyperparametes - Note - Available items - uniform_float, uniform_int - """ - hp_types = [ - 'uniform_float', - 'uniform_int' - ] - fmt = FormatChecker(algorithm, hp_types, hyperparameters) - - # int, float - necessary_items = ["name", "type", "lower", "upper"] - optional_items = ["initial", "comment"] - fmt.check_uniform_int(necessary_items, optional_items) - fmt.check_uniform_float(necessary_items, optional_items) - - # initial check - fmt.check_initial_type([int, float, list]) - - def _check_tpe_setting_format( - self, - algorithm: str, - hyperparameters: list - ) -> None: - """ Check the format when TPE search. - Args - algorithm (str): A name of seach algorithm. - hyperparameters (list): Items of hyperparametes - Note - Available items - niform_float, uniform_int, categorical, ordinal - """ - hp_types = [ - 'uniform_float', - 'uniform_int', - 'categorical', - 'ordinal' - ] - fmt = FormatChecker(algorithm, hp_types, hyperparameters) - - # int, float - necessary_items = ["name", "type", "lower", "upper"] - optional_items = ["initial", "comment"] - fmt.check_uniform_int(necessary_items, optional_items) - fmt.check_uniform_float(necessary_items, optional_items) - - # categorical - necessary_items = ["name", "type", "choices"] - optional_items = ["initial", "comment"] - fmt.check_categorical(necessary_items, optional_items) - - # ordinal - necessary_items = ["name", "type", "lower", "upper", "sequence"] - optional_items = ["initial", "comment"] - fmt.check_ordinal(necessary_items, optional_items) - - # initial check - fmt.check_initial_type([int, float, str]) - - -class FormatChecker: - """ Configuration file format check - - Attributes: - supprt_search_types (list): - List of data types supported by this search algorithm. - * Items - * uniform_float - * uniform_int - * categorical - * ordinal - hyperparameters (list): Items of hyperparametes. - algorithm (str): search algorithm search algorithm. - """ - - def __init__( - self, - algorithm: str, - supprt_search_types: list, - hyperparameters: list - ): - self.supprt_search_types = supprt_search_types - self.hyperparameters = hyperparameters - self.algorithm = algorithm - for hp in self.hyperparameters: - if hp['type'] not in self.supprt_search_types: - Terminal().print_error( - "'{}' is not support {}" - .format(self.algorithm, hp['type']) - ) - sys.exit() - - def check_hyperparameters_item( - self, - hp: dict, - necessary_items: list, - optional_items: list - ) -> bool: - """ Check the hyperpaarmeters has necessary or optional items. - - Args: - hp (dict), - necessary_items (list): List of necessary items. - optional_items (list): List of optional items. - """ - necessary = set(necessary_items) - defines = set(hp.keys()) - not_found_items = list(necessary - defines) - - if len(not_found_items) > 0: - for item in not_found_items: - if item not in optional_items: - Terminal().print_error( - "Not found '{}' in 'hyperparameters'" - .format(item) - ) - return False - - not_supported_items = list(defines - necessary) - if len(not_supported_items) > 0: - for item in not_supported_items: - if item not in optional_items: - Terminal().print_error( - "'{}' is not supported in {} {}" - .format(item, self.algorithm, hp['type']) - ) - return False - return True - - def check_uniform_int( - self, - necessary_items: list, - optional_items: list - ) -> None: - """ check_uniform_int - - Check the format of a hyperparameter - when its data type is uniform int. - - Args: - hp (dict): Items of hyperparameter. - - necessary_items (list): List of necessary items. - example: ["name", "type", "lower", "upper"] - - optional_items (list): List of optional items. - example: ["initial", "comment"] - """ - for hp in self.hyperparameters: - if hp['type'] == 'uniform_int': - if self.check_hyperparameters_item( - hp, necessary_items, optional_items - ) is False: - sys.exit() - - def check_uniform_float( - self, - necessary_items: list, - optional_items: list - ) -> None: - """ check_uniform_float - - Check the format of a hyperparameter when - its data type is uniform float. - - Args: - hp (dict): Items of hyperparameter. - - necessary_items (list): List of necessary items. - example: ["name", "type", "lower", "upper"] - - optional_items (list): List of optional items. - example: ["initial", "comment"] - """ - for hp in self.hyperparameters: - if hp['type'] == 'uniform_float': - if self.check_hyperparameters_item( - hp, necessary_items, optional_items - ) is False: - sys.exit() - - def check_categorical( - self, - necessary_items: list, - optional_items: list - ) -> None: - """ check_categorical - - Check the format of a hyperparameter when - its data type is categorical. - - Args: - hp (dict): Items of hyperparameter. - - necessary_items (list): List of necessary items. - example: ["name", "type", "choices"] - - optional_items (list): List of optional items. - example: ["initial", "comment"] - """ - for hp in self.hyperparameters: - if hp['type'] == 'categorical': - if self.check_hyperparameters_item( - hp, necessary_items, optional_items - ) is False: - sys.exit() - - def check_ordinal( - self, - necessary_items: list, - optional_items: list - ) -> None: - """ check_ordinal - - Check the format of a hyperparameter when - its data type is ordinal. - - Args: - hp (dict): Items of hyperparameter. - - necessary_items (list): List of necessary items. - example: ["name", "type", "choices"] - - optional_items (list): List of optional items. - example: ["initial", "comment"] - """ - for hp in self.hyperparameters: - if hp['type'] == 'ordinal': - if self.check_hyperparameters_item( - hp, necessary_items, optional_items - ) is False: - sys.exit() - - def check_initial_type(self, types: list) -> None: - """ - Check the format defalt value. - Note: - When Nelder-Mead is used, it can be defined - in the form of a list, but in other cases, - a list cannot be used. - """ - for hp in self.hyperparameters: - if 'initial' in hp.keys(): - if type(hp['initial']) not in types: - Terminal().print_error( - "default values tpye: '{}' " - "is not suportted in {}" - .format(type(hp['initial']), self.algorithm) - ) - sys.exit() diff --git a/aiaccel/optimizer/grid/search.py b/aiaccel/optimizer/grid/search.py index 99282469b..5dabe08ed 100644 --- a/aiaccel/optimizer/grid/search.py +++ b/aiaccel/optimizer/grid/search.py @@ -62,7 +62,7 @@ def generate_grid_points(p: HyperParameter, config: Config) -> dict: return new_param -class GridSearchOptimizer(AbstractOptimizer): +class Optimizer(AbstractOptimizer): """An optimizer class with grid search algorithm. Attributes: @@ -71,7 +71,7 @@ class GridSearchOptimizer(AbstractOptimizer): """ def __init__(self, options: dict) -> None: - """Initial method of GridSearchOptimizer. + """Initial method of Optimizer. Args: config (str): A file name of a configuration. diff --git a/aiaccel/optimizer/nelder_mead/search.py b/aiaccel/optimizer/nelder_mead/search.py index 95f5925d4..262ad04c2 100644 --- a/aiaccel/optimizer/nelder_mead/search.py +++ b/aiaccel/optimizer/nelder_mead/search.py @@ -7,7 +7,7 @@ import numpy as np -class NelderMeadSearchOptimizer(AbstractOptimizer): +class Optimizer(AbstractOptimizer): """An optimizer class with nelder mead algorithm. Attributes: @@ -16,7 +16,7 @@ class NelderMeadSearchOptimizer(AbstractOptimizer): """ def __init__(self, options: dict) -> None: - """Initial method of NelderMeadSearchOptimizer. + """Initial method of Optimizer. Args: config (str): A file name of a configuration. diff --git a/aiaccel/optimizer/optimizer.py b/aiaccel/optimizer/optimizer.py index cb745c1c9..3b579e9d7 100644 --- a/aiaccel/optimizer/optimizer.py +++ b/aiaccel/optimizer/optimizer.py @@ -1,17 +1,23 @@ -import copy -from pathlib import Path +from functools import singledispatchmethod from importlib.machinery import SourceFileLoader +from importlib import import_module +from pathlib import Path +from typing import Union class OptimizerLoeader: - def __init__(self, optimizer_dir: Path): - self.path = optimizer_dir / "search.py" + def __init__(self, algorithm: Union[str, Path]): + self.opt = self.load(algorithm) - if self.path.exists() is False: - assert False + def get(self): + return self.opt - self.opt = SourceFileLoader('optimizer', str(self.path)).load_module() + @singledispatchmethod + def load(self, algorithm: str): + mod = algorithm + ".search" + return import_module(mod) - def get(self): - print(self.opt.__name__) - return self.opt \ No newline at end of file + @load.register + def _(self, algorithm: Path): + path = algorithm / "search.py" + return SourceFileLoader('optimizer', str(path)).load_module() diff --git a/aiaccel/optimizer/random/search.py b/aiaccel/optimizer/random/search.py index 6355c810b..da6a1e927 100644 --- a/aiaccel/optimizer/random/search.py +++ b/aiaccel/optimizer/random/search.py @@ -2,7 +2,7 @@ from typing import Optional -class RandomSearchOptimizer(AbstractOptimizer): +class Optimizer(AbstractOptimizer): """An optimizer class with a random algorithm. """ diff --git a/aiaccel/optimizer/sobol/search.py b/aiaccel/optimizer/sobol/search.py index 63b695814..194f349d9 100644 --- a/aiaccel/optimizer/sobol/search.py +++ b/aiaccel/optimizer/sobol/search.py @@ -7,7 +7,7 @@ import fasteners -class SobolSearchOptimizer(AbstractOptimizer): +class Optimizer(AbstractOptimizer): """An optimizer class with sobol algorithm. Attributes: @@ -18,7 +18,7 @@ class SobolSearchOptimizer(AbstractOptimizer): """ def __init__(self, options: dict) -> None: - """Initial method of SobolSearchOptimizer. + """Initial method of Optimizer. Args: config (str): A file name of a configuration. diff --git a/aiaccel/optimizer/tpe/search.py b/aiaccel/optimizer/tpe/search.py index cf44b4c5c..104a45bfb 100644 --- a/aiaccel/optimizer/tpe/search.py +++ b/aiaccel/optimizer/tpe/search.py @@ -12,9 +12,9 @@ import pathlib -class TpeSearchOptimizer(AbstractOptimizer): +class Optimizer(AbstractOptimizer): def __init__(self, options: dict) -> None: - """Initial method of TpeSearchOptimizer. + """Initial method of Optimizer. Args: options (dict): A file name of a configuration. diff --git a/aiaccel/start.py b/aiaccel/start.py index 46a37a5c3..579cc078d 100644 --- a/aiaccel/start.py +++ b/aiaccel/start.py @@ -12,7 +12,6 @@ from aiaccel.master.local_master import LocalMaster from aiaccel.scheduler.abci_scheduler import AbciScheduler from aiaccel.scheduler.local_scheduler import LocalScheduler -from aiaccel.optimizer.nelder_mead.search import NelderMeadSearchOptimizer from aiaccel.optimizer.optimizer import OptimizerLoeader from aiaccel.util import filesystem as fs from aiaccel.easy_visualizer import EasyVisualizer @@ -505,36 +504,12 @@ class CreationOptimizer: def __init__(self, config_path: str) -> None: config = Config(config_path) algorithm = config.search_algorithm.get() - self.optimizer = OptimizerLoeader(Path(algorithm)).get() - # self.optimizer = NelderMeadSearchOptimizer - - # # === grid search=== - # if algorithm.lower() == aiaccel.search_algorithm_grid: - # self.optimizer = GridSearchOptimizer - - # # === nelder-mead search=== - # elif algorithm.lower() == aiaccel.search_algorithm_nelder_mead: - # self.optimizer = NelderMeadSearchOptimizer - - # # === ramdom search=== - # elif algorithm.lower() == aiaccel.search_algorithm_random: - # self.optimizer = RandomSearchOptimizer - - # # === sobol search === - # elif algorithm.lower() == aiaccel.search_algorithm_sobol: - # self.optimizer = SobolSearchOptimizer - - # # === tpe search === - # elif algorithm.lower() == aiaccel.search_algorithm_tpe: - # self.optimizer = TpeSearchOptimizer - - # # === other (error) === - # else: - # self.optimizer = None - # config = None + if Path(algorithm).exists() is True: + algorithm = Path(algorithm) + self.optimizer = OptimizerLoeader(algorithm).get() def __call__(self) -> Any: - return self.optimizer.NelderMeadSearchOptimizer + return self.optimizer.Optimizer class Master(CreationMaster(Arguments()['config'])()): diff --git a/docs/manual_jp.md b/docs/manual_jp.md index a6195897d..9fb1189c9 100644 --- a/docs/manual_jp.md +++ b/docs/manual_jp.md @@ -185,7 +185,7 @@ ABCI: **サンプル** ```yaml optimize: - search_algorithm: "nelder-mead" + search_algorithm: "aiaccel.optimizer.nelder_mead" goal: "minimize" trial_number: 30 rand_seed: 42 @@ -417,7 +417,7 @@ ABCI: job_execution_options: "" optimize: - search_algorithm: "nelder-mead" + search_algorithm: "aiaccel.optimizer.nelder_mead" goal: "minimize" trial_number: 30 rand_seed: 42 diff --git a/examples/benchmark/config.yaml b/examples/benchmark/config.yaml index e5dbfdcfa..2f646aaa1 100644 --- a/examples/benchmark/config.yaml +++ b/examples/benchmark/config.yaml @@ -13,11 +13,11 @@ ABCI: job_execution_options: "" optimize: - search_algorithm: "../../aiaccel/optimizer/nelder_mead" - #search_algorithm: "random" - #search_algorithm: "sobol" - #search_algorithm: "grid" - #search_algorithm: "tpe" + search_algorithm: "aiaccel.optimizer.nelder_mead" + #search_algorithm: "aiaccel.optimizer.random" + #search_algorithm: "aiaccel.optimizer.sobol" + #search_algorithm: "aiaccel.optimizer.grid" + #search_algorithm: "aiaccel.optimizer.tpe" goal: "minimize" trial_number: 30 rand_seed: 42 diff --git a/examples/resnet50_cifar10/config.yaml b/examples/resnet50_cifar10/config.yaml index 0f4281e32..ca579490c 100644 --- a/examples/resnet50_cifar10/config.yaml +++ b/examples/resnet50_cifar10/config.yaml @@ -13,7 +13,7 @@ ABCI: job_execution_options: "" optimize: - search_algorithm: "nelder-mead" + search_algorithm: "aiaccel.optimizer.nelder_mead" goal: "minimize" trial_number: 100 rand_seed: 42 diff --git a/examples/schwefel/config.yaml b/examples/schwefel/config.yaml index 21f39058e..4d08f1493 100644 --- a/examples/schwefel/config.yaml +++ b/examples/schwefel/config.yaml @@ -13,7 +13,7 @@ ABCI: job_execution_options: "" optimize: - search_algorithm: "nelder-mead" + search_algorithm: "aiaccel.optimizer.nelder_mead" goal: "minimize" trial_number: 30 rand_seed: 42 diff --git a/examples/sphere/config.yaml b/examples/sphere/config.yaml index ba1ebb237..288348d21 100644 --- a/examples/sphere/config.yaml +++ b/examples/sphere/config.yaml @@ -13,7 +13,7 @@ ABCI: job_execution_options: "" optimize: - search_algorithm: "nelder-mead" + search_algorithm: "aiaccel.optimizer.nelder_mead" goal: "minimize" trial_number: 30 rand_seed: 42 diff --git a/examples/styblinski-tang/config.yaml b/examples/styblinski-tang/config.yaml index 929f3fbe6..33e015352 100644 --- a/examples/styblinski-tang/config.yaml +++ b/examples/styblinski-tang/config.yaml @@ -13,7 +13,7 @@ ABCI: job_execution_options: "" optimize: - search_algorithm: "nelder-mead" + search_algorithm: "aiaccel.optimizer.nelder_mead" goal: "minimize" trial_number: 30 rand_seed: 42 diff --git a/examples/wrapper_sample/config.yaml b/examples/wrapper_sample/config.yaml index 5357e6a5c..12b9860fa 100644 --- a/examples/wrapper_sample/config.yaml +++ b/examples/wrapper_sample/config.yaml @@ -13,7 +13,7 @@ ABCI: job_execution_options: "" optimize: - search_algorithm: "nelder-mead" + search_algorithm: "aiaccel.optimizer.nelder_mead" goal: "minimize" trial_number: 30 rand_seed: 42 diff --git a/tests/blackbox_test/benchmark2/testcode.py b/tests/blackbox_test/benchmark2/testcode.py index fe2812d79..87a25a403 100644 --- a/tests/blackbox_test/benchmark2/testcode.py +++ b/tests/blackbox_test/benchmark2/testcode.py @@ -57,7 +57,7 @@ "job_execution_options": "" }, "optimize": { - "search_algorithm": "nelder-mead", + "search_algorithm": "aiaccel.optimizer.nelder_mead", "goal": "minimize", "trial_number": 5, "rand_seed": 42, diff --git a/tests/integration/sphere/test_sphere_grid.py b/tests/integration/sphere/test_sphere_grid.py index 52c6e53b6..7e5f84cc3 100644 --- a/tests/integration/sphere/test_sphere_grid.py +++ b/tests/integration/sphere/test_sphere_grid.py @@ -6,4 +6,4 @@ class TestSphereGrid(IntegrationTest): @classmethod def setup_class(cls): - cls.search_algorithm = aiaccel.search_algorithm_grid + cls.search_algorithm = "grid" diff --git a/tests/integration/sphere/test_sphere_nelder_mead.py b/tests/integration/sphere/test_sphere_nelder_mead.py index 1c6e3a940..d43ae1ca8 100644 --- a/tests/integration/sphere/test_sphere_nelder_mead.py +++ b/tests/integration/sphere/test_sphere_nelder_mead.py @@ -6,5 +6,5 @@ class TestSphereNelderMead(IntegrationTest): @classmethod def setup_class(cls): - cls.search_algorithm = aiaccel.search_algorithm_nelder_mead + cls.search_algorithm = "nelder-mead" diff --git a/tests/integration/sphere/test_sphere_random.py b/tests/integration/sphere/test_sphere_random.py index 855e7e570..e18c43d19 100644 --- a/tests/integration/sphere/test_sphere_random.py +++ b/tests/integration/sphere/test_sphere_random.py @@ -6,4 +6,4 @@ class TestSphereRandom(IntegrationTest): @classmethod def setup_class(cls): - cls.search_algorithm = aiaccel.search_algorithm_random + cls.search_algorithm = "random" diff --git a/tests/integration/sphere/test_sphere_sobol.py b/tests/integration/sphere/test_sphere_sobol.py index 9ac46afae..f33d8a703 100644 --- a/tests/integration/sphere/test_sphere_sobol.py +++ b/tests/integration/sphere/test_sphere_sobol.py @@ -6,4 +6,4 @@ class TestSphereSobol(IntegrationTest): @classmethod def setup_class(cls): - cls.search_algorithm = aiaccel.search_algorithm_sobol + cls.search_algorithm = "sobol" diff --git a/tests/integration/sphere/test_sphere_tpe.py b/tests/integration/sphere/test_sphere_tpe.py index 56e22b227..ce3626fa8 100644 --- a/tests/integration/sphere/test_sphere_tpe.py +++ b/tests/integration/sphere/test_sphere_tpe.py @@ -6,4 +6,4 @@ class TestSphereTPE(IntegrationTest): @classmethod def setup_class(cls): - cls.search_algorithm = aiaccel.search_algorithm_tpe + cls.search_algorithm = "tpe" diff --git a/tests/resumption/sphere/test_sphere_grid_resumption.py b/tests/resumption/sphere/test_sphere_grid_resumption.py index 94f89d0d8..ed6f16f13 100644 --- a/tests/resumption/sphere/test_sphere_grid_resumption.py +++ b/tests/resumption/sphere/test_sphere_grid_resumption.py @@ -6,4 +6,4 @@ class TestSphereGridResumption(ResumptionTest): @classmethod def setup_class(cls): - cls.search_algorithm = aiaccel.search_algorithm_grid + cls.search_algorithm = "grid" diff --git a/tests/resumption/sphere/test_sphere_nelder_mead_resumption.py b/tests/resumption/sphere/test_sphere_nelder_mead_resumption.py index f0cedde71..d06f8900c 100644 --- a/tests/resumption/sphere/test_sphere_nelder_mead_resumption.py +++ b/tests/resumption/sphere/test_sphere_nelder_mead_resumption.py @@ -6,4 +6,4 @@ class TestSphereRandomResumption(ResumptionTest): @classmethod def setup_class(cls): - cls.search_algorithm = aiaccel.search_algorithm_random + cls.search_algorithm = "nelder_mead" diff --git a/tests/resumption/sphere/test_sphere_random_resumption.py b/tests/resumption/sphere/test_sphere_random_resumption.py index f0cedde71..e8d273729 100644 --- a/tests/resumption/sphere/test_sphere_random_resumption.py +++ b/tests/resumption/sphere/test_sphere_random_resumption.py @@ -6,4 +6,4 @@ class TestSphereRandomResumption(ResumptionTest): @classmethod def setup_class(cls): - cls.search_algorithm = aiaccel.search_algorithm_random + cls.search_algorithm = "random" diff --git a/tests/resumption/sphere/test_sphere_sobol_resumption.py b/tests/resumption/sphere/test_sphere_sobol_resumption.py index f0cedde71..d00697087 100644 --- a/tests/resumption/sphere/test_sphere_sobol_resumption.py +++ b/tests/resumption/sphere/test_sphere_sobol_resumption.py @@ -6,4 +6,4 @@ class TestSphereRandomResumption(ResumptionTest): @classmethod def setup_class(cls): - cls.search_algorithm = aiaccel.search_algorithm_random + cls.search_algorithm = "sobol" diff --git a/tests/resumption/sphere/test_sphere_tpe_resumption.py b/tests/resumption/sphere/test_sphere_tpe_resumption.py index f0cedde71..aceac5d49 100644 --- a/tests/resumption/sphere/test_sphere_tpe_resumption.py +++ b/tests/resumption/sphere/test_sphere_tpe_resumption.py @@ -6,4 +6,4 @@ class TestSphereRandomResumption(ResumptionTest): @classmethod def setup_class(cls): - cls.search_algorithm = aiaccel.search_algorithm_random + cls.search_algorithm = "tpe" diff --git a/tests/test_data/config.json b/tests/test_data/config.json index aecf7b1fd..1766780f5 100644 --- a/tests/test_data/config.json +++ b/tests/test_data/config.json @@ -23,7 +23,7 @@ "group": "gaa" }, "optimize": { - "search_algorithm": "nelder-mead", + "search_algorithm": "aiaccel.optimizer.nelder_mead", "goal": "minimize", "trial_number": 10, "parameters": [ diff --git a/tests/test_data/config_abci.json b/tests/test_data/config_abci.json index 4167e385c..ff23797a9 100644 --- a/tests/test_data/config_abci.json +++ b/tests/test_data/config_abci.json @@ -19,7 +19,7 @@ "group": "gaa" }, "optimize": { - "search_algorithm": "nelder-mead", + "search_algorithm": "aiaccel.optimizer.nelder_mead", "goal": "minimize", "trial_number": 10, "parameters": [ diff --git a/tests/test_data/config_grid.json b/tests/test_data/config_grid.json index a637684ff..a937182b4 100644 --- a/tests/test_data/config_grid.json +++ b/tests/test_data/config_grid.json @@ -14,7 +14,7 @@ "job_execution_options": "" }, "optimize": { - "search_algorithm": "grid", + "search_algorithm": "aiaccel.optimizer.grid", "goal": "minimize", "trial_number": 10, "rand_seed": 42, diff --git a/tests/test_data/config_grid_resumption.json b/tests/test_data/config_grid_resumption.json index 59c95d4b1..3f08743c9 100644 --- a/tests/test_data/config_grid_resumption.json +++ b/tests/test_data/config_grid_resumption.json @@ -14,7 +14,7 @@ "job_execution_options": "" }, "optimize": { - "search_algorithm": "grid", + "search_algorithm": "aiaccel.optimizer.grid", "goal": "minimize", "trial_number": 5, "rand_seed": 42, diff --git a/tests/test_data/config_nelder-mead.json b/tests/test_data/config_nelder-mead.json index fd4b84710..87265d3ee 100644 --- a/tests/test_data/config_nelder-mead.json +++ b/tests/test_data/config_nelder-mead.json @@ -16,7 +16,7 @@ "job_execution_options": "" }, "optimize": { - "search_algorithm": "nelder-mead", + "search_algorithm": "aiaccel.optimizer.nelder_mead", "goal": "minimize", "trial_number": 10, "rand_seed": 42, diff --git a/tests/test_data/config_nelder-mead_resumption.json b/tests/test_data/config_nelder-mead_resumption.json index e4cf117b9..4d2fca9c7 100644 --- a/tests/test_data/config_nelder-mead_resumption.json +++ b/tests/test_data/config_nelder-mead_resumption.json @@ -16,7 +16,7 @@ "job_execution_options": "" }, "optimize": { - "search_algorithm": "nelder-mead", + "search_algorithm": "aiaccel.optimizer.nelder_mead", "goal": "minimize", "trial_number": 5, "rand_seed": 42, diff --git a/tests/test_data/config_random.json b/tests/test_data/config_random.json index 4b0036569..d478e4c87 100644 --- a/tests/test_data/config_random.json +++ b/tests/test_data/config_random.json @@ -13,7 +13,7 @@ "job_execution_options": "" }, "optimize": { - "search_algorithm": "random", + "search_algorithm": "aiaccel.optimizer.random", "goal": "minimize", "trial_number": 10, "rand_seed": 42, diff --git a/tests/test_data/config_random_resumption.json b/tests/test_data/config_random_resumption.json index 3f20127c3..91260c074 100644 --- a/tests/test_data/config_random_resumption.json +++ b/tests/test_data/config_random_resumption.json @@ -13,7 +13,7 @@ "job_execution_options": "" }, "optimize": { - "search_algorithm": "random", + "search_algorithm": "aiaccel.optimizer.random", "goal": "minimize", "trial_number": 5, "rand_seed": 42, diff --git a/tests/test_data/config_sobol.json b/tests/test_data/config_sobol.json index a634b7103..8da83ec9e 100644 --- a/tests/test_data/config_sobol.json +++ b/tests/test_data/config_sobol.json @@ -13,7 +13,7 @@ "job_execution_options": "" }, "optimize": { - "search_algorithm": "sobol", + "search_algorithm": "aiaccel.optimizer.sobol", "goal": "minimize", "trial_number": 10, "rand_seed": 42, diff --git a/tests/test_data/config_sobol_resumption.json b/tests/test_data/config_sobol_resumption.json index 1cd6f49a4..8edafd333 100644 --- a/tests/test_data/config_sobol_resumption.json +++ b/tests/test_data/config_sobol_resumption.json @@ -13,7 +13,7 @@ "job_execution_options": "" }, "optimize": { - "search_algorithm": "sobol", + "search_algorithm": "aiaccel.optimizer.sobol", "goal": "minimize", "trial_number": 5, "rand_seed": 42, diff --git a/tests/test_data/config_tpe.json b/tests/test_data/config_tpe.json index c9cb374dc..91a7ea58a 100644 --- a/tests/test_data/config_tpe.json +++ b/tests/test_data/config_tpe.json @@ -13,7 +13,7 @@ "job_execution_options": "" }, "optimize": { - "search_algorithm": "tpe", + "search_algorithm": "aiaccel.optimizer.tpe", "goal": "minimize", "trial_number": 10, "rand_seed": 42, diff --git a/tests/test_data/config_tpe_resumption.json b/tests/test_data/config_tpe_resumption.json index 682e926a2..8024f1c2c 100644 --- a/tests/test_data/config_tpe_resumption.json +++ b/tests/test_data/config_tpe_resumption.json @@ -13,7 +13,7 @@ "job_execution_options": "" }, "optimize": { - "search_algorithm": "tpe", + "search_algorithm": "aiaccel.optimizer.tpe", "goal": "minimize", "trial_number": 5, "rand_seed": 42, diff --git a/tests/test_data/grid_config.json b/tests/test_data/grid_config.json index 3c9ac6467..b1515583f 100644 --- a/tests/test_data/grid_config.json +++ b/tests/test_data/grid_config.json @@ -13,7 +13,7 @@ "group": "gaa" }, "optimize": { - "search_algorithm": "grid", + "search_algorithm": "aiaccel.optimizer.grid", "goal": "minimize", "trial_number": 10, "rand_seed": 42, diff --git a/tests/unit/abci_test/additionaloptions.json b/tests/unit/abci_test/additionaloptions.json index abe4c716a..47e051f4c 100644 --- a/tests/unit/abci_test/additionaloptions.json +++ b/tests/unit/abci_test/additionaloptions.json @@ -33,7 +33,7 @@ "$2search_algorithm": "Grid", "$3search_algorithm": "Sobol", "$$$search_algorithm": "NelderMead", - "search_algorithm": "Tpe", + "search_algorithm": "aiaccel.optimizer.tpe", "parameter_pool_size": 4, "sleep_time_optimizer": 1 }, diff --git a/tests/unit/abci_test/additionaloptions2.json b/tests/unit/abci_test/additionaloptions2.json index d8029fb81..36b0bd1df 100644 --- a/tests/unit/abci_test/additionaloptions2.json +++ b/tests/unit/abci_test/additionaloptions2.json @@ -33,7 +33,7 @@ "$2search_algorithm": "Grid", "$3search_algorithm": "Sobol", "$$$search_algorithm": "Nelder-Mead", - "search_algorithm": "Tpe", + "search_algorithm": "aiaccel.optimizer.tpe", "parameter_pool_size": 4, "sleep_time_optimizer": 1 }, diff --git a/tests/unit/abci_test/cfg.json b/tests/unit/abci_test/cfg.json index 9c33ffd8a..97c3458c8 100644 --- a/tests/unit/abci_test/cfg.json +++ b/tests/unit/abci_test/cfg.json @@ -33,7 +33,7 @@ "$2search_algorithm": "Grid", "$3search_algorithm": "Sobol", "$$$search_algorithm": "Nelder-Mead", - "search_algorithm": "Tpe", + "search_algorithm": "aiaccel.optimizer.tpe", "parameter_pool_size": 4, "sleep_time_optimizer": 1 }, diff --git a/tests/unit/abci_test/cfg2.json b/tests/unit/abci_test/cfg2.json index f54bc7079..c09a36694 100644 --- a/tests/unit/abci_test/cfg2.json +++ b/tests/unit/abci_test/cfg2.json @@ -33,7 +33,7 @@ "$2search_algorithm": "Grid", "$3search_algorithm": "Sobol", "$$$search_algorithm": "Nelder-Mead", - "search_algorithm": "Tpe", + "search_algorithm": "aiaccel.optimizer.tpe", "parameter_pool_size": 4, "sleep_time_optimizer": 1 }, diff --git a/tests/unit/abci_test/cfg3.json b/tests/unit/abci_test/cfg3.json index 77d7b28c6..5171e8c63 100644 --- a/tests/unit/abci_test/cfg3.json +++ b/tests/unit/abci_test/cfg3.json @@ -33,7 +33,7 @@ "$2search_algorithm": "Grid", "$3search_algorithm": "Sobol", "$$$search_algorithm": "Nelder-Mead", - "search_algorithm": "Tpe", + "search_algorithm": "aiaccel.optimizer.tpe", "parameter_pool_size": 4, "sleep_time_optimizer": 1 }, diff --git a/tests/unit/optimizer_test/test_grid_search.py b/tests/unit/optimizer_test/test_grid_search.py index bfec798cf..7ec1ba066 100644 --- a/tests/unit/optimizer_test/test_grid_search.py +++ b/tests/unit/optimizer_test/test_grid_search.py @@ -1,4 +1,4 @@ -from aiaccel.optimizer.grid.search import GridSearchOptimizer, generate_grid_points +from aiaccel.optimizer.grid.search import Optimizer, generate_grid_points from aiaccel.parameter import HyperParameter, load_parameter from tests.base_test import BaseTest import functools @@ -66,7 +66,7 @@ def __init__(self, name, type_name): assert True -class TestGridSearchOptimizer(BaseTest): +class TestOptimizer(BaseTest): def test_pre_process(self, clean_work_dir): options = { @@ -78,7 +78,7 @@ def test_pre_process(self, clean_work_dir): 'graph': False, 'process_name': 'optimizer' } - optimizer = GridSearchOptimizer(options) + optimizer = Optimizer(options) optimizer.pre_process() def test_get_parameter_index(self, clean_work_dir): @@ -91,7 +91,7 @@ def test_get_parameter_index(self, clean_work_dir): 'graph': False, 'process_name': 'optimizer' } - optimizer = GridSearchOptimizer(options) + optimizer = Optimizer(options) optimizer.pre_process() assert optimizer.get_parameter_index() == [0 for _ in range(0, 10)] @@ -112,7 +112,7 @@ def test_generate_parameter(self, clean_work_dir): 'graph': False, 'process_name': 'optimizer' } - optimizer = GridSearchOptimizer(options) + optimizer = Optimizer(options) optimizer.pre_process() max_index = functools.reduce( lambda x, y: x*y, diff --git a/tests/unit/optimizer_test/test_nelder_mead.py b/tests/unit/optimizer_test/test_nelder_mead.py index 1e7885450..f6fad740a 100644 --- a/tests/unit/optimizer_test/test_nelder_mead.py +++ b/tests/unit/optimizer_test/test_nelder_mead.py @@ -307,7 +307,7 @@ def test_nelder_mead_parameters(load_test_config): 'executing:', nelder_mead._executing_index, 'evaluated_itr:', nelder_mead._evaluated_itr) - # a functionality of NelderMeadSearchOptimizer::check_result() + # a functionality of Optimizer::check_result() # ready_params = nelder_mead.get_ready_parameters() ready_params = nelder_mead._executing @@ -318,7 +318,7 @@ def test_nelder_mead_parameters(load_test_config): if debug: print('\tsum:', rp['result']) - # a functionality of NelderMeadSearchOptimizer::generate_parameter() + # a functionality of Optimizer::generate_parameter() searched_params = nelder_mead.search() if searched_params is None: diff --git a/tests/unit/optimizer_test/test_nelder_mead_search.py b/tests/unit/optimizer_test/test_nelder_mead_search.py index f9ac4697e..e860ef107 100644 --- a/tests/unit/optimizer_test/test_nelder_mead_search.py +++ b/tests/unit/optimizer_test/test_nelder_mead_search.py @@ -1,6 +1,6 @@ from aiaccel.config import ConfileWrapper from aiaccel.optimizer.nelder_mead.sampler import NelderMead -from aiaccel.optimizer.nelder_mead.search import NelderMeadSearchOptimizer +from aiaccel.optimizer.nelder_mead.search import Optimizer from aiaccel.parameter import load_parameter from aiaccel.util.filesystem import move_file from tests.base_test import BaseTest @@ -9,7 +9,7 @@ import pytest -class TestNelderMeadSearchOptimizer(BaseTest): +class TestOptimizer(BaseTest): @pytest.fixture(autouse=True) def setup_optimizer(self, clean_work_dir): @@ -22,7 +22,7 @@ def setup_optimizer(self, clean_work_dir): 'graph': False, 'process_name': 'optimizer' } - self.optimizer = NelderMeadSearchOptimizer(options) + self.optimizer = Optimizer(options) yield self.optimizer = None diff --git a/tests/unit/optimizer_test/test_optimizer.py b/tests/unit/optimizer_test/test_optimizer.py new file mode 100644 index 000000000..bf08f0aa3 --- /dev/null +++ b/tests/unit/optimizer_test/test_optimizer.py @@ -0,0 +1,25 @@ +from pathlib import Path +import aiaccel +from aiaccel.optimizer.optimizer import OptimizerLoeader + + +def test_OptimizerLoeader_1(): + algorithm = "aiaccel.optimizer.grid" + opt = OptimizerLoeader(algorithm) + assert opt.get().Optimizer == aiaccel.optimizer.grid.search.Optimizer + + algorithm = "aiaccel.optimizer.random" + opt = OptimizerLoeader(algorithm) + assert opt.get().Optimizer == aiaccel.optimizer.random.search.Optimizer + + algorithm = "aiaccel.optimizer.sobol" + opt = OptimizerLoeader(algorithm) + assert opt.get().Optimizer == aiaccel.optimizer.sobol.search.Optimizer + + algorithm = "aiaccel.optimizer.nelder_mead" + opt = OptimizerLoeader(algorithm) + assert opt.get().Optimizer == aiaccel.optimizer.nelder_mead.search.Optimizer + + algorithm = "aiaccel.optimizer.tpe" + opt = OptimizerLoeader(algorithm) + assert opt.get().Optimizer == aiaccel.optimizer.tpe.search.Optimizer diff --git a/tests/unit/optimizer_test/test_random_search.py b/tests/unit/optimizer_test/test_random_search.py index a0fe6a133..cb599e63d 100644 --- a/tests/unit/optimizer_test/test_random_search.py +++ b/tests/unit/optimizer_test/test_random_search.py @@ -1,8 +1,8 @@ -from aiaccel.optimizer.random.search import RandomSearchOptimizer +from aiaccel.optimizer.random.search import Optimizer from tests.base_test import BaseTest -class TestRandomSearchOptimizer(BaseTest): +class TestOptimizer(BaseTest): def test_generate_parameter(self): options = { @@ -14,6 +14,6 @@ def test_generate_parameter(self): 'graph': False, 'process_name': 'optimizer' } - optimizer = RandomSearchOptimizer(options) + optimizer = Optimizer(options) optimizer.pre_process() assert optimizer.generate_parameter() is None diff --git a/tests/unit/optimizer_test/test_sobol_search.py b/tests/unit/optimizer_test/test_sobol_search.py index 15d973367..00be459f9 100644 --- a/tests/unit/optimizer_test/test_sobol_search.py +++ b/tests/unit/optimizer_test/test_sobol_search.py @@ -1,9 +1,9 @@ -from aiaccel.optimizer.sobol.search import SobolSearchOptimizer +from aiaccel.optimizer.sobol.search import Optimizer from tests.base_test import BaseTest import pytest -class TestSobolSearchOptimizer(BaseTest): +class TestOptimizer(BaseTest): @pytest.fixture(autouse=True) def setup_optimizer(self, clean_work_dir): @@ -16,7 +16,7 @@ def setup_optimizer(self, clean_work_dir): 'graph': False, 'process_name': 'optimizer' } - self.optimizer = SobolSearchOptimizer(options) + self.optimizer = Optimizer(options) yield self.optimizer = None diff --git a/tests/unit/optimizer_test/test_tpe_search.py b/tests/unit/optimizer_test/test_tpe_search.py index 3038c0cc5..b22b50406 100644 --- a/tests/unit/optimizer_test/test_tpe_search.py +++ b/tests/unit/optimizer_test/test_tpe_search.py @@ -1,12 +1,12 @@ import pytest from aiaccel.config import Config from aiaccel.parameter import load_parameter -from aiaccel.optimizer.tpe.search import TpeSearchOptimizer +from aiaccel.optimizer.tpe.search import Optimizer from aiaccel.optimizer.tpe.search import create_distributions from tests.base_test import BaseTest -class TestTpeSearchOptimizer(BaseTest): +class TestOptimizer(BaseTest): @pytest.fixture(autouse=True) def setup_optimizer(self, clean_work_dir, data_dir): @@ -19,7 +19,7 @@ def setup_optimizer(self, clean_work_dir, data_dir): 'graph': False, 'process_name': 'optimizer' } - self.optimizer = TpeSearchOptimizer(options) + self.optimizer = Optimizer(options) yield self.optimizer = None diff --git a/tests/unit/test_config.py b/tests/unit/test_config.py index 126dd5300..de767faa2 100644 --- a/tests/unit/test_config.py +++ b/tests/unit/test_config.py @@ -106,7 +106,7 @@ def test_config(config_json): assert config.resource_type.get() == "local" assert config.num_node.get() == 4 assert config.abci_group.get() == "gaa" - assert config.search_algorithm.get() == "nelder-mead" + assert config.search_algorithm.get() == "aiaccel.optimizer.nelder_mead" assert config.goal.get() == "minimize" assert config.trial_number.get() == 10 assert config.name_length.get() == 6 diff --git a/tests/unit/test_module.py b/tests/unit/test_module.py index 12c3e43c6..2bc789818 100644 --- a/tests/unit/test_module.py +++ b/tests/unit/test_module.py @@ -1,6 +1,6 @@ from aiaccel.master.local_master import LocalMaster from aiaccel.module import AbstractModule -from aiaccel.optimizer.random.search import RandomSearchOptimizer +from aiaccel.optimizer.random.search import Optimizer from aiaccel.scheduler.local_scheduler import LocalScheduler from aiaccel.util.filesystem import file_create from aiaccel.util.logger import str_to_logging_level @@ -127,7 +127,7 @@ def test_get_module_type_alive_file(self, work_dir): 'graph': False, 'process_name': 'optimizer' } - optimizer = RandomSearchOptimizer(options) + optimizer = Optimizer(options) module_type, alive_file = optimizer.get_module_type_alive_file() assert module_type == aiaccel.module_type_optimizer assert Path(alive_file).resolve() == work_dir.joinpath( From d26a395e759a69e8ba2b0422ab1521a3610d43f2 Mon Sep 17 00:00:00 2001 From: aramoto99 Date: Wed, 3 Aug 2022 10:16:25 +0900 Subject: [PATCH 03/12] Add dynamic loading of optimizer by importlib --- aiaccel/master/abstract_master.py | 2 +- aiaccel/optimizer/tpe/search.py | 2 +- tests/unit/optimizer_test/sample/search.py | 54 +++++++++++++++++++++ tests/unit/optimizer_test/test_optimizer.py | 13 ++++- 4 files changed, 68 insertions(+), 3 deletions(-) create mode 100644 tests/unit/optimizer_test/sample/search.py diff --git a/aiaccel/master/abstract_master.py b/aiaccel/master/abstract_master.py index 502875eed..c5e7d50d6 100644 --- a/aiaccel/master/abstract_master.py +++ b/aiaccel/master/abstract_master.py @@ -342,7 +342,7 @@ def other_process_is_alive(self) -> bool: Returns: bool """ - if( + if ( not self.optimizer_proc.poll() is None or not self.scheduler_proc.poll() is None ): diff --git a/aiaccel/optimizer/tpe/search.py b/aiaccel/optimizer/tpe/search.py index 104a45bfb..abf70e714 100644 --- a/aiaccel/optimizer/tpe/search.py +++ b/aiaccel/optimizer/tpe/search.py @@ -244,7 +244,7 @@ def _deserialize(self, dict_objects: dict) -> None: # debug print('Running trial does not match any running files.') print('\ttrial params: ', t.params) - raise() + raise () def create_distributions( diff --git a/tests/unit/optimizer_test/sample/search.py b/tests/unit/optimizer_test/sample/search.py new file mode 100644 index 000000000..1b8ffafe2 --- /dev/null +++ b/tests/unit/optimizer_test/sample/search.py @@ -0,0 +1,54 @@ +from aiaccel.optimizer.abstract_optimizer import AbstractOptimizer +from typing import Optional + + +class Optimizer(AbstractOptimizer): + def generate_parameter(self, number: Optional[int] = 1) -> None: + + returned_params = [] + self.get_dict_state() + initial_parameter = self.generate_initial_parameter() + + if initial_parameter is not None: + returned_params.append(initial_parameter) + number -= 1 + + for i in range(number): + new_params = [] + sample = self.params.sample() + + for s in sample: + new_param = { + 'parameter_name': s['name'], + 'type': s['type'], + 'value': s['value'] + } + new_params.append(new_param) + + returned_params.append({'parameters': new_params}) + self.generated_parameter += 1 + + self.create_parameter_files(returned_params) + + def _serialize(self) -> dict: + """Serialize this module. + + Returns: + dict: serialize data. + """ + self.serialize_datas = { + 'generated_parameter': self.generated_parameter, + 'loop_count': self.loop_count + } + return super()._serialize() + + def _deserialize(self, dict_objects: dict) -> None: + """ Deserialize this module. + + Args: + dict_objects(dict): A dictionary including serialized objects. + + Returns: + None + """ + super()._deserialize(dict_objects) diff --git a/tests/unit/optimizer_test/test_optimizer.py b/tests/unit/optimizer_test/test_optimizer.py index bf08f0aa3..f3ea851b2 100644 --- a/tests/unit/optimizer_test/test_optimizer.py +++ b/tests/unit/optimizer_test/test_optimizer.py @@ -1,6 +1,7 @@ from pathlib import Path import aiaccel from aiaccel.optimizer.optimizer import OptimizerLoeader +from importlib.machinery import SourceFileLoader def test_OptimizerLoeader_1(): @@ -19,7 +20,17 @@ def test_OptimizerLoeader_1(): algorithm = "aiaccel.optimizer.nelder_mead" opt = OptimizerLoeader(algorithm) assert opt.get().Optimizer == aiaccel.optimizer.nelder_mead.search.Optimizer - + algorithm = "aiaccel.optimizer.tpe" opt = OptimizerLoeader(algorithm) assert opt.get().Optimizer == aiaccel.optimizer.tpe.search.Optimizer + + +def test_OptimizerLoeader_2(): + algorithm = Path("./tests/unit/optimizer_test/sample") + try: + opt = OptimizerLoeader(algorithm) + assert True + + except: + assert False From 7e6e827e99530695b7b036b22a5f9af3a34a4c2d Mon Sep 17 00:00:00 2001 From: aramoto99 Date: Wed, 3 Aug 2022 14:17:00 +0900 Subject: [PATCH 04/12] Add dynamic loading of optimizer by importlib --- aiaccel/optimizer/optimizer.py | 45 ++++++++++++++++++--- aiaccel/start.py | 2 +- tests/unit/optimizer_test/test_optimizer.py | 1 - 3 files changed, 41 insertions(+), 7 deletions(-) diff --git a/aiaccel/optimizer/optimizer.py b/aiaccel/optimizer/optimizer.py index 3b579e9d7..5ea78e405 100644 --- a/aiaccel/optimizer/optimizer.py +++ b/aiaccel/optimizer/optimizer.py @@ -3,21 +3,56 @@ from importlib import import_module from pathlib import Path from typing import Union +from typing import Any class OptimizerLoeader: - def __init__(self, algorithm: Union[str, Path]): + """ + The optimizer directory can be named arbitrarily. + However, the file name of the program placed in the directory must be fixed to "search.py". + + The class name of the optimizer must be `Optimizer`. + """ + def __init__(self, algorithm: Union[str, Path]) -> None: self.opt = self.load(algorithm) - def get(self): - return self.opt + def get(self) -> Any: + """Returns the loaded optimzier class. + + Args: + None + + Returns: + None + """ + return self.opt.Optimizer @singledispatchmethod - def load(self, algorithm: str): + def load(self, algorithm: str) -> Any: + """ + If config.optimizer.algorithm is set to use the built-in optimizer + in aiaccel,this function is called. + + Args: + None + + Returns: + None + """ mod = algorithm + ".search" return import_module(mod) @load.register - def _(self, algorithm: Path): + def _(self, algorithm: Path) -> Any: + """ + This function is called if config.optimizer.algorithm is + set to use an external optimizer. + + Args: + None + + Returns: + None + """ path = algorithm / "search.py" return SourceFileLoader('optimizer', str(path)).load_module() diff --git a/aiaccel/start.py b/aiaccel/start.py index 579cc078d..27abe1650 100644 --- a/aiaccel/start.py +++ b/aiaccel/start.py @@ -509,7 +509,7 @@ def __init__(self, config_path: str) -> None: self.optimizer = OptimizerLoeader(algorithm).get() def __call__(self) -> Any: - return self.optimizer.Optimizer + return self.optimizer class Master(CreationMaster(Arguments()['config'])()): diff --git a/tests/unit/optimizer_test/test_optimizer.py b/tests/unit/optimizer_test/test_optimizer.py index f3ea851b2..a8d20513b 100644 --- a/tests/unit/optimizer_test/test_optimizer.py +++ b/tests/unit/optimizer_test/test_optimizer.py @@ -31,6 +31,5 @@ def test_OptimizerLoeader_2(): try: opt = OptimizerLoeader(algorithm) assert True - except: assert False From c4e248ef97e946896e19ea947c40b902785b3e2c Mon Sep 17 00:00:00 2001 From: aramoto99 Date: Wed, 3 Aug 2022 15:09:45 +0900 Subject: [PATCH 05/12] Fix test code --- tests/unit/optimizer_test/test_optimizer.py | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/tests/unit/optimizer_test/test_optimizer.py b/tests/unit/optimizer_test/test_optimizer.py index a8d20513b..6d7a8ff8e 100644 --- a/tests/unit/optimizer_test/test_optimizer.py +++ b/tests/unit/optimizer_test/test_optimizer.py @@ -7,23 +7,23 @@ def test_OptimizerLoeader_1(): algorithm = "aiaccel.optimizer.grid" opt = OptimizerLoeader(algorithm) - assert opt.get().Optimizer == aiaccel.optimizer.grid.search.Optimizer + assert opt.get() == aiaccel.optimizer.grid.search.Optimizer algorithm = "aiaccel.optimizer.random" opt = OptimizerLoeader(algorithm) - assert opt.get().Optimizer == aiaccel.optimizer.random.search.Optimizer + assert opt.get() == aiaccel.optimizer.random.search.Optimizer algorithm = "aiaccel.optimizer.sobol" opt = OptimizerLoeader(algorithm) - assert opt.get().Optimizer == aiaccel.optimizer.sobol.search.Optimizer + assert opt.get() == aiaccel.optimizer.sobol.search.Optimizer algorithm = "aiaccel.optimizer.nelder_mead" opt = OptimizerLoeader(algorithm) - assert opt.get().Optimizer == aiaccel.optimizer.nelder_mead.search.Optimizer + assert opt.get() == aiaccel.optimizer.nelder_mead.search.Optimizer algorithm = "aiaccel.optimizer.tpe" opt = OptimizerLoeader(algorithm) - assert opt.get().Optimizer == aiaccel.optimizer.tpe.search.Optimizer + assert opt.get() == aiaccel.optimizer.tpe.search.Optimizer def test_OptimizerLoeader_2(): From fa5ee203cad41e826cb10bb1a604f3d0d2d71877 Mon Sep 17 00:00:00 2001 From: aramoto99 Date: Wed, 3 Aug 2022 16:45:06 +0900 Subject: [PATCH 06/12] fix test --- tests/resumption/sphere/test_sphere_tpe_resumption.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/resumption/sphere/test_sphere_tpe_resumption.py b/tests/resumption/sphere/test_sphere_tpe_resumption.py index aceac5d49..4dbb5209b 100644 --- a/tests/resumption/sphere/test_sphere_tpe_resumption.py +++ b/tests/resumption/sphere/test_sphere_tpe_resumption.py @@ -6,4 +6,4 @@ class TestSphereRandomResumption(ResumptionTest): @classmethod def setup_class(cls): - cls.search_algorithm = "tpe" + cls.search_algorithm = "tpe" From 01bf9542683eddd4dab22915201702d5ad878223 Mon Sep 17 00:00:00 2001 From: aramoto99 Date: Wed, 10 Aug 2022 11:29:01 +0900 Subject: [PATCH 07/12] Fix resumtioin test --- tests/resumption/sphere/test_sphere_nelder_mead_resumption.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/resumption/sphere/test_sphere_nelder_mead_resumption.py b/tests/resumption/sphere/test_sphere_nelder_mead_resumption.py index d06f8900c..0f445412e 100644 --- a/tests/resumption/sphere/test_sphere_nelder_mead_resumption.py +++ b/tests/resumption/sphere/test_sphere_nelder_mead_resumption.py @@ -6,4 +6,4 @@ class TestSphereRandomResumption(ResumptionTest): @classmethod def setup_class(cls): - cls.search_algorithm = "nelder_mead" + cls.search_algorithm = "nelder-mead" From aa6d71f4fe49b7226296fb4e4f191dbcd44fd191 Mon Sep 17 00:00:00 2001 From: aramoto99 Date: Tue, 16 Aug 2022 17:25:22 +0900 Subject: [PATCH 08/12] Add dynamic loading of optimizer --- aiaccel/optimizer/grid/search.py | 2 +- aiaccel/optimizer/nelder_mead/search.py | 2 +- aiaccel/optimizer/optimizer.py | 58 ------------------- aiaccel/optimizer/random/search.py | 2 +- aiaccel/optimizer/sobol/search.py | 2 +- aiaccel/optimizer/tpe/search.py | 2 +- aiaccel/start.py | 24 +++++++- docs/manual_jp.md | 4 +- examples/benchmark/config.yaml | 10 ++-- examples/resnet50_cifar10/config.yaml | 6 +- examples/schwefel/config.yaml | 6 +- examples/sphere/config.yaml | 6 +- examples/styblinski-tang/config.yaml | 6 +- examples/wrapper_sample/config.yaml | 6 +- tests/blackbox_test/benchmark2/testcode.py | 2 +- tests/test_data/config.json | 2 +- tests/test_data/config_abci.json | 2 +- tests/test_data/config_grid.json | 2 +- tests/test_data/config_grid_resumption.json | 2 +- tests/test_data/config_nelder-mead.json | 2 +- .../config_nelder-mead_resumption.json | 2 +- tests/test_data/config_random.json | 2 +- tests/test_data/config_random_resumption.json | 2 +- tests/test_data/config_sobol.json | 2 +- tests/test_data/config_sobol_resumption.json | 2 +- tests/test_data/config_tpe.json | 2 +- tests/test_data/config_tpe_resumption.json | 2 +- tests/test_data/grid_config.json | 2 +- tests/unit/abci_test/additionaloptions.json | 2 +- tests/unit/abci_test/additionaloptions2.json | 2 +- tests/unit/abci_test/cfg.json | 2 +- tests/unit/abci_test/cfg2.json | 2 +- tests/unit/abci_test/cfg3.json | 2 +- tests/unit/optimizer_test/sample/search.py | 2 +- tests/unit/optimizer_test/test_grid_search.py | 8 +-- .../optimizer_test/test_nelder_mead_search.py | 4 +- tests/unit/optimizer_test/test_optimizer.py | 35 ----------- .../unit/optimizer_test/test_random_search.py | 4 +- .../unit/optimizer_test/test_sobol_search.py | 4 +- tests/unit/optimizer_test/test_tpe_search.py | 4 +- tests/unit/test_config.py | 2 +- tests/unit/test_module.py | 4 +- 42 files changed, 94 insertions(+), 147 deletions(-) delete mode 100644 aiaccel/optimizer/optimizer.py delete mode 100644 tests/unit/optimizer_test/test_optimizer.py diff --git a/aiaccel/optimizer/grid/search.py b/aiaccel/optimizer/grid/search.py index 5dabe08ed..bca5ba61c 100644 --- a/aiaccel/optimizer/grid/search.py +++ b/aiaccel/optimizer/grid/search.py @@ -62,7 +62,7 @@ def generate_grid_points(p: HyperParameter, config: Config) -> dict: return new_param -class Optimizer(AbstractOptimizer): +class GridSearchOptimizer(AbstractOptimizer): """An optimizer class with grid search algorithm. Attributes: diff --git a/aiaccel/optimizer/nelder_mead/search.py b/aiaccel/optimizer/nelder_mead/search.py index 262ad04c2..b69d390cc 100644 --- a/aiaccel/optimizer/nelder_mead/search.py +++ b/aiaccel/optimizer/nelder_mead/search.py @@ -7,7 +7,7 @@ import numpy as np -class Optimizer(AbstractOptimizer): +class NelderMeadSearchOptimizer(AbstractOptimizer): """An optimizer class with nelder mead algorithm. Attributes: diff --git a/aiaccel/optimizer/optimizer.py b/aiaccel/optimizer/optimizer.py deleted file mode 100644 index 5ea78e405..000000000 --- a/aiaccel/optimizer/optimizer.py +++ /dev/null @@ -1,58 +0,0 @@ -from functools import singledispatchmethod -from importlib.machinery import SourceFileLoader -from importlib import import_module -from pathlib import Path -from typing import Union -from typing import Any - - -class OptimizerLoeader: - """ - The optimizer directory can be named arbitrarily. - However, the file name of the program placed in the directory must be fixed to "search.py". - - The class name of the optimizer must be `Optimizer`. - """ - def __init__(self, algorithm: Union[str, Path]) -> None: - self.opt = self.load(algorithm) - - def get(self) -> Any: - """Returns the loaded optimzier class. - - Args: - None - - Returns: - None - """ - return self.opt.Optimizer - - @singledispatchmethod - def load(self, algorithm: str) -> Any: - """ - If config.optimizer.algorithm is set to use the built-in optimizer - in aiaccel,this function is called. - - Args: - None - - Returns: - None - """ - mod = algorithm + ".search" - return import_module(mod) - - @load.register - def _(self, algorithm: Path) -> Any: - """ - This function is called if config.optimizer.algorithm is - set to use an external optimizer. - - Args: - None - - Returns: - None - """ - path = algorithm / "search.py" - return SourceFileLoader('optimizer', str(path)).load_module() diff --git a/aiaccel/optimizer/random/search.py b/aiaccel/optimizer/random/search.py index da6a1e927..6355c810b 100644 --- a/aiaccel/optimizer/random/search.py +++ b/aiaccel/optimizer/random/search.py @@ -2,7 +2,7 @@ from typing import Optional -class Optimizer(AbstractOptimizer): +class RandomSearchOptimizer(AbstractOptimizer): """An optimizer class with a random algorithm. """ diff --git a/aiaccel/optimizer/sobol/search.py b/aiaccel/optimizer/sobol/search.py index 194f349d9..a27cd06a4 100644 --- a/aiaccel/optimizer/sobol/search.py +++ b/aiaccel/optimizer/sobol/search.py @@ -7,7 +7,7 @@ import fasteners -class Optimizer(AbstractOptimizer): +class SobolSearchOptimizer(AbstractOptimizer): """An optimizer class with sobol algorithm. Attributes: diff --git a/aiaccel/optimizer/tpe/search.py b/aiaccel/optimizer/tpe/search.py index abf70e714..dd7330d0f 100644 --- a/aiaccel/optimizer/tpe/search.py +++ b/aiaccel/optimizer/tpe/search.py @@ -12,7 +12,7 @@ import pathlib -class Optimizer(AbstractOptimizer): +class TpeSearchOptimizer(AbstractOptimizer): def __init__(self, options: dict) -> None: """Initial method of Optimizer. diff --git a/aiaccel/start.py b/aiaccel/start.py index 27abe1650..42fd3b25c 100644 --- a/aiaccel/start.py +++ b/aiaccel/start.py @@ -12,7 +12,6 @@ from aiaccel.master.local_master import LocalMaster from aiaccel.scheduler.abci_scheduler import AbciScheduler from aiaccel.scheduler.local_scheduler import LocalScheduler -from aiaccel.optimizer.optimizer import OptimizerLoeader from aiaccel.util import filesystem as fs from aiaccel.easy_visualizer import EasyVisualizer from aiaccel import parameter as pt @@ -22,6 +21,8 @@ from aiaccel.config import Config from aiaccel.util.terminal import Terminal from pathlib import Path +from importlib import import_module +from importlib.machinery import SourceFileLoader class Arguments: @@ -506,11 +507,30 @@ def __init__(self, config_path: str) -> None: algorithm = config.search_algorithm.get() if Path(algorithm).exists() is True: algorithm = Path(algorithm) - self.optimizer = OptimizerLoeader(algorithm).get() + self.optimizer = self.import_and_getattr(algorithm) def __call__(self) -> Any: return self.optimizer + def get_pyfile_path(self, module_name: str) -> str: + path = ( + module_name + .replace(".", "/") + .replace("//", "../") + .replace(" ", "") + ) + ".py" + return path + + def import_and_getattr(self, name): + module_name, attr_name = name.rsplit(".", 1) + pyfile = self.get_pyfile_path(module_name) + + if Path(pyfile).exists(): + mod = SourceFileLoader('optimizer', pyfile).load_module() + else: + mod = import_module(module_name) + return getattr(mod, attr_name) + class Master(CreationMaster(Arguments()['config'])()): """ The Master class. diff --git a/docs/manual_jp.md b/docs/manual_jp.md index 9fb1189c9..b453884b4 100644 --- a/docs/manual_jp.md +++ b/docs/manual_jp.md @@ -185,7 +185,7 @@ ABCI: **サンプル** ```yaml optimize: - search_algorithm: "aiaccel.optimizer.nelder_mead" + search_algorithm: "aiaccel.optimizer.nelder_mead.search.NelderMeadSearchOptimizer" goal: "minimize" trial_number: 30 rand_seed: 42 @@ -417,7 +417,7 @@ ABCI: job_execution_options: "" optimize: - search_algorithm: "aiaccel.optimizer.nelder_mead" + search_algorithm: "aiaccel.optimizer.nelder_mead.search.NelderMeadSearchOptimizer" goal: "minimize" trial_number: 30 rand_seed: 42 diff --git a/examples/benchmark/config.yaml b/examples/benchmark/config.yaml index 2f646aaa1..d7e57aef3 100644 --- a/examples/benchmark/config.yaml +++ b/examples/benchmark/config.yaml @@ -13,11 +13,11 @@ ABCI: job_execution_options: "" optimize: - search_algorithm: "aiaccel.optimizer.nelder_mead" - #search_algorithm: "aiaccel.optimizer.random" - #search_algorithm: "aiaccel.optimizer.sobol" - #search_algorithm: "aiaccel.optimizer.grid" - #search_algorithm: "aiaccel.optimizer.tpe" + search_algorithm: "aiaccel.optimizer.nelder_mead.search.NelderMeadSearchOptimizer" + #search_algorithm: "aiaccel.optimizer.random.search.RandomSearchOptimizer" + #search_algorithm: "aiaccel.optimizer.sobol.search.SobolSearchOptimizer" + #search_algorithm: "aiaccel.optimizer.grid.search.GridSearchOptimizer" + #search_algorithm: "aiaccel.optimizer.tpe.search.TpeSearchOptimizer" goal: "minimize" trial_number: 30 rand_seed: 42 diff --git a/examples/resnet50_cifar10/config.yaml b/examples/resnet50_cifar10/config.yaml index ca579490c..159d5f83c 100644 --- a/examples/resnet50_cifar10/config.yaml +++ b/examples/resnet50_cifar10/config.yaml @@ -13,7 +13,11 @@ ABCI: job_execution_options: "" optimize: - search_algorithm: "aiaccel.optimizer.nelder_mead" + search_algorithm: "aiaccel.optimizer.nelder_mead.search.NelderMeadSearchOptimizer" + #search_algorithm: "aiaccel.optimizer.random.search.RandomSearchOptimizer" + #search_algorithm: "aiaccel.optimizer.sobol.search.SobolSearchOptimizer" + #search_algorithm: "aiaccel.optimizer.grid.search.GridSearchOptimizer" + #search_algorithm: "aiaccel.optimizer.tpe.search.TpeSearchOptimizer" goal: "minimize" trial_number: 100 rand_seed: 42 diff --git a/examples/schwefel/config.yaml b/examples/schwefel/config.yaml index 4d08f1493..aaa645e2c 100644 --- a/examples/schwefel/config.yaml +++ b/examples/schwefel/config.yaml @@ -13,7 +13,11 @@ ABCI: job_execution_options: "" optimize: - search_algorithm: "aiaccel.optimizer.nelder_mead" + search_algorithm: "aiaccel.optimizer.nelder_mead.search.NelderMeadSearchOptimizer" + #search_algorithm: "aiaccel.optimizer.random.search.RandomSearchOptimizer" + #search_algorithm: "aiaccel.optimizer.sobol.search.SobolSearchOptimizer" + #search_algorithm: "aiaccel.optimizer.grid.search.GridSearchOptimizer" + #search_algorithm: "aiaccel.optimizer.tpe.search.TpeSearchOptimizer" goal: "minimize" trial_number: 30 rand_seed: 42 diff --git a/examples/sphere/config.yaml b/examples/sphere/config.yaml index 288348d21..29c6ea7bc 100644 --- a/examples/sphere/config.yaml +++ b/examples/sphere/config.yaml @@ -13,7 +13,11 @@ ABCI: job_execution_options: "" optimize: - search_algorithm: "aiaccel.optimizer.nelder_mead" + search_algorithm: "aiaccel.optimizer.nelder_mead.search.NelderMeadSearchOptimizer" + #search_algorithm: "aiaccel.optimizer.random.search.RandomSearchOptimizer" + #search_algorithm: "aiaccel.optimizer.sobol.search.SobolSearchOptimizer" + #search_algorithm: "aiaccel.optimizer.grid.search.GridSearchOptimizer" + #search_algorithm: "aiaccel.optimizer.tpe.search.TpeSearchOptimizer" goal: "minimize" trial_number: 30 rand_seed: 42 diff --git a/examples/styblinski-tang/config.yaml b/examples/styblinski-tang/config.yaml index 33e015352..e3cc9d24f 100644 --- a/examples/styblinski-tang/config.yaml +++ b/examples/styblinski-tang/config.yaml @@ -13,7 +13,11 @@ ABCI: job_execution_options: "" optimize: - search_algorithm: "aiaccel.optimizer.nelder_mead" + search_algorithm: "aiaccel.optimizer.nelder_mead.search.NelderMeadSearchOptimizer" + #search_algorithm: "aiaccel.optimizer.random.search.RandomSearchOptimizer" + #search_algorithm: "aiaccel.optimizer.sobol.search.SobolSearchOptimizer" + #search_algorithm: "aiaccel.optimizer.grid.search.GridSearchOptimizer" + #search_algorithm: "aiaccel.optimizer.tpe.search.TpeSearchOptimizer" goal: "minimize" trial_number: 30 rand_seed: 42 diff --git a/examples/wrapper_sample/config.yaml b/examples/wrapper_sample/config.yaml index 12b9860fa..c27feb2d1 100644 --- a/examples/wrapper_sample/config.yaml +++ b/examples/wrapper_sample/config.yaml @@ -13,7 +13,11 @@ ABCI: job_execution_options: "" optimize: - search_algorithm: "aiaccel.optimizer.nelder_mead" + search_algorithm: "aiaccel.optimizer.nelder_mead.search.NelderMeadSearchOptimizer" + #search_algorithm: "aiaccel.optimizer.random.search.RandomSearchOptimizer" + #search_algorithm: "aiaccel.optimizer.sobol.search.SobolSearchOptimizer" + #search_algorithm: "aiaccel.optimizer.grid.search.GridSearchOptimizer" + #search_algorithm: "aiaccel.optimizer.tpe.search.TpeSearchOptimizer" goal: "minimize" trial_number: 30 rand_seed: 42 diff --git a/tests/blackbox_test/benchmark2/testcode.py b/tests/blackbox_test/benchmark2/testcode.py index 87a25a403..ac59ac7fe 100644 --- a/tests/blackbox_test/benchmark2/testcode.py +++ b/tests/blackbox_test/benchmark2/testcode.py @@ -57,7 +57,7 @@ "job_execution_options": "" }, "optimize": { - "search_algorithm": "aiaccel.optimizer.nelder_mead", + "search_algorithm": "aiaccel.optimizer.nelder_mead.search.NelderMeadSearchOptimizer", "goal": "minimize", "trial_number": 5, "rand_seed": 42, diff --git a/tests/test_data/config.json b/tests/test_data/config.json index 1766780f5..dd746a171 100644 --- a/tests/test_data/config.json +++ b/tests/test_data/config.json @@ -23,7 +23,7 @@ "group": "gaa" }, "optimize": { - "search_algorithm": "aiaccel.optimizer.nelder_mead", + "search_algorithm": "aiaccel.optimizer.nelder_mead.search.NelderMeadSearchOptimizer", "goal": "minimize", "trial_number": 10, "parameters": [ diff --git a/tests/test_data/config_abci.json b/tests/test_data/config_abci.json index ff23797a9..27dcd32d5 100644 --- a/tests/test_data/config_abci.json +++ b/tests/test_data/config_abci.json @@ -19,7 +19,7 @@ "group": "gaa" }, "optimize": { - "search_algorithm": "aiaccel.optimizer.nelder_mead", + "search_algorithm": "aiaccel.optimizer.nelder_mead.search.NelderMeadSearchOptimizer", "goal": "minimize", "trial_number": 10, "parameters": [ diff --git a/tests/test_data/config_grid.json b/tests/test_data/config_grid.json index a937182b4..8f81d2903 100644 --- a/tests/test_data/config_grid.json +++ b/tests/test_data/config_grid.json @@ -14,7 +14,7 @@ "job_execution_options": "" }, "optimize": { - "search_algorithm": "aiaccel.optimizer.grid", + "search_algorithm": "aiaccel.optimizer.grid.search.GridSearchOptimizer", "goal": "minimize", "trial_number": 10, "rand_seed": 42, diff --git a/tests/test_data/config_grid_resumption.json b/tests/test_data/config_grid_resumption.json index 3f08743c9..7e5e11375 100644 --- a/tests/test_data/config_grid_resumption.json +++ b/tests/test_data/config_grid_resumption.json @@ -14,7 +14,7 @@ "job_execution_options": "" }, "optimize": { - "search_algorithm": "aiaccel.optimizer.grid", + "search_algorithm": "aiaccel.optimizer.grid.search.GridSearchOptimizer", "goal": "minimize", "trial_number": 5, "rand_seed": 42, diff --git a/tests/test_data/config_nelder-mead.json b/tests/test_data/config_nelder-mead.json index 87265d3ee..24790de0d 100644 --- a/tests/test_data/config_nelder-mead.json +++ b/tests/test_data/config_nelder-mead.json @@ -16,7 +16,7 @@ "job_execution_options": "" }, "optimize": { - "search_algorithm": "aiaccel.optimizer.nelder_mead", + "search_algorithm": "aiaccel.optimizer.nelder_mead.search.NelderMeadSearchOptimizer", "goal": "minimize", "trial_number": 10, "rand_seed": 42, diff --git a/tests/test_data/config_nelder-mead_resumption.json b/tests/test_data/config_nelder-mead_resumption.json index 4d2fca9c7..186c1caea 100644 --- a/tests/test_data/config_nelder-mead_resumption.json +++ b/tests/test_data/config_nelder-mead_resumption.json @@ -16,7 +16,7 @@ "job_execution_options": "" }, "optimize": { - "search_algorithm": "aiaccel.optimizer.nelder_mead", + "search_algorithm": "aiaccel.optimizer.nelder_mead.search.NelderMeadSearchOptimizer", "goal": "minimize", "trial_number": 5, "rand_seed": 42, diff --git a/tests/test_data/config_random.json b/tests/test_data/config_random.json index d478e4c87..13842f646 100644 --- a/tests/test_data/config_random.json +++ b/tests/test_data/config_random.json @@ -13,7 +13,7 @@ "job_execution_options": "" }, "optimize": { - "search_algorithm": "aiaccel.optimizer.random", + "search_algorithm": "aiaccel.optimizer.random.search.RandomSearchOptimizer", "goal": "minimize", "trial_number": 10, "rand_seed": 42, diff --git a/tests/test_data/config_random_resumption.json b/tests/test_data/config_random_resumption.json index 91260c074..ef9109abb 100644 --- a/tests/test_data/config_random_resumption.json +++ b/tests/test_data/config_random_resumption.json @@ -13,7 +13,7 @@ "job_execution_options": "" }, "optimize": { - "search_algorithm": "aiaccel.optimizer.random", + "search_algorithm": "aiaccel.optimizer.random.search.RandomSearchOptimizer", "goal": "minimize", "trial_number": 5, "rand_seed": 42, diff --git a/tests/test_data/config_sobol.json b/tests/test_data/config_sobol.json index 8da83ec9e..8398512a8 100644 --- a/tests/test_data/config_sobol.json +++ b/tests/test_data/config_sobol.json @@ -13,7 +13,7 @@ "job_execution_options": "" }, "optimize": { - "search_algorithm": "aiaccel.optimizer.sobol", + "search_algorithm": "aiaccel.optimizer.sobol.search.SobolSearchOptimizer", "goal": "minimize", "trial_number": 10, "rand_seed": 42, diff --git a/tests/test_data/config_sobol_resumption.json b/tests/test_data/config_sobol_resumption.json index 8edafd333..f4f5977f6 100644 --- a/tests/test_data/config_sobol_resumption.json +++ b/tests/test_data/config_sobol_resumption.json @@ -13,7 +13,7 @@ "job_execution_options": "" }, "optimize": { - "search_algorithm": "aiaccel.optimizer.sobol", + "search_algorithm": "aiaccel.optimizer.sobol.search.SobolSearchOptimizer", "goal": "minimize", "trial_number": 5, "rand_seed": 42, diff --git a/tests/test_data/config_tpe.json b/tests/test_data/config_tpe.json index 91a7ea58a..29607dbb4 100644 --- a/tests/test_data/config_tpe.json +++ b/tests/test_data/config_tpe.json @@ -13,7 +13,7 @@ "job_execution_options": "" }, "optimize": { - "search_algorithm": "aiaccel.optimizer.tpe", + "search_algorithm": "aiaccel.optimizer.tpe.search.TpeSearchOptimizer", "goal": "minimize", "trial_number": 10, "rand_seed": 42, diff --git a/tests/test_data/config_tpe_resumption.json b/tests/test_data/config_tpe_resumption.json index 8024f1c2c..01c499069 100644 --- a/tests/test_data/config_tpe_resumption.json +++ b/tests/test_data/config_tpe_resumption.json @@ -13,7 +13,7 @@ "job_execution_options": "" }, "optimize": { - "search_algorithm": "aiaccel.optimizer.tpe", + "search_algorithm": "aiaccel.optimizer.tpe.search.TpeSearchOptimizer", "goal": "minimize", "trial_number": 5, "rand_seed": 42, diff --git a/tests/test_data/grid_config.json b/tests/test_data/grid_config.json index b1515583f..e5537933a 100644 --- a/tests/test_data/grid_config.json +++ b/tests/test_data/grid_config.json @@ -13,7 +13,7 @@ "group": "gaa" }, "optimize": { - "search_algorithm": "aiaccel.optimizer.grid", + "search_algorithm": "aiaccel.optimizer.grid.search.GridSearchOptimizer", "goal": "minimize", "trial_number": 10, "rand_seed": 42, diff --git a/tests/unit/abci_test/additionaloptions.json b/tests/unit/abci_test/additionaloptions.json index 47e051f4c..256330666 100644 --- a/tests/unit/abci_test/additionaloptions.json +++ b/tests/unit/abci_test/additionaloptions.json @@ -33,7 +33,7 @@ "$2search_algorithm": "Grid", "$3search_algorithm": "Sobol", "$$$search_algorithm": "NelderMead", - "search_algorithm": "aiaccel.optimizer.tpe", + "search_algorithm": "aiaccel.optimizer.tpe.search.TpeSearchOptimizer", "parameter_pool_size": 4, "sleep_time_optimizer": 1 }, diff --git a/tests/unit/abci_test/additionaloptions2.json b/tests/unit/abci_test/additionaloptions2.json index 36b0bd1df..76c10346b 100644 --- a/tests/unit/abci_test/additionaloptions2.json +++ b/tests/unit/abci_test/additionaloptions2.json @@ -33,7 +33,7 @@ "$2search_algorithm": "Grid", "$3search_algorithm": "Sobol", "$$$search_algorithm": "Nelder-Mead", - "search_algorithm": "aiaccel.optimizer.tpe", + "search_algorithm": "aiaccel.optimizer.tpe.search.TpeSearchOptimizer", "parameter_pool_size": 4, "sleep_time_optimizer": 1 }, diff --git a/tests/unit/abci_test/cfg.json b/tests/unit/abci_test/cfg.json index 97c3458c8..274d513f5 100644 --- a/tests/unit/abci_test/cfg.json +++ b/tests/unit/abci_test/cfg.json @@ -33,7 +33,7 @@ "$2search_algorithm": "Grid", "$3search_algorithm": "Sobol", "$$$search_algorithm": "Nelder-Mead", - "search_algorithm": "aiaccel.optimizer.tpe", + "search_algorithm": "aiaccel.optimizer.tpe.search.TpeSearchOptimizer", "parameter_pool_size": 4, "sleep_time_optimizer": 1 }, diff --git a/tests/unit/abci_test/cfg2.json b/tests/unit/abci_test/cfg2.json index c09a36694..01ed09f67 100644 --- a/tests/unit/abci_test/cfg2.json +++ b/tests/unit/abci_test/cfg2.json @@ -33,7 +33,7 @@ "$2search_algorithm": "Grid", "$3search_algorithm": "Sobol", "$$$search_algorithm": "Nelder-Mead", - "search_algorithm": "aiaccel.optimizer.tpe", + "search_algorithm": "aiaccel.optimizer.tpe.search.TpeSearchOptimizer", "parameter_pool_size": 4, "sleep_time_optimizer": 1 }, diff --git a/tests/unit/abci_test/cfg3.json b/tests/unit/abci_test/cfg3.json index 5171e8c63..ce1a466ff 100644 --- a/tests/unit/abci_test/cfg3.json +++ b/tests/unit/abci_test/cfg3.json @@ -33,7 +33,7 @@ "$2search_algorithm": "Grid", "$3search_algorithm": "Sobol", "$$$search_algorithm": "Nelder-Mead", - "search_algorithm": "aiaccel.optimizer.tpe", + "search_algorithm": "aiaccel.optimizer.tpe.search.TpeSearchOptimizer", "parameter_pool_size": 4, "sleep_time_optimizer": 1 }, diff --git a/tests/unit/optimizer_test/sample/search.py b/tests/unit/optimizer_test/sample/search.py index 1b8ffafe2..d714c634f 100644 --- a/tests/unit/optimizer_test/sample/search.py +++ b/tests/unit/optimizer_test/sample/search.py @@ -2,7 +2,7 @@ from typing import Optional -class Optimizer(AbstractOptimizer): +class MyOptimizer(AbstractOptimizer): def generate_parameter(self, number: Optional[int] = 1) -> None: returned_params = [] diff --git a/tests/unit/optimizer_test/test_grid_search.py b/tests/unit/optimizer_test/test_grid_search.py index 7ec1ba066..efe56279a 100644 --- a/tests/unit/optimizer_test/test_grid_search.py +++ b/tests/unit/optimizer_test/test_grid_search.py @@ -1,4 +1,4 @@ -from aiaccel.optimizer.grid.search import Optimizer, generate_grid_points +from aiaccel.optimizer.grid.search import GridSearchOptimizer, generate_grid_points from aiaccel.parameter import HyperParameter, load_parameter from tests.base_test import BaseTest import functools @@ -78,7 +78,7 @@ def test_pre_process(self, clean_work_dir): 'graph': False, 'process_name': 'optimizer' } - optimizer = Optimizer(options) + optimizer = GridSearchOptimizer(options) optimizer.pre_process() def test_get_parameter_index(self, clean_work_dir): @@ -91,7 +91,7 @@ def test_get_parameter_index(self, clean_work_dir): 'graph': False, 'process_name': 'optimizer' } - optimizer = Optimizer(options) + optimizer = GridSearchOptimizer(options) optimizer.pre_process() assert optimizer.get_parameter_index() == [0 for _ in range(0, 10)] @@ -112,7 +112,7 @@ def test_generate_parameter(self, clean_work_dir): 'graph': False, 'process_name': 'optimizer' } - optimizer = Optimizer(options) + optimizer = GridSearchOptimizer(options) optimizer.pre_process() max_index = functools.reduce( lambda x, y: x*y, diff --git a/tests/unit/optimizer_test/test_nelder_mead_search.py b/tests/unit/optimizer_test/test_nelder_mead_search.py index e860ef107..49e894473 100644 --- a/tests/unit/optimizer_test/test_nelder_mead_search.py +++ b/tests/unit/optimizer_test/test_nelder_mead_search.py @@ -1,6 +1,6 @@ from aiaccel.config import ConfileWrapper from aiaccel.optimizer.nelder_mead.sampler import NelderMead -from aiaccel.optimizer.nelder_mead.search import Optimizer +from aiaccel.optimizer.nelder_mead.search import NelderMeadSearchOptimizer from aiaccel.parameter import load_parameter from aiaccel.util.filesystem import move_file from tests.base_test import BaseTest @@ -22,7 +22,7 @@ def setup_optimizer(self, clean_work_dir): 'graph': False, 'process_name': 'optimizer' } - self.optimizer = Optimizer(options) + self.optimizer = NelderMeadSearchOptimizer(options) yield self.optimizer = None diff --git a/tests/unit/optimizer_test/test_optimizer.py b/tests/unit/optimizer_test/test_optimizer.py deleted file mode 100644 index 6d7a8ff8e..000000000 --- a/tests/unit/optimizer_test/test_optimizer.py +++ /dev/null @@ -1,35 +0,0 @@ -from pathlib import Path -import aiaccel -from aiaccel.optimizer.optimizer import OptimizerLoeader -from importlib.machinery import SourceFileLoader - - -def test_OptimizerLoeader_1(): - algorithm = "aiaccel.optimizer.grid" - opt = OptimizerLoeader(algorithm) - assert opt.get() == aiaccel.optimizer.grid.search.Optimizer - - algorithm = "aiaccel.optimizer.random" - opt = OptimizerLoeader(algorithm) - assert opt.get() == aiaccel.optimizer.random.search.Optimizer - - algorithm = "aiaccel.optimizer.sobol" - opt = OptimizerLoeader(algorithm) - assert opt.get() == aiaccel.optimizer.sobol.search.Optimizer - - algorithm = "aiaccel.optimizer.nelder_mead" - opt = OptimizerLoeader(algorithm) - assert opt.get() == aiaccel.optimizer.nelder_mead.search.Optimizer - - algorithm = "aiaccel.optimizer.tpe" - opt = OptimizerLoeader(algorithm) - assert opt.get() == aiaccel.optimizer.tpe.search.Optimizer - - -def test_OptimizerLoeader_2(): - algorithm = Path("./tests/unit/optimizer_test/sample") - try: - opt = OptimizerLoeader(algorithm) - assert True - except: - assert False diff --git a/tests/unit/optimizer_test/test_random_search.py b/tests/unit/optimizer_test/test_random_search.py index cb599e63d..25ef0dfa4 100644 --- a/tests/unit/optimizer_test/test_random_search.py +++ b/tests/unit/optimizer_test/test_random_search.py @@ -1,4 +1,4 @@ -from aiaccel.optimizer.random.search import Optimizer +from aiaccel.optimizer.random.search import RandomSearchOptimizer from tests.base_test import BaseTest @@ -14,6 +14,6 @@ def test_generate_parameter(self): 'graph': False, 'process_name': 'optimizer' } - optimizer = Optimizer(options) + optimizer = RandomSearchOptimizer(options) optimizer.pre_process() assert optimizer.generate_parameter() is None diff --git a/tests/unit/optimizer_test/test_sobol_search.py b/tests/unit/optimizer_test/test_sobol_search.py index 00be459f9..d0527111f 100644 --- a/tests/unit/optimizer_test/test_sobol_search.py +++ b/tests/unit/optimizer_test/test_sobol_search.py @@ -1,4 +1,4 @@ -from aiaccel.optimizer.sobol.search import Optimizer +from aiaccel.optimizer.sobol.search import SobolSearchOptimizer from tests.base_test import BaseTest import pytest @@ -16,7 +16,7 @@ def setup_optimizer(self, clean_work_dir): 'graph': False, 'process_name': 'optimizer' } - self.optimizer = Optimizer(options) + self.optimizer = SobolSearchOptimizer(options) yield self.optimizer = None diff --git a/tests/unit/optimizer_test/test_tpe_search.py b/tests/unit/optimizer_test/test_tpe_search.py index b22b50406..d2f096bbe 100644 --- a/tests/unit/optimizer_test/test_tpe_search.py +++ b/tests/unit/optimizer_test/test_tpe_search.py @@ -1,7 +1,7 @@ import pytest from aiaccel.config import Config from aiaccel.parameter import load_parameter -from aiaccel.optimizer.tpe.search import Optimizer +from aiaccel.optimizer.tpe.search import TpeSearchOptimizer from aiaccel.optimizer.tpe.search import create_distributions from tests.base_test import BaseTest @@ -19,7 +19,7 @@ def setup_optimizer(self, clean_work_dir, data_dir): 'graph': False, 'process_name': 'optimizer' } - self.optimizer = Optimizer(options) + self.optimizer = TpeSearchOptimizer(options) yield self.optimizer = None diff --git a/tests/unit/test_config.py b/tests/unit/test_config.py index de767faa2..e0465881a 100644 --- a/tests/unit/test_config.py +++ b/tests/unit/test_config.py @@ -106,7 +106,7 @@ def test_config(config_json): assert config.resource_type.get() == "local" assert config.num_node.get() == 4 assert config.abci_group.get() == "gaa" - assert config.search_algorithm.get() == "aiaccel.optimizer.nelder_mead" + assert config.search_algorithm.get() == "aiaccel.optimizer.nelder_mead.search.NelderMeadSearchOptimizer" assert config.goal.get() == "minimize" assert config.trial_number.get() == 10 assert config.name_length.get() == 6 diff --git a/tests/unit/test_module.py b/tests/unit/test_module.py index 2bc789818..12c3e43c6 100644 --- a/tests/unit/test_module.py +++ b/tests/unit/test_module.py @@ -1,6 +1,6 @@ from aiaccel.master.local_master import LocalMaster from aiaccel.module import AbstractModule -from aiaccel.optimizer.random.search import Optimizer +from aiaccel.optimizer.random.search import RandomSearchOptimizer from aiaccel.scheduler.local_scheduler import LocalScheduler from aiaccel.util.filesystem import file_create from aiaccel.util.logger import str_to_logging_level @@ -127,7 +127,7 @@ def test_get_module_type_alive_file(self, work_dir): 'graph': False, 'process_name': 'optimizer' } - optimizer = Optimizer(options) + optimizer = RandomSearchOptimizer(options) module_type, alive_file = optimizer.get_module_type_alive_file() assert module_type == aiaccel.module_type_optimizer assert Path(alive_file).resolve() == work_dir.joinpath( From 616ea56f1bde3729bb65779f402cfa80a4205ecf Mon Sep 17 00:00:00 2001 From: aramoto99 Date: Wed, 17 Aug 2022 12:55:06 +0900 Subject: [PATCH 09/12] Fix dynamic loading of optimizer --- aiaccel/start.py | 15 +++++++-------- 1 file changed, 7 insertions(+), 8 deletions(-) diff --git a/aiaccel/start.py b/aiaccel/start.py index 42fd3b25c..eea92c954 100644 --- a/aiaccel/start.py +++ b/aiaccel/start.py @@ -504,10 +504,7 @@ class CreationOptimizer: def __init__(self, config_path: str) -> None: config = Config(config_path) - algorithm = config.search_algorithm.get() - if Path(algorithm).exists() is True: - algorithm = Path(algorithm) - self.optimizer = self.import_and_getattr(algorithm) + self.optimizer = self.import_and_getattr(config.search_algorithm.get()) def __call__(self) -> Any: return self.optimizer @@ -521,15 +518,17 @@ def get_pyfile_path(self, module_name: str) -> str: ) + ".py" return path - def import_and_getattr(self, name): + def import_and_getattr(self, name: str) -> Any: module_name, attr_name = name.rsplit(".", 1) pyfile = self.get_pyfile_path(module_name) if Path(pyfile).exists(): - mod = SourceFileLoader('optimizer', pyfile).load_module() + # Import external modules not included in the aiaccel package. + module = SourceFileLoader('MyOptimizer', pyfile).load_module() else: - mod = import_module(module_name) - return getattr(mod, attr_name) + # It is assumed to be imported from aiaccel.optimizer.*. + module = import_module(module_name) + return getattr(module, attr_name) class Master(CreationMaster(Arguments()['config'])()): From de815e739a7102a2a02897e9cebe2d2714ce54e2 Mon Sep 17 00:00:00 2001 From: aramoto99 Date: Wed, 17 Aug 2022 13:20:13 +0900 Subject: [PATCH 10/12] Function names and comments were rolled back. --- aiaccel/common.py | 10 +++++----- aiaccel/optimizer/grid/search.py | 2 +- aiaccel/optimizer/nelder_mead/search.py | 2 +- aiaccel/optimizer/sobol/search.py | 2 +- aiaccel/optimizer/tpe/search.py | 2 +- tests/unit/optimizer_test/test_grid_search.py | 2 +- tests/unit/optimizer_test/test_nelder_mead.py | 4 ++-- tests/unit/optimizer_test/test_nelder_mead_search.py | 2 +- tests/unit/optimizer_test/test_random_search.py | 2 +- tests/unit/optimizer_test/test_sobol_search.py | 2 +- tests/unit/optimizer_test/test_tpe_search.py | 2 +- 11 files changed, 16 insertions(+), 16 deletions(-) diff --git a/aiaccel/common.py b/aiaccel/common.py index 1a327fa89..21d3593ad 100644 --- a/aiaccel/common.py +++ b/aiaccel/common.py @@ -58,11 +58,11 @@ resource_type_local = 'local' resource_type_abci = 'abci' -search_algorithm_grid = 'aiaccel.optimizer.grid' -search_algorithm_nelder_mead = 'aiaccel.optimizer.nelder_mead' -search_algorithm_random = 'aiaccel.optimizer.random' -search_algorithm_sobol = 'aiaccel.optimizer.sobol' -search_algorithm_tpe = 'aiaccel.optimizer.tpe' +search_algorithm_grid = 'aiaccel.optimizer.grid.search.GridSearchOptimizer' +search_algorithm_nelder_mead = 'aiaccel.optimizer.nelder_mead.search.NelderMeadOptimizer' +search_algorithm_random = 'aiaccel.optimizer.random.search.RandomSearchOptimizer' +search_algorithm_sobol = 'aiaccel.optimizer.sobol.search.SobolSearchOptimizer' +search_algorithm_tpe = 'aiaccel.optimizer.tpe.search.TpeSearchOptimizer' def get_module_type_from_class_name(class_name: str) -> str: diff --git a/aiaccel/optimizer/grid/search.py b/aiaccel/optimizer/grid/search.py index bca5ba61c..99282469b 100644 --- a/aiaccel/optimizer/grid/search.py +++ b/aiaccel/optimizer/grid/search.py @@ -71,7 +71,7 @@ class GridSearchOptimizer(AbstractOptimizer): """ def __init__(self, options: dict) -> None: - """Initial method of Optimizer. + """Initial method of GridSearchOptimizer. Args: config (str): A file name of a configuration. diff --git a/aiaccel/optimizer/nelder_mead/search.py b/aiaccel/optimizer/nelder_mead/search.py index b69d390cc..95f5925d4 100644 --- a/aiaccel/optimizer/nelder_mead/search.py +++ b/aiaccel/optimizer/nelder_mead/search.py @@ -16,7 +16,7 @@ class NelderMeadSearchOptimizer(AbstractOptimizer): """ def __init__(self, options: dict) -> None: - """Initial method of Optimizer. + """Initial method of NelderMeadSearchOptimizer. Args: config (str): A file name of a configuration. diff --git a/aiaccel/optimizer/sobol/search.py b/aiaccel/optimizer/sobol/search.py index a27cd06a4..63b695814 100644 --- a/aiaccel/optimizer/sobol/search.py +++ b/aiaccel/optimizer/sobol/search.py @@ -18,7 +18,7 @@ class SobolSearchOptimizer(AbstractOptimizer): """ def __init__(self, options: dict) -> None: - """Initial method of Optimizer. + """Initial method of SobolSearchOptimizer. Args: config (str): A file name of a configuration. diff --git a/aiaccel/optimizer/tpe/search.py b/aiaccel/optimizer/tpe/search.py index dd7330d0f..bccbd0eb8 100644 --- a/aiaccel/optimizer/tpe/search.py +++ b/aiaccel/optimizer/tpe/search.py @@ -14,7 +14,7 @@ class TpeSearchOptimizer(AbstractOptimizer): def __init__(self, options: dict) -> None: - """Initial method of Optimizer. + """Initial method of TpeSearchOptimizer. Args: options (dict): A file name of a configuration. diff --git a/tests/unit/optimizer_test/test_grid_search.py b/tests/unit/optimizer_test/test_grid_search.py index efe56279a..bfec798cf 100644 --- a/tests/unit/optimizer_test/test_grid_search.py +++ b/tests/unit/optimizer_test/test_grid_search.py @@ -66,7 +66,7 @@ def __init__(self, name, type_name): assert True -class TestOptimizer(BaseTest): +class TestGridSearchOptimizer(BaseTest): def test_pre_process(self, clean_work_dir): options = { diff --git a/tests/unit/optimizer_test/test_nelder_mead.py b/tests/unit/optimizer_test/test_nelder_mead.py index f6fad740a..1e7885450 100644 --- a/tests/unit/optimizer_test/test_nelder_mead.py +++ b/tests/unit/optimizer_test/test_nelder_mead.py @@ -307,7 +307,7 @@ def test_nelder_mead_parameters(load_test_config): 'executing:', nelder_mead._executing_index, 'evaluated_itr:', nelder_mead._evaluated_itr) - # a functionality of Optimizer::check_result() + # a functionality of NelderMeadSearchOptimizer::check_result() # ready_params = nelder_mead.get_ready_parameters() ready_params = nelder_mead._executing @@ -318,7 +318,7 @@ def test_nelder_mead_parameters(load_test_config): if debug: print('\tsum:', rp['result']) - # a functionality of Optimizer::generate_parameter() + # a functionality of NelderMeadSearchOptimizer::generate_parameter() searched_params = nelder_mead.search() if searched_params is None: diff --git a/tests/unit/optimizer_test/test_nelder_mead_search.py b/tests/unit/optimizer_test/test_nelder_mead_search.py index 49e894473..f9ac4697e 100644 --- a/tests/unit/optimizer_test/test_nelder_mead_search.py +++ b/tests/unit/optimizer_test/test_nelder_mead_search.py @@ -9,7 +9,7 @@ import pytest -class TestOptimizer(BaseTest): +class TestNelderMeadSearchOptimizer(BaseTest): @pytest.fixture(autouse=True) def setup_optimizer(self, clean_work_dir): diff --git a/tests/unit/optimizer_test/test_random_search.py b/tests/unit/optimizer_test/test_random_search.py index 25ef0dfa4..a0fe6a133 100644 --- a/tests/unit/optimizer_test/test_random_search.py +++ b/tests/unit/optimizer_test/test_random_search.py @@ -2,7 +2,7 @@ from tests.base_test import BaseTest -class TestOptimizer(BaseTest): +class TestRandomSearchOptimizer(BaseTest): def test_generate_parameter(self): options = { diff --git a/tests/unit/optimizer_test/test_sobol_search.py b/tests/unit/optimizer_test/test_sobol_search.py index d0527111f..15d973367 100644 --- a/tests/unit/optimizer_test/test_sobol_search.py +++ b/tests/unit/optimizer_test/test_sobol_search.py @@ -3,7 +3,7 @@ import pytest -class TestOptimizer(BaseTest): +class TestSobolSearchOptimizer(BaseTest): @pytest.fixture(autouse=True) def setup_optimizer(self, clean_work_dir): diff --git a/tests/unit/optimizer_test/test_tpe_search.py b/tests/unit/optimizer_test/test_tpe_search.py index d2f096bbe..3038c0cc5 100644 --- a/tests/unit/optimizer_test/test_tpe_search.py +++ b/tests/unit/optimizer_test/test_tpe_search.py @@ -6,7 +6,7 @@ from tests.base_test import BaseTest -class TestOptimizer(BaseTest): +class TestTpeSearchOptimizer(BaseTest): @pytest.fixture(autouse=True) def setup_optimizer(self, clean_work_dir, data_dir): From 67a317295153f5d0a86c97225cf6f9092acfa58d Mon Sep 17 00:00:00 2001 From: aramoto99 Date: Mon, 22 Aug 2022 10:25:39 +0900 Subject: [PATCH 11/12] Changed the standard optimizer specification method --- aiaccel/__init__.py | 14 +++++++++++++- aiaccel/common.py | 11 +++++++---- aiaccel/optimizer/grid/search.py | 4 ++-- aiaccel/optimizer/nelder_mead/search.py | 4 ++-- aiaccel/optimizer/random/search.py | 2 +- aiaccel/optimizer/sobol/search.py | 4 ++-- aiaccel/optimizer/tpe/search.py | 4 ++-- aiaccel/start.py | 16 +++++++++++++--- docs/manual_jp.md | 4 ++-- examples/benchmark/config.yaml | 10 +++++----- examples/resnet50_cifar10/config.yaml | 10 +++++----- examples/schwefel/config.yaml | 10 +++++----- examples/sphere/config.yaml | 10 +++++----- examples/styblinski-tang/config.yaml | 10 +++++----- examples/wrapper_sample/config.yaml | 10 +++++----- tests/blackbox_test/benchmark2/testcode.py | 2 +- tests/test_data/config.json | 2 +- tests/test_data/config_abci.json | 2 +- tests/test_data/config_grid.json | 2 +- tests/test_data/config_grid_resumption.json | 2 +- tests/test_data/config_nelder-mead.json | 2 +- .../test_data/config_nelder-mead_resumption.json | 2 +- tests/test_data/config_random.json | 2 +- tests/test_data/config_random_resumption.json | 2 +- tests/test_data/config_sobol.json | 2 +- tests/test_data/config_sobol_resumption.json | 2 +- tests/test_data/config_tpe.json | 2 +- tests/test_data/config_tpe_resumption.json | 2 +- tests/test_data/grid_config.json | 2 +- tests/unit/abci_test/additionaloptions.json | 2 +- tests/unit/abci_test/additionaloptions2.json | 2 +- tests/unit/abci_test/cfg.json | 2 +- tests/unit/abci_test/cfg2.json | 2 +- tests/unit/abci_test/cfg3.json | 2 +- tests/unit/optimizer_test/test_grid_search.py | 10 +++++----- tests/unit/optimizer_test/test_nelder_mead.py | 4 ++-- .../optimizer_test/test_nelder_mead_search.py | 6 +++--- tests/unit/optimizer_test/test_random_search.py | 6 +++--- tests/unit/optimizer_test/test_sobol_search.py | 6 +++--- tests/unit/optimizer_test/test_tpe_search.py | 6 +++--- tests/unit/test_config.py | 2 +- tests/unit/test_module.py | 4 ++-- 42 files changed, 115 insertions(+), 90 deletions(-) diff --git a/aiaccel/__init__.py b/aiaccel/__init__.py index 03177ae36..270822c88 100644 --- a/aiaccel/__init__.py +++ b/aiaccel/__init__.py @@ -40,6 +40,7 @@ from .common import module_type_master from .common import module_type_optimizer from .common import module_type_scheduler +from .common import pkg_name from .common import resource_type_abci from .common import resource_type_local from .common import search_algorithm_grid @@ -49,6 +50,11 @@ from .common import search_algorithm_tpe from .common import get_module_type_from_class_name from .common import get_file_random +from .optimizer.grid.search import GridOptimizer +from .optimizer.random.search import RandomOptimizer +from .optimizer.sobol.search import SobolOptimizer +from .optimizer.nelder_mead.search import NelderMeadOptimizer +from .optimizer.tpe.search import TpeOptimizer __all__ = [ alive_master, @@ -95,11 +101,17 @@ module_type_scheduler, resource_type_abci, resource_type_local, + pkg_name, search_algorithm_grid, search_algorithm_nelder_mead, search_algorithm_random, search_algorithm_sobol, search_algorithm_tpe, get_module_type_from_class_name, - get_file_random + get_file_random, + GridOptimizer, + RandomOptimizer, + SobolOptimizer, + NelderMeadOptimizer, + TpeOptimizer ] diff --git a/aiaccel/common.py b/aiaccel/common.py index 21d3593ad..be21da8e7 100644 --- a/aiaccel/common.py +++ b/aiaccel/common.py @@ -4,6 +4,7 @@ * Import this as follows: """ + alive_master = 'master.yml' alive_optimizer = 'optimizer.yml' alive_scheduler = 'scheduler.yml' @@ -55,14 +56,16 @@ module_type_optimizer = 'optimizer' module_type_scheduler = 'scheduler' +pkg_name = "aiaccel" + resource_type_local = 'local' resource_type_abci = 'abci' -search_algorithm_grid = 'aiaccel.optimizer.grid.search.GridSearchOptimizer' +search_algorithm_grid = 'aiaccel.optimizer.grid.search.GridOptimizer' search_algorithm_nelder_mead = 'aiaccel.optimizer.nelder_mead.search.NelderMeadOptimizer' -search_algorithm_random = 'aiaccel.optimizer.random.search.RandomSearchOptimizer' -search_algorithm_sobol = 'aiaccel.optimizer.sobol.search.SobolSearchOptimizer' -search_algorithm_tpe = 'aiaccel.optimizer.tpe.search.TpeSearchOptimizer' +search_algorithm_random = 'aiaccel.optimizer.random.search.RandomOptimizer' +search_algorithm_sobol = 'aiaccel.optimizer.sobol.search.SobolOptimizer' +search_algorithm_tpe = 'aiaccel.optimizer.tpe.search.TpeOptimizer' def get_module_type_from_class_name(class_name: str) -> str: diff --git a/aiaccel/optimizer/grid/search.py b/aiaccel/optimizer/grid/search.py index 99282469b..71c4c0497 100644 --- a/aiaccel/optimizer/grid/search.py +++ b/aiaccel/optimizer/grid/search.py @@ -62,7 +62,7 @@ def generate_grid_points(p: HyperParameter, config: Config) -> dict: return new_param -class GridSearchOptimizer(AbstractOptimizer): +class GridOptimizer(AbstractOptimizer): """An optimizer class with grid search algorithm. Attributes: @@ -71,7 +71,7 @@ class GridSearchOptimizer(AbstractOptimizer): """ def __init__(self, options: dict) -> None: - """Initial method of GridSearchOptimizer. + """Initial method of GridOptimizer. Args: config (str): A file name of a configuration. diff --git a/aiaccel/optimizer/nelder_mead/search.py b/aiaccel/optimizer/nelder_mead/search.py index 95f5925d4..c4b0e1874 100644 --- a/aiaccel/optimizer/nelder_mead/search.py +++ b/aiaccel/optimizer/nelder_mead/search.py @@ -7,7 +7,7 @@ import numpy as np -class NelderMeadSearchOptimizer(AbstractOptimizer): +class NelderMeadOptimizer(AbstractOptimizer): """An optimizer class with nelder mead algorithm. Attributes: @@ -16,7 +16,7 @@ class NelderMeadSearchOptimizer(AbstractOptimizer): """ def __init__(self, options: dict) -> None: - """Initial method of NelderMeadSearchOptimizer. + """Initial method of NelderMeadOptimizer. Args: config (str): A file name of a configuration. diff --git a/aiaccel/optimizer/random/search.py b/aiaccel/optimizer/random/search.py index 6355c810b..ee5b7b686 100644 --- a/aiaccel/optimizer/random/search.py +++ b/aiaccel/optimizer/random/search.py @@ -2,7 +2,7 @@ from typing import Optional -class RandomSearchOptimizer(AbstractOptimizer): +class RandomOptimizer(AbstractOptimizer): """An optimizer class with a random algorithm. """ diff --git a/aiaccel/optimizer/sobol/search.py b/aiaccel/optimizer/sobol/search.py index 63b695814..b6c9c05c4 100644 --- a/aiaccel/optimizer/sobol/search.py +++ b/aiaccel/optimizer/sobol/search.py @@ -7,7 +7,7 @@ import fasteners -class SobolSearchOptimizer(AbstractOptimizer): +class SobolOptimizer(AbstractOptimizer): """An optimizer class with sobol algorithm. Attributes: @@ -18,7 +18,7 @@ class SobolSearchOptimizer(AbstractOptimizer): """ def __init__(self, options: dict) -> None: - """Initial method of SobolSearchOptimizer. + """Initial method of SobolOptimizer. Args: config (str): A file name of a configuration. diff --git a/aiaccel/optimizer/tpe/search.py b/aiaccel/optimizer/tpe/search.py index bccbd0eb8..8dc443a71 100644 --- a/aiaccel/optimizer/tpe/search.py +++ b/aiaccel/optimizer/tpe/search.py @@ -12,9 +12,9 @@ import pathlib -class TpeSearchOptimizer(AbstractOptimizer): +class TpeOptimizer(AbstractOptimizer): def __init__(self, options: dict) -> None: - """Initial method of TpeSearchOptimizer. + """Initial method of TpeOptimizer. Args: options (dict): A file name of a configuration. diff --git a/aiaccel/start.py b/aiaccel/start.py index eea92c954..ca3407ff1 100644 --- a/aiaccel/start.py +++ b/aiaccel/start.py @@ -510,15 +510,25 @@ def __call__(self) -> Any: return self.optimizer def get_pyfile_path(self, module_name: str) -> str: - path = ( + file_name = ( module_name .replace(".", "/") .replace("//", "../") .replace(" ", "") - ) + ".py" - return path + ) + return f'{file_name}.{"py"}' def import_and_getattr(self, name: str) -> Any: + if ( + len(name.rsplit(".", 1)) == 1 and + name.rsplit(".", 1)[0] == name + ): + # To specify an standard optimizer, specify only the class name of + # the optimizer (e.g., NelderMeadIOtimizer). + # However, when calling, the package name must be added to + # the class name. (e.g. aiaccel.NelderMeadOptimizer) + name = f'{aiaccel.pkg_name}.{name}' + module_name, attr_name = name.rsplit(".", 1) pyfile = self.get_pyfile_path(module_name) diff --git a/docs/manual_jp.md b/docs/manual_jp.md index b453884b4..1be53b027 100644 --- a/docs/manual_jp.md +++ b/docs/manual_jp.md @@ -185,7 +185,7 @@ ABCI: **サンプル** ```yaml optimize: - search_algorithm: "aiaccel.optimizer.nelder_mead.search.NelderMeadSearchOptimizer" + search_algorithm: "NelderMeadOptimizer" goal: "minimize" trial_number: 30 rand_seed: 42 @@ -417,7 +417,7 @@ ABCI: job_execution_options: "" optimize: - search_algorithm: "aiaccel.optimizer.nelder_mead.search.NelderMeadSearchOptimizer" + search_algorithm: "NelderMeadOptimizer" goal: "minimize" trial_number: 30 rand_seed: 42 diff --git a/examples/benchmark/config.yaml b/examples/benchmark/config.yaml index d7e57aef3..b83c3e901 100644 --- a/examples/benchmark/config.yaml +++ b/examples/benchmark/config.yaml @@ -13,11 +13,11 @@ ABCI: job_execution_options: "" optimize: - search_algorithm: "aiaccel.optimizer.nelder_mead.search.NelderMeadSearchOptimizer" - #search_algorithm: "aiaccel.optimizer.random.search.RandomSearchOptimizer" - #search_algorithm: "aiaccel.optimizer.sobol.search.SobolSearchOptimizer" - #search_algorithm: "aiaccel.optimizer.grid.search.GridSearchOptimizer" - #search_algorithm: "aiaccel.optimizer.tpe.search.TpeSearchOptimizer" + search_algorithm: "NelderMeadOptimizer" + #search_algorithm: "RandomOptimizer" + #search_algorithm: "SobolOptimizer" + #search_algorithm: "GridOptimizer" + #search_algorithm: "TpeOptimizer" goal: "minimize" trial_number: 30 rand_seed: 42 diff --git a/examples/resnet50_cifar10/config.yaml b/examples/resnet50_cifar10/config.yaml index 159d5f83c..2c22f1f95 100644 --- a/examples/resnet50_cifar10/config.yaml +++ b/examples/resnet50_cifar10/config.yaml @@ -13,11 +13,11 @@ ABCI: job_execution_options: "" optimize: - search_algorithm: "aiaccel.optimizer.nelder_mead.search.NelderMeadSearchOptimizer" - #search_algorithm: "aiaccel.optimizer.random.search.RandomSearchOptimizer" - #search_algorithm: "aiaccel.optimizer.sobol.search.SobolSearchOptimizer" - #search_algorithm: "aiaccel.optimizer.grid.search.GridSearchOptimizer" - #search_algorithm: "aiaccel.optimizer.tpe.search.TpeSearchOptimizer" + search_algorithm: "NelderMeadOptimizer" + #search_algorithm: "RandomOptimizer" + #search_algorithm: "SobolOptimizer" + #search_algorithm: "GridOptimizer" + #search_algorithm: "TpeOptimizer" goal: "minimize" trial_number: 100 rand_seed: 42 diff --git a/examples/schwefel/config.yaml b/examples/schwefel/config.yaml index aaa645e2c..34350cca1 100644 --- a/examples/schwefel/config.yaml +++ b/examples/schwefel/config.yaml @@ -13,11 +13,11 @@ ABCI: job_execution_options: "" optimize: - search_algorithm: "aiaccel.optimizer.nelder_mead.search.NelderMeadSearchOptimizer" - #search_algorithm: "aiaccel.optimizer.random.search.RandomSearchOptimizer" - #search_algorithm: "aiaccel.optimizer.sobol.search.SobolSearchOptimizer" - #search_algorithm: "aiaccel.optimizer.grid.search.GridSearchOptimizer" - #search_algorithm: "aiaccel.optimizer.tpe.search.TpeSearchOptimizer" + search_algorithm: "NelderMeadOptimizer" + #search_algorithm: "RandomOptimizer" + #search_algorithm: "SobolOptimizer" + #search_algorithm: "GridOptimizer" + #search_algorithm: "TpeOptimizer" goal: "minimize" trial_number: 30 rand_seed: 42 diff --git a/examples/sphere/config.yaml b/examples/sphere/config.yaml index 29c6ea7bc..a83d68565 100644 --- a/examples/sphere/config.yaml +++ b/examples/sphere/config.yaml @@ -13,11 +13,11 @@ ABCI: job_execution_options: "" optimize: - search_algorithm: "aiaccel.optimizer.nelder_mead.search.NelderMeadSearchOptimizer" - #search_algorithm: "aiaccel.optimizer.random.search.RandomSearchOptimizer" - #search_algorithm: "aiaccel.optimizer.sobol.search.SobolSearchOptimizer" - #search_algorithm: "aiaccel.optimizer.grid.search.GridSearchOptimizer" - #search_algorithm: "aiaccel.optimizer.tpe.search.TpeSearchOptimizer" + search_algorithm: "NelderMeadOptimizer" + #search_algorithm: "RandomOptimizer" + #search_algorithm: "SobolOptimizer" + #search_algorithm: "GridOptimizer" + #search_algorithm: "TpeOptimizer" goal: "minimize" trial_number: 30 rand_seed: 42 diff --git a/examples/styblinski-tang/config.yaml b/examples/styblinski-tang/config.yaml index e3cc9d24f..428ce9c7e 100644 --- a/examples/styblinski-tang/config.yaml +++ b/examples/styblinski-tang/config.yaml @@ -13,11 +13,11 @@ ABCI: job_execution_options: "" optimize: - search_algorithm: "aiaccel.optimizer.nelder_mead.search.NelderMeadSearchOptimizer" - #search_algorithm: "aiaccel.optimizer.random.search.RandomSearchOptimizer" - #search_algorithm: "aiaccel.optimizer.sobol.search.SobolSearchOptimizer" - #search_algorithm: "aiaccel.optimizer.grid.search.GridSearchOptimizer" - #search_algorithm: "aiaccel.optimizer.tpe.search.TpeSearchOptimizer" + search_algorithm: "NelderMeadOptimizer" + #search_algorithm: "RandomOptimizer" + #search_algorithm: "SobolOptimizer" + #search_algorithm: "GridOptimizer" + #search_algorithm: "TpeOptimizer" goal: "minimize" trial_number: 30 rand_seed: 42 diff --git a/examples/wrapper_sample/config.yaml b/examples/wrapper_sample/config.yaml index c27feb2d1..6743b0b4a 100644 --- a/examples/wrapper_sample/config.yaml +++ b/examples/wrapper_sample/config.yaml @@ -13,11 +13,11 @@ ABCI: job_execution_options: "" optimize: - search_algorithm: "aiaccel.optimizer.nelder_mead.search.NelderMeadSearchOptimizer" - #search_algorithm: "aiaccel.optimizer.random.search.RandomSearchOptimizer" - #search_algorithm: "aiaccel.optimizer.sobol.search.SobolSearchOptimizer" - #search_algorithm: "aiaccel.optimizer.grid.search.GridSearchOptimizer" - #search_algorithm: "aiaccel.optimizer.tpe.search.TpeSearchOptimizer" + search_algorithm: "NelderMeadOptimizer" + #search_algorithm: "RandomOptimizer" + #search_algorithm: "SobolOptimizer" + #search_algorithm: "GridOptimizer" + #search_algorithm: "TpeOptimizer" goal: "minimize" trial_number: 30 rand_seed: 42 diff --git a/tests/blackbox_test/benchmark2/testcode.py b/tests/blackbox_test/benchmark2/testcode.py index ac59ac7fe..645117c8c 100644 --- a/tests/blackbox_test/benchmark2/testcode.py +++ b/tests/blackbox_test/benchmark2/testcode.py @@ -57,7 +57,7 @@ "job_execution_options": "" }, "optimize": { - "search_algorithm": "aiaccel.optimizer.nelder_mead.search.NelderMeadSearchOptimizer", + "search_algorithm": "aiaccel.optimizer.nelder_mead.search.NelderMeadOptimizer", "goal": "minimize", "trial_number": 5, "rand_seed": 42, diff --git a/tests/test_data/config.json b/tests/test_data/config.json index dd746a171..94394b919 100644 --- a/tests/test_data/config.json +++ b/tests/test_data/config.json @@ -23,7 +23,7 @@ "group": "gaa" }, "optimize": { - "search_algorithm": "aiaccel.optimizer.nelder_mead.search.NelderMeadSearchOptimizer", + "search_algorithm": "aiaccel.optimizer.nelder_mead.search.NelderMeadOptimizer", "goal": "minimize", "trial_number": 10, "parameters": [ diff --git a/tests/test_data/config_abci.json b/tests/test_data/config_abci.json index 27dcd32d5..18bdb94e9 100644 --- a/tests/test_data/config_abci.json +++ b/tests/test_data/config_abci.json @@ -19,7 +19,7 @@ "group": "gaa" }, "optimize": { - "search_algorithm": "aiaccel.optimizer.nelder_mead.search.NelderMeadSearchOptimizer", + "search_algorithm": "aiaccel.optimizer.nelder_mead.search.NelderMeadOptimizer", "goal": "minimize", "trial_number": 10, "parameters": [ diff --git a/tests/test_data/config_grid.json b/tests/test_data/config_grid.json index 8f81d2903..c2f79ced5 100644 --- a/tests/test_data/config_grid.json +++ b/tests/test_data/config_grid.json @@ -14,7 +14,7 @@ "job_execution_options": "" }, "optimize": { - "search_algorithm": "aiaccel.optimizer.grid.search.GridSearchOptimizer", + "search_algorithm": "aiaccel.optimizer.grid.search.GridOptimizer", "goal": "minimize", "trial_number": 10, "rand_seed": 42, diff --git a/tests/test_data/config_grid_resumption.json b/tests/test_data/config_grid_resumption.json index 7e5e11375..d508e0241 100644 --- a/tests/test_data/config_grid_resumption.json +++ b/tests/test_data/config_grid_resumption.json @@ -14,7 +14,7 @@ "job_execution_options": "" }, "optimize": { - "search_algorithm": "aiaccel.optimizer.grid.search.GridSearchOptimizer", + "search_algorithm": "aiaccel.optimizer.grid.search.GridOptimizer", "goal": "minimize", "trial_number": 5, "rand_seed": 42, diff --git a/tests/test_data/config_nelder-mead.json b/tests/test_data/config_nelder-mead.json index 24790de0d..f47bd1271 100644 --- a/tests/test_data/config_nelder-mead.json +++ b/tests/test_data/config_nelder-mead.json @@ -16,7 +16,7 @@ "job_execution_options": "" }, "optimize": { - "search_algorithm": "aiaccel.optimizer.nelder_mead.search.NelderMeadSearchOptimizer", + "search_algorithm": "aiaccel.optimizer.nelder_mead.search.NelderMeadOptimizer", "goal": "minimize", "trial_number": 10, "rand_seed": 42, diff --git a/tests/test_data/config_nelder-mead_resumption.json b/tests/test_data/config_nelder-mead_resumption.json index 186c1caea..754a677c2 100644 --- a/tests/test_data/config_nelder-mead_resumption.json +++ b/tests/test_data/config_nelder-mead_resumption.json @@ -16,7 +16,7 @@ "job_execution_options": "" }, "optimize": { - "search_algorithm": "aiaccel.optimizer.nelder_mead.search.NelderMeadSearchOptimizer", + "search_algorithm": "aiaccel.optimizer.nelder_mead.search.NelderMeadOptimizer", "goal": "minimize", "trial_number": 5, "rand_seed": 42, diff --git a/tests/test_data/config_random.json b/tests/test_data/config_random.json index 13842f646..f3a5894b8 100644 --- a/tests/test_data/config_random.json +++ b/tests/test_data/config_random.json @@ -13,7 +13,7 @@ "job_execution_options": "" }, "optimize": { - "search_algorithm": "aiaccel.optimizer.random.search.RandomSearchOptimizer", + "search_algorithm": "aiaccel.optimizer.random.search.RandomOptimizer", "goal": "minimize", "trial_number": 10, "rand_seed": 42, diff --git a/tests/test_data/config_random_resumption.json b/tests/test_data/config_random_resumption.json index ef9109abb..96094da97 100644 --- a/tests/test_data/config_random_resumption.json +++ b/tests/test_data/config_random_resumption.json @@ -13,7 +13,7 @@ "job_execution_options": "" }, "optimize": { - "search_algorithm": "aiaccel.optimizer.random.search.RandomSearchOptimizer", + "search_algorithm": "aiaccel.optimizer.random.search.RandomOptimizer", "goal": "minimize", "trial_number": 5, "rand_seed": 42, diff --git a/tests/test_data/config_sobol.json b/tests/test_data/config_sobol.json index 8398512a8..9e8ed7719 100644 --- a/tests/test_data/config_sobol.json +++ b/tests/test_data/config_sobol.json @@ -13,7 +13,7 @@ "job_execution_options": "" }, "optimize": { - "search_algorithm": "aiaccel.optimizer.sobol.search.SobolSearchOptimizer", + "search_algorithm": "aiaccel.optimizer.sobol.search.SobolOptimizer", "goal": "minimize", "trial_number": 10, "rand_seed": 42, diff --git a/tests/test_data/config_sobol_resumption.json b/tests/test_data/config_sobol_resumption.json index f4f5977f6..a0c3dbde6 100644 --- a/tests/test_data/config_sobol_resumption.json +++ b/tests/test_data/config_sobol_resumption.json @@ -13,7 +13,7 @@ "job_execution_options": "" }, "optimize": { - "search_algorithm": "aiaccel.optimizer.sobol.search.SobolSearchOptimizer", + "search_algorithm": "aiaccel.optimizer.sobol.search.SobolOptimizer", "goal": "minimize", "trial_number": 5, "rand_seed": 42, diff --git a/tests/test_data/config_tpe.json b/tests/test_data/config_tpe.json index 29607dbb4..427127bff 100644 --- a/tests/test_data/config_tpe.json +++ b/tests/test_data/config_tpe.json @@ -13,7 +13,7 @@ "job_execution_options": "" }, "optimize": { - "search_algorithm": "aiaccel.optimizer.tpe.search.TpeSearchOptimizer", + "search_algorithm": "aiaccel.optimizer.tpe.search.TpeOptimizer", "goal": "minimize", "trial_number": 10, "rand_seed": 42, diff --git a/tests/test_data/config_tpe_resumption.json b/tests/test_data/config_tpe_resumption.json index 01c499069..8902cb59d 100644 --- a/tests/test_data/config_tpe_resumption.json +++ b/tests/test_data/config_tpe_resumption.json @@ -13,7 +13,7 @@ "job_execution_options": "" }, "optimize": { - "search_algorithm": "aiaccel.optimizer.tpe.search.TpeSearchOptimizer", + "search_algorithm": "aiaccel.optimizer.tpe.search.TpeOptimizer", "goal": "minimize", "trial_number": 5, "rand_seed": 42, diff --git a/tests/test_data/grid_config.json b/tests/test_data/grid_config.json index e5537933a..b79b48abf 100644 --- a/tests/test_data/grid_config.json +++ b/tests/test_data/grid_config.json @@ -13,7 +13,7 @@ "group": "gaa" }, "optimize": { - "search_algorithm": "aiaccel.optimizer.grid.search.GridSearchOptimizer", + "search_algorithm": "aiaccel.optimizer.grid.search.GridOptimizer", "goal": "minimize", "trial_number": 10, "rand_seed": 42, diff --git a/tests/unit/abci_test/additionaloptions.json b/tests/unit/abci_test/additionaloptions.json index 256330666..bd81c3349 100644 --- a/tests/unit/abci_test/additionaloptions.json +++ b/tests/unit/abci_test/additionaloptions.json @@ -33,7 +33,7 @@ "$2search_algorithm": "Grid", "$3search_algorithm": "Sobol", "$$$search_algorithm": "NelderMead", - "search_algorithm": "aiaccel.optimizer.tpe.search.TpeSearchOptimizer", + "search_algorithm": "aiaccel.optimizer.tpe.search.TpeOptimizer", "parameter_pool_size": 4, "sleep_time_optimizer": 1 }, diff --git a/tests/unit/abci_test/additionaloptions2.json b/tests/unit/abci_test/additionaloptions2.json index 76c10346b..3af5b0141 100644 --- a/tests/unit/abci_test/additionaloptions2.json +++ b/tests/unit/abci_test/additionaloptions2.json @@ -33,7 +33,7 @@ "$2search_algorithm": "Grid", "$3search_algorithm": "Sobol", "$$$search_algorithm": "Nelder-Mead", - "search_algorithm": "aiaccel.optimizer.tpe.search.TpeSearchOptimizer", + "search_algorithm": "aiaccel.optimizer.tpe.search.TpeOptimizer", "parameter_pool_size": 4, "sleep_time_optimizer": 1 }, diff --git a/tests/unit/abci_test/cfg.json b/tests/unit/abci_test/cfg.json index 274d513f5..8d0f3ee2a 100644 --- a/tests/unit/abci_test/cfg.json +++ b/tests/unit/abci_test/cfg.json @@ -33,7 +33,7 @@ "$2search_algorithm": "Grid", "$3search_algorithm": "Sobol", "$$$search_algorithm": "Nelder-Mead", - "search_algorithm": "aiaccel.optimizer.tpe.search.TpeSearchOptimizer", + "search_algorithm": "aiaccel.optimizer.tpe.search.TpeOptimizer", "parameter_pool_size": 4, "sleep_time_optimizer": 1 }, diff --git a/tests/unit/abci_test/cfg2.json b/tests/unit/abci_test/cfg2.json index 01ed09f67..75df95401 100644 --- a/tests/unit/abci_test/cfg2.json +++ b/tests/unit/abci_test/cfg2.json @@ -33,7 +33,7 @@ "$2search_algorithm": "Grid", "$3search_algorithm": "Sobol", "$$$search_algorithm": "Nelder-Mead", - "search_algorithm": "aiaccel.optimizer.tpe.search.TpeSearchOptimizer", + "search_algorithm": "aiaccel.optimizer.tpe.search.TpeOptimizer", "parameter_pool_size": 4, "sleep_time_optimizer": 1 }, diff --git a/tests/unit/abci_test/cfg3.json b/tests/unit/abci_test/cfg3.json index ce1a466ff..8303aa533 100644 --- a/tests/unit/abci_test/cfg3.json +++ b/tests/unit/abci_test/cfg3.json @@ -33,7 +33,7 @@ "$2search_algorithm": "Grid", "$3search_algorithm": "Sobol", "$$$search_algorithm": "Nelder-Mead", - "search_algorithm": "aiaccel.optimizer.tpe.search.TpeSearchOptimizer", + "search_algorithm": "aiaccel.optimizer.tpe.search.TpeOptimizer", "parameter_pool_size": 4, "sleep_time_optimizer": 1 }, diff --git a/tests/unit/optimizer_test/test_grid_search.py b/tests/unit/optimizer_test/test_grid_search.py index bfec798cf..00d8ad716 100644 --- a/tests/unit/optimizer_test/test_grid_search.py +++ b/tests/unit/optimizer_test/test_grid_search.py @@ -1,4 +1,4 @@ -from aiaccel.optimizer.grid.search import GridSearchOptimizer, generate_grid_points +from aiaccel.optimizer.grid.search import GridOptimizer, generate_grid_points from aiaccel.parameter import HyperParameter, load_parameter from tests.base_test import BaseTest import functools @@ -66,7 +66,7 @@ def __init__(self, name, type_name): assert True -class TestGridSearchOptimizer(BaseTest): +class TestGridOptimizer(BaseTest): def test_pre_process(self, clean_work_dir): options = { @@ -78,7 +78,7 @@ def test_pre_process(self, clean_work_dir): 'graph': False, 'process_name': 'optimizer' } - optimizer = GridSearchOptimizer(options) + optimizer = GridOptimizer(options) optimizer.pre_process() def test_get_parameter_index(self, clean_work_dir): @@ -91,7 +91,7 @@ def test_get_parameter_index(self, clean_work_dir): 'graph': False, 'process_name': 'optimizer' } - optimizer = GridSearchOptimizer(options) + optimizer = GridOptimizer(options) optimizer.pre_process() assert optimizer.get_parameter_index() == [0 for _ in range(0, 10)] @@ -112,7 +112,7 @@ def test_generate_parameter(self, clean_work_dir): 'graph': False, 'process_name': 'optimizer' } - optimizer = GridSearchOptimizer(options) + optimizer = GridOptimizer(options) optimizer.pre_process() max_index = functools.reduce( lambda x, y: x*y, diff --git a/tests/unit/optimizer_test/test_nelder_mead.py b/tests/unit/optimizer_test/test_nelder_mead.py index 1e7885450..5e864d678 100644 --- a/tests/unit/optimizer_test/test_nelder_mead.py +++ b/tests/unit/optimizer_test/test_nelder_mead.py @@ -307,7 +307,7 @@ def test_nelder_mead_parameters(load_test_config): 'executing:', nelder_mead._executing_index, 'evaluated_itr:', nelder_mead._evaluated_itr) - # a functionality of NelderMeadSearchOptimizer::check_result() + # a functionality of NelderMeadOptimizer::check_result() # ready_params = nelder_mead.get_ready_parameters() ready_params = nelder_mead._executing @@ -318,7 +318,7 @@ def test_nelder_mead_parameters(load_test_config): if debug: print('\tsum:', rp['result']) - # a functionality of NelderMeadSearchOptimizer::generate_parameter() + # a functionality of NelderMeadOptimizer::generate_parameter() searched_params = nelder_mead.search() if searched_params is None: diff --git a/tests/unit/optimizer_test/test_nelder_mead_search.py b/tests/unit/optimizer_test/test_nelder_mead_search.py index f9ac4697e..f48d349e1 100644 --- a/tests/unit/optimizer_test/test_nelder_mead_search.py +++ b/tests/unit/optimizer_test/test_nelder_mead_search.py @@ -1,6 +1,6 @@ from aiaccel.config import ConfileWrapper from aiaccel.optimizer.nelder_mead.sampler import NelderMead -from aiaccel.optimizer.nelder_mead.search import NelderMeadSearchOptimizer +from aiaccel.optimizer.nelder_mead.search import NelderMeadOptimizer from aiaccel.parameter import load_parameter from aiaccel.util.filesystem import move_file from tests.base_test import BaseTest @@ -9,7 +9,7 @@ import pytest -class TestNelderMeadSearchOptimizer(BaseTest): +class TestNelderMeadOptimizer(BaseTest): @pytest.fixture(autouse=True) def setup_optimizer(self, clean_work_dir): @@ -22,7 +22,7 @@ def setup_optimizer(self, clean_work_dir): 'graph': False, 'process_name': 'optimizer' } - self.optimizer = NelderMeadSearchOptimizer(options) + self.optimizer = NelderMeadOptimizer(options) yield self.optimizer = None diff --git a/tests/unit/optimizer_test/test_random_search.py b/tests/unit/optimizer_test/test_random_search.py index a0fe6a133..4a99a611e 100644 --- a/tests/unit/optimizer_test/test_random_search.py +++ b/tests/unit/optimizer_test/test_random_search.py @@ -1,8 +1,8 @@ -from aiaccel.optimizer.random.search import RandomSearchOptimizer +from aiaccel.optimizer.random.search import RandomOptimizer from tests.base_test import BaseTest -class TestRandomSearchOptimizer(BaseTest): +class TestRandomOptimizer(BaseTest): def test_generate_parameter(self): options = { @@ -14,6 +14,6 @@ def test_generate_parameter(self): 'graph': False, 'process_name': 'optimizer' } - optimizer = RandomSearchOptimizer(options) + optimizer = RandomOptimizer(options) optimizer.pre_process() assert optimizer.generate_parameter() is None diff --git a/tests/unit/optimizer_test/test_sobol_search.py b/tests/unit/optimizer_test/test_sobol_search.py index 15d973367..cc0d3a27a 100644 --- a/tests/unit/optimizer_test/test_sobol_search.py +++ b/tests/unit/optimizer_test/test_sobol_search.py @@ -1,9 +1,9 @@ -from aiaccel.optimizer.sobol.search import SobolSearchOptimizer +from aiaccel.optimizer.sobol.search import SobolOptimizer from tests.base_test import BaseTest import pytest -class TestSobolSearchOptimizer(BaseTest): +class TestSobolOptimizer(BaseTest): @pytest.fixture(autouse=True) def setup_optimizer(self, clean_work_dir): @@ -16,7 +16,7 @@ def setup_optimizer(self, clean_work_dir): 'graph': False, 'process_name': 'optimizer' } - self.optimizer = SobolSearchOptimizer(options) + self.optimizer = SobolOptimizer(options) yield self.optimizer = None diff --git a/tests/unit/optimizer_test/test_tpe_search.py b/tests/unit/optimizer_test/test_tpe_search.py index 3038c0cc5..869d24f64 100644 --- a/tests/unit/optimizer_test/test_tpe_search.py +++ b/tests/unit/optimizer_test/test_tpe_search.py @@ -1,12 +1,12 @@ import pytest from aiaccel.config import Config from aiaccel.parameter import load_parameter -from aiaccel.optimizer.tpe.search import TpeSearchOptimizer +from aiaccel.optimizer.tpe.search import TpeOptimizer from aiaccel.optimizer.tpe.search import create_distributions from tests.base_test import BaseTest -class TestTpeSearchOptimizer(BaseTest): +class TestTpeOptimizer(BaseTest): @pytest.fixture(autouse=True) def setup_optimizer(self, clean_work_dir, data_dir): @@ -19,7 +19,7 @@ def setup_optimizer(self, clean_work_dir, data_dir): 'graph': False, 'process_name': 'optimizer' } - self.optimizer = TpeSearchOptimizer(options) + self.optimizer = TpeOptimizer(options) yield self.optimizer = None diff --git a/tests/unit/test_config.py b/tests/unit/test_config.py index e0465881a..96927fd39 100644 --- a/tests/unit/test_config.py +++ b/tests/unit/test_config.py @@ -106,7 +106,7 @@ def test_config(config_json): assert config.resource_type.get() == "local" assert config.num_node.get() == 4 assert config.abci_group.get() == "gaa" - assert config.search_algorithm.get() == "aiaccel.optimizer.nelder_mead.search.NelderMeadSearchOptimizer" + assert config.search_algorithm.get() == "aiaccel.optimizer.nelder_mead.search.NelderMeadOptimizer" assert config.goal.get() == "minimize" assert config.trial_number.get() == 10 assert config.name_length.get() == 6 diff --git a/tests/unit/test_module.py b/tests/unit/test_module.py index 12c3e43c6..112d46320 100644 --- a/tests/unit/test_module.py +++ b/tests/unit/test_module.py @@ -1,6 +1,6 @@ from aiaccel.master.local_master import LocalMaster from aiaccel.module import AbstractModule -from aiaccel.optimizer.random.search import RandomSearchOptimizer +from aiaccel.optimizer.random.search import RandomOptimizer from aiaccel.scheduler.local_scheduler import LocalScheduler from aiaccel.util.filesystem import file_create from aiaccel.util.logger import str_to_logging_level @@ -127,7 +127,7 @@ def test_get_module_type_alive_file(self, work_dir): 'graph': False, 'process_name': 'optimizer' } - optimizer = RandomSearchOptimizer(options) + optimizer = RandomOptimizer(options) module_type, alive_file = optimizer.get_module_type_alive_file() assert module_type == aiaccel.module_type_optimizer assert Path(alive_file).resolve() == work_dir.joinpath( From 55fcab89415cc91125fb89f717bbd2716157085a Mon Sep 17 00:00:00 2001 From: aramoto99 Date: Mon, 22 Aug 2022 17:21:00 +0900 Subject: [PATCH 12/12] changed the specification method for importing the standard optimizer. --- aiaccel/__init__.py | 15 +----- aiaccel/common.py | 12 ++--- aiaccel/optimizer/__init__.py | 13 +++++ aiaccel/start.py | 37 ++++--------- docs/manual_jp.md | 4 +- examples/benchmark/config.yaml | 10 ++-- examples/resnet50_cifar10/config.yaml | 10 ++-- examples/schwefel/config.yaml | 10 ++-- examples/sphere/config.yaml | 10 ++-- examples/styblinski-tang/config.yaml | 10 ++-- examples/wrapper_sample/config.yaml | 10 ++-- tests/blackbox_test/benchmark2/testcode.py | 2 +- tests/test_data/config.json | 2 +- tests/test_data/config_abci.json | 2 +- tests/test_data/config_grid.json | 2 +- tests/test_data/config_grid_resumption.json | 2 +- tests/test_data/config_nelder-mead.json | 2 +- .../config_nelder-mead_resumption.json | 2 +- tests/test_data/config_random.json | 2 +- tests/test_data/config_random_resumption.json | 2 +- tests/test_data/config_sobol.json | 2 +- tests/test_data/config_sobol_resumption.json | 2 +- tests/test_data/config_tpe.json | 2 +- tests/test_data/config_tpe_resumption.json | 2 +- tests/test_data/grid_config.json | 2 +- tests/unit/abci_test/additionaloptions.json | 2 +- tests/unit/abci_test/additionaloptions2.json | 2 +- tests/unit/abci_test/cfg.json | 2 +- tests/unit/abci_test/cfg2.json | 2 +- tests/unit/abci_test/cfg3.json | 2 +- tests/unit/optimizer_test/sample/search.py | 54 ------------------- tests/unit/test_config.py | 2 +- 32 files changed, 81 insertions(+), 154 deletions(-) create mode 100644 aiaccel/optimizer/__init__.py delete mode 100644 tests/unit/optimizer_test/sample/search.py diff --git a/aiaccel/__init__.py b/aiaccel/__init__.py index 270822c88..46a3f5a82 100644 --- a/aiaccel/__init__.py +++ b/aiaccel/__init__.py @@ -40,7 +40,6 @@ from .common import module_type_master from .common import module_type_optimizer from .common import module_type_scheduler -from .common import pkg_name from .common import resource_type_abci from .common import resource_type_local from .common import search_algorithm_grid @@ -50,11 +49,7 @@ from .common import search_algorithm_tpe from .common import get_module_type_from_class_name from .common import get_file_random -from .optimizer.grid.search import GridOptimizer -from .optimizer.random.search import RandomOptimizer -from .optimizer.sobol.search import SobolOptimizer -from .optimizer.nelder_mead.search import NelderMeadOptimizer -from .optimizer.tpe.search import TpeOptimizer + __all__ = [ alive_master, @@ -101,17 +96,11 @@ module_type_scheduler, resource_type_abci, resource_type_local, - pkg_name, search_algorithm_grid, search_algorithm_nelder_mead, search_algorithm_random, search_algorithm_sobol, search_algorithm_tpe, get_module_type_from_class_name, - get_file_random, - GridOptimizer, - RandomOptimizer, - SobolOptimizer, - NelderMeadOptimizer, - TpeOptimizer + get_file_random ] diff --git a/aiaccel/common.py b/aiaccel/common.py index be21da8e7..869478cee 100644 --- a/aiaccel/common.py +++ b/aiaccel/common.py @@ -56,16 +56,14 @@ module_type_optimizer = 'optimizer' module_type_scheduler = 'scheduler' -pkg_name = "aiaccel" - resource_type_local = 'local' resource_type_abci = 'abci' -search_algorithm_grid = 'aiaccel.optimizer.grid.search.GridOptimizer' -search_algorithm_nelder_mead = 'aiaccel.optimizer.nelder_mead.search.NelderMeadOptimizer' -search_algorithm_random = 'aiaccel.optimizer.random.search.RandomOptimizer' -search_algorithm_sobol = 'aiaccel.optimizer.sobol.search.SobolOptimizer' -search_algorithm_tpe = 'aiaccel.optimizer.tpe.search.TpeOptimizer' +search_algorithm_grid = 'aiaccel.optimizer.GridOptimizer' +search_algorithm_nelder_mead = 'aiaccel.optimizer.NelderMeadOptimizer' +search_algorithm_random = 'aiaccel.optimizer.RandomOptimizer' +search_algorithm_sobol = 'aiaccel.optimizer.SobolOptimizer' +search_algorithm_tpe = 'aiaccel.optimizer.TpeOptimizer' def get_module_type_from_class_name(class_name: str) -> str: diff --git a/aiaccel/optimizer/__init__.py b/aiaccel/optimizer/__init__.py new file mode 100644 index 000000000..98020ee36 --- /dev/null +++ b/aiaccel/optimizer/__init__.py @@ -0,0 +1,13 @@ +from .grid.search import GridOptimizer +from .random.search import RandomOptimizer +from .sobol.search import SobolOptimizer +from .nelder_mead.search import NelderMeadOptimizer +from .tpe.search import TpeOptimizer + +__all__ = [ + GridOptimizer, + RandomOptimizer, + SobolOptimizer, + NelderMeadOptimizer, + TpeOptimizer +] diff --git a/aiaccel/start.py b/aiaccel/start.py index ca3407ff1..979f67cf5 100644 --- a/aiaccel/start.py +++ b/aiaccel/start.py @@ -20,9 +20,7 @@ from aiaccel.util.buffer import Buffer from aiaccel.config import Config from aiaccel.util.terminal import Terminal -from pathlib import Path from importlib import import_module -from importlib.machinery import SourceFileLoader class Arguments: @@ -509,35 +507,18 @@ def __init__(self, config_path: str) -> None: def __call__(self) -> Any: return self.optimizer - def get_pyfile_path(self, module_name: str) -> str: - file_name = ( - module_name - .replace(".", "/") - .replace("//", "../") - .replace(" ", "") - ) - return f'{file_name}.{"py"}' - def import_and_getattr(self, name: str) -> Any: - if ( - len(name.rsplit(".", 1)) == 1 and - name.rsplit(".", 1)[0] == name - ): - # To specify an standard optimizer, specify only the class name of - # the optimizer (e.g., NelderMeadIOtimizer). - # However, when calling, the package name must be added to - # the class name. (e.g. aiaccel.NelderMeadOptimizer) - name = f'{aiaccel.pkg_name}.{name}' + """ Imports the specified Optimizer class. - module_name, attr_name = name.rsplit(".", 1) - pyfile = self.get_pyfile_path(module_name) + Args: + name(str): Optimizer class name + (e.g.) aiaccel.optimizer.NelderMeadOptimizer - if Path(pyfile).exists(): - # Import external modules not included in the aiaccel package. - module = SourceFileLoader('MyOptimizer', pyfile).load_module() - else: - # It is assumed to be imported from aiaccel.optimizer.*. - module = import_module(module_name) + Returns: + Any: + """ + module_name, attr_name = name.rsplit(".", 1) + module = import_module(module_name) return getattr(module, attr_name) diff --git a/docs/manual_jp.md b/docs/manual_jp.md index 1be53b027..2511a22fd 100644 --- a/docs/manual_jp.md +++ b/docs/manual_jp.md @@ -185,7 +185,7 @@ ABCI: **サンプル** ```yaml optimize: - search_algorithm: "NelderMeadOptimizer" + search_algorithm: "aiaccel.optimizer.NelderMeadOptimizer" goal: "minimize" trial_number: 30 rand_seed: 42 @@ -417,7 +417,7 @@ ABCI: job_execution_options: "" optimize: - search_algorithm: "NelderMeadOptimizer" + search_algorithm: "aiaccel.optimizer.NelderMeadOptimizer" goal: "minimize" trial_number: 30 rand_seed: 42 diff --git a/examples/benchmark/config.yaml b/examples/benchmark/config.yaml index b83c3e901..93744372a 100644 --- a/examples/benchmark/config.yaml +++ b/examples/benchmark/config.yaml @@ -13,11 +13,11 @@ ABCI: job_execution_options: "" optimize: - search_algorithm: "NelderMeadOptimizer" - #search_algorithm: "RandomOptimizer" - #search_algorithm: "SobolOptimizer" - #search_algorithm: "GridOptimizer" - #search_algorithm: "TpeOptimizer" + search_algorithm: "aiaccel.optimizer.NelderMeadOptimizer" + #search_algorithm: "aiaccel.optimizer.RandomOptimizer" + #search_algorithm: "aiaccel.optimizer.SobolOptimizer" + #search_algorithm: "aiaccel.optimizer.GridOptimizer" + #search_algorithm: "aiaccel.optimizer.TpeOptimizer" goal: "minimize" trial_number: 30 rand_seed: 42 diff --git a/examples/resnet50_cifar10/config.yaml b/examples/resnet50_cifar10/config.yaml index 2c22f1f95..98c223008 100644 --- a/examples/resnet50_cifar10/config.yaml +++ b/examples/resnet50_cifar10/config.yaml @@ -13,11 +13,11 @@ ABCI: job_execution_options: "" optimize: - search_algorithm: "NelderMeadOptimizer" - #search_algorithm: "RandomOptimizer" - #search_algorithm: "SobolOptimizer" - #search_algorithm: "GridOptimizer" - #search_algorithm: "TpeOptimizer" + search_algorithm: "aiaccel.optimizer.NelderMeadOptimizer" + #search_algorithm: "aiaccel.optimizer.RandomOptimizer" + #search_algorithm: "aiaccel.optimizer.SobolOptimizer" + #search_algorithm: "aiaccel.optimizer.GridOptimizer" + #search_algorithm: "aiaccel.optimizer.TpeOptimizer" goal: "minimize" trial_number: 100 rand_seed: 42 diff --git a/examples/schwefel/config.yaml b/examples/schwefel/config.yaml index 34350cca1..da69806f7 100644 --- a/examples/schwefel/config.yaml +++ b/examples/schwefel/config.yaml @@ -13,11 +13,11 @@ ABCI: job_execution_options: "" optimize: - search_algorithm: "NelderMeadOptimizer" - #search_algorithm: "RandomOptimizer" - #search_algorithm: "SobolOptimizer" - #search_algorithm: "GridOptimizer" - #search_algorithm: "TpeOptimizer" + search_algorithm: "aiaccel.optimizer.NelderMeadOptimizer" + #search_algorithm: "aiaccel.optimizer.RandomOptimizer" + #search_algorithm: "aiaccel.optimizer.SobolOptimizer" + #search_algorithm: "aiaccel.optimizer.GridOptimizer" + #search_algorithm: "aiaccel.optimizer.TpeOptimizer" goal: "minimize" trial_number: 30 rand_seed: 42 diff --git a/examples/sphere/config.yaml b/examples/sphere/config.yaml index a83d68565..90af1582d 100644 --- a/examples/sphere/config.yaml +++ b/examples/sphere/config.yaml @@ -13,11 +13,11 @@ ABCI: job_execution_options: "" optimize: - search_algorithm: "NelderMeadOptimizer" - #search_algorithm: "RandomOptimizer" - #search_algorithm: "SobolOptimizer" - #search_algorithm: "GridOptimizer" - #search_algorithm: "TpeOptimizer" + search_algorithm: "aiaccel.optimizer.NelderMeadOptimizer" + #search_algorithm: "aiaccel.optimizer.RandomOptimizer" + #search_algorithm: "aiaccel.optimizer.SobolOptimizer" + #search_algorithm: "aiaccel.optimizer.GridOptimizer" + #search_algorithm: "aiaccel.optimizer.TpeOptimizer" goal: "minimize" trial_number: 30 rand_seed: 42 diff --git a/examples/styblinski-tang/config.yaml b/examples/styblinski-tang/config.yaml index 428ce9c7e..4da2f0574 100644 --- a/examples/styblinski-tang/config.yaml +++ b/examples/styblinski-tang/config.yaml @@ -13,11 +13,11 @@ ABCI: job_execution_options: "" optimize: - search_algorithm: "NelderMeadOptimizer" - #search_algorithm: "RandomOptimizer" - #search_algorithm: "SobolOptimizer" - #search_algorithm: "GridOptimizer" - #search_algorithm: "TpeOptimizer" + search_algorithm: "aiaccel.optimizer.NelderMeadOptimizer" + #search_algorithm: "aiaccel.optimizer.RandomOptimizer" + #search_algorithm: "aiaccel.optimizer.SobolOptimizer" + #search_algorithm: "aiaccel.optimizer.GridOptimizer" + #search_algorithm: "aiaccel.optimizer.TpeOptimizer" goal: "minimize" trial_number: 30 rand_seed: 42 diff --git a/examples/wrapper_sample/config.yaml b/examples/wrapper_sample/config.yaml index 6743b0b4a..c8b67aecb 100644 --- a/examples/wrapper_sample/config.yaml +++ b/examples/wrapper_sample/config.yaml @@ -13,11 +13,11 @@ ABCI: job_execution_options: "" optimize: - search_algorithm: "NelderMeadOptimizer" - #search_algorithm: "RandomOptimizer" - #search_algorithm: "SobolOptimizer" - #search_algorithm: "GridOptimizer" - #search_algorithm: "TpeOptimizer" + search_algorithm: "aiaccel.optimizer.NelderMeadOptimizer" + #search_algorithm: "aiaccel.optimizer.RandomOptimizer" + #search_algorithm: "aiaccel.optimizer.SobolOptimizer" + #search_algorithm: "aiaccel.optimizer.GridOptimizer" + #search_algorithm: "aiaccel.optimizer.TpeOptimizer" goal: "minimize" trial_number: 30 rand_seed: 42 diff --git a/tests/blackbox_test/benchmark2/testcode.py b/tests/blackbox_test/benchmark2/testcode.py index 645117c8c..252793d06 100644 --- a/tests/blackbox_test/benchmark2/testcode.py +++ b/tests/blackbox_test/benchmark2/testcode.py @@ -57,7 +57,7 @@ "job_execution_options": "" }, "optimize": { - "search_algorithm": "aiaccel.optimizer.nelder_mead.search.NelderMeadOptimizer", + "search_algorithm": "aiaccel.optimizer.NelderMeadOptimizer", "goal": "minimize", "trial_number": 5, "rand_seed": 42, diff --git a/tests/test_data/config.json b/tests/test_data/config.json index 94394b919..d0cd9962c 100644 --- a/tests/test_data/config.json +++ b/tests/test_data/config.json @@ -23,7 +23,7 @@ "group": "gaa" }, "optimize": { - "search_algorithm": "aiaccel.optimizer.nelder_mead.search.NelderMeadOptimizer", + "search_algorithm": "aiaccel.optimizer.NelderMeadOptimizer", "goal": "minimize", "trial_number": 10, "parameters": [ diff --git a/tests/test_data/config_abci.json b/tests/test_data/config_abci.json index 18bdb94e9..d825f4756 100644 --- a/tests/test_data/config_abci.json +++ b/tests/test_data/config_abci.json @@ -19,7 +19,7 @@ "group": "gaa" }, "optimize": { - "search_algorithm": "aiaccel.optimizer.nelder_mead.search.NelderMeadOptimizer", + "search_algorithm": "aiaccel.optimizer.NelderMeadOptimizer", "goal": "minimize", "trial_number": 10, "parameters": [ diff --git a/tests/test_data/config_grid.json b/tests/test_data/config_grid.json index c2f79ced5..4bd2ef21c 100644 --- a/tests/test_data/config_grid.json +++ b/tests/test_data/config_grid.json @@ -14,7 +14,7 @@ "job_execution_options": "" }, "optimize": { - "search_algorithm": "aiaccel.optimizer.grid.search.GridOptimizer", + "search_algorithm": "aiaccel.optimizer.GridOptimizer", "goal": "minimize", "trial_number": 10, "rand_seed": 42, diff --git a/tests/test_data/config_grid_resumption.json b/tests/test_data/config_grid_resumption.json index d508e0241..68061ca02 100644 --- a/tests/test_data/config_grid_resumption.json +++ b/tests/test_data/config_grid_resumption.json @@ -14,7 +14,7 @@ "job_execution_options": "" }, "optimize": { - "search_algorithm": "aiaccel.optimizer.grid.search.GridOptimizer", + "search_algorithm": "aiaccel.optimizer.GridOptimizer", "goal": "minimize", "trial_number": 5, "rand_seed": 42, diff --git a/tests/test_data/config_nelder-mead.json b/tests/test_data/config_nelder-mead.json index f47bd1271..a7b2971b8 100644 --- a/tests/test_data/config_nelder-mead.json +++ b/tests/test_data/config_nelder-mead.json @@ -16,7 +16,7 @@ "job_execution_options": "" }, "optimize": { - "search_algorithm": "aiaccel.optimizer.nelder_mead.search.NelderMeadOptimizer", + "search_algorithm": "aiaccel.optimizer.NelderMeadOptimizer", "goal": "minimize", "trial_number": 10, "rand_seed": 42, diff --git a/tests/test_data/config_nelder-mead_resumption.json b/tests/test_data/config_nelder-mead_resumption.json index 754a677c2..be954f77e 100644 --- a/tests/test_data/config_nelder-mead_resumption.json +++ b/tests/test_data/config_nelder-mead_resumption.json @@ -16,7 +16,7 @@ "job_execution_options": "" }, "optimize": { - "search_algorithm": "aiaccel.optimizer.nelder_mead.search.NelderMeadOptimizer", + "search_algorithm": "aiaccel.optimizer.NelderMeadOptimizer", "goal": "minimize", "trial_number": 5, "rand_seed": 42, diff --git a/tests/test_data/config_random.json b/tests/test_data/config_random.json index f3a5894b8..75309d176 100644 --- a/tests/test_data/config_random.json +++ b/tests/test_data/config_random.json @@ -13,7 +13,7 @@ "job_execution_options": "" }, "optimize": { - "search_algorithm": "aiaccel.optimizer.random.search.RandomOptimizer", + "search_algorithm": "aiaccel.optimizer.RandomOptimizer", "goal": "minimize", "trial_number": 10, "rand_seed": 42, diff --git a/tests/test_data/config_random_resumption.json b/tests/test_data/config_random_resumption.json index 96094da97..3f105abe6 100644 --- a/tests/test_data/config_random_resumption.json +++ b/tests/test_data/config_random_resumption.json @@ -13,7 +13,7 @@ "job_execution_options": "" }, "optimize": { - "search_algorithm": "aiaccel.optimizer.random.search.RandomOptimizer", + "search_algorithm": "aiaccel.optimizer.RandomOptimizer", "goal": "minimize", "trial_number": 5, "rand_seed": 42, diff --git a/tests/test_data/config_sobol.json b/tests/test_data/config_sobol.json index 9e8ed7719..e14e7be32 100644 --- a/tests/test_data/config_sobol.json +++ b/tests/test_data/config_sobol.json @@ -13,7 +13,7 @@ "job_execution_options": "" }, "optimize": { - "search_algorithm": "aiaccel.optimizer.sobol.search.SobolOptimizer", + "search_algorithm": "aiaccel.optimizer.SobolOptimizer", "goal": "minimize", "trial_number": 10, "rand_seed": 42, diff --git a/tests/test_data/config_sobol_resumption.json b/tests/test_data/config_sobol_resumption.json index a0c3dbde6..81a23519a 100644 --- a/tests/test_data/config_sobol_resumption.json +++ b/tests/test_data/config_sobol_resumption.json @@ -13,7 +13,7 @@ "job_execution_options": "" }, "optimize": { - "search_algorithm": "aiaccel.optimizer.sobol.search.SobolOptimizer", + "search_algorithm": "aiaccel.optimizer.SobolOptimizer", "goal": "minimize", "trial_number": 5, "rand_seed": 42, diff --git a/tests/test_data/config_tpe.json b/tests/test_data/config_tpe.json index 427127bff..288a759cd 100644 --- a/tests/test_data/config_tpe.json +++ b/tests/test_data/config_tpe.json @@ -13,7 +13,7 @@ "job_execution_options": "" }, "optimize": { - "search_algorithm": "aiaccel.optimizer.tpe.search.TpeOptimizer", + "search_algorithm": "aiaccel.optimizer.TpeOptimizer", "goal": "minimize", "trial_number": 10, "rand_seed": 42, diff --git a/tests/test_data/config_tpe_resumption.json b/tests/test_data/config_tpe_resumption.json index 8902cb59d..85c4e8c35 100644 --- a/tests/test_data/config_tpe_resumption.json +++ b/tests/test_data/config_tpe_resumption.json @@ -13,7 +13,7 @@ "job_execution_options": "" }, "optimize": { - "search_algorithm": "aiaccel.optimizer.tpe.search.TpeOptimizer", + "search_algorithm": "aiaccel.optimizer.TpeOptimizer", "goal": "minimize", "trial_number": 5, "rand_seed": 42, diff --git a/tests/test_data/grid_config.json b/tests/test_data/grid_config.json index b79b48abf..bd8667988 100644 --- a/tests/test_data/grid_config.json +++ b/tests/test_data/grid_config.json @@ -13,7 +13,7 @@ "group": "gaa" }, "optimize": { - "search_algorithm": "aiaccel.optimizer.grid.search.GridOptimizer", + "search_algorithm": "aiaccel.optimizer.GridOptimizer", "goal": "minimize", "trial_number": 10, "rand_seed": 42, diff --git a/tests/unit/abci_test/additionaloptions.json b/tests/unit/abci_test/additionaloptions.json index bd81c3349..e42bf4797 100644 --- a/tests/unit/abci_test/additionaloptions.json +++ b/tests/unit/abci_test/additionaloptions.json @@ -33,7 +33,7 @@ "$2search_algorithm": "Grid", "$3search_algorithm": "Sobol", "$$$search_algorithm": "NelderMead", - "search_algorithm": "aiaccel.optimizer.tpe.search.TpeOptimizer", + "search_algorithm": "aiaccel.optimizer.TpeOptimizer", "parameter_pool_size": 4, "sleep_time_optimizer": 1 }, diff --git a/tests/unit/abci_test/additionaloptions2.json b/tests/unit/abci_test/additionaloptions2.json index 3af5b0141..6e1b4500f 100644 --- a/tests/unit/abci_test/additionaloptions2.json +++ b/tests/unit/abci_test/additionaloptions2.json @@ -33,7 +33,7 @@ "$2search_algorithm": "Grid", "$3search_algorithm": "Sobol", "$$$search_algorithm": "Nelder-Mead", - "search_algorithm": "aiaccel.optimizer.tpe.search.TpeOptimizer", + "search_algorithm": "aiaccel.optimizer.TpeOptimizer", "parameter_pool_size": 4, "sleep_time_optimizer": 1 }, diff --git a/tests/unit/abci_test/cfg.json b/tests/unit/abci_test/cfg.json index 8d0f3ee2a..b6cfd8831 100644 --- a/tests/unit/abci_test/cfg.json +++ b/tests/unit/abci_test/cfg.json @@ -33,7 +33,7 @@ "$2search_algorithm": "Grid", "$3search_algorithm": "Sobol", "$$$search_algorithm": "Nelder-Mead", - "search_algorithm": "aiaccel.optimizer.tpe.search.TpeOptimizer", + "search_algorithm": "aiaccel.optimizer.TpeOptimizer", "parameter_pool_size": 4, "sleep_time_optimizer": 1 }, diff --git a/tests/unit/abci_test/cfg2.json b/tests/unit/abci_test/cfg2.json index 75df95401..e1d3f6d68 100644 --- a/tests/unit/abci_test/cfg2.json +++ b/tests/unit/abci_test/cfg2.json @@ -33,7 +33,7 @@ "$2search_algorithm": "Grid", "$3search_algorithm": "Sobol", "$$$search_algorithm": "Nelder-Mead", - "search_algorithm": "aiaccel.optimizer.tpe.search.TpeOptimizer", + "search_algorithm": "aiaccel.optimizer.TpeOptimizer", "parameter_pool_size": 4, "sleep_time_optimizer": 1 }, diff --git a/tests/unit/abci_test/cfg3.json b/tests/unit/abci_test/cfg3.json index 8303aa533..cb6fe1094 100644 --- a/tests/unit/abci_test/cfg3.json +++ b/tests/unit/abci_test/cfg3.json @@ -33,7 +33,7 @@ "$2search_algorithm": "Grid", "$3search_algorithm": "Sobol", "$$$search_algorithm": "Nelder-Mead", - "search_algorithm": "aiaccel.optimizer.tpe.search.TpeOptimizer", + "search_algorithm": "aiaccel.optimizer.TpeOptimizer", "parameter_pool_size": 4, "sleep_time_optimizer": 1 }, diff --git a/tests/unit/optimizer_test/sample/search.py b/tests/unit/optimizer_test/sample/search.py deleted file mode 100644 index d714c634f..000000000 --- a/tests/unit/optimizer_test/sample/search.py +++ /dev/null @@ -1,54 +0,0 @@ -from aiaccel.optimizer.abstract_optimizer import AbstractOptimizer -from typing import Optional - - -class MyOptimizer(AbstractOptimizer): - def generate_parameter(self, number: Optional[int] = 1) -> None: - - returned_params = [] - self.get_dict_state() - initial_parameter = self.generate_initial_parameter() - - if initial_parameter is not None: - returned_params.append(initial_parameter) - number -= 1 - - for i in range(number): - new_params = [] - sample = self.params.sample() - - for s in sample: - new_param = { - 'parameter_name': s['name'], - 'type': s['type'], - 'value': s['value'] - } - new_params.append(new_param) - - returned_params.append({'parameters': new_params}) - self.generated_parameter += 1 - - self.create_parameter_files(returned_params) - - def _serialize(self) -> dict: - """Serialize this module. - - Returns: - dict: serialize data. - """ - self.serialize_datas = { - 'generated_parameter': self.generated_parameter, - 'loop_count': self.loop_count - } - return super()._serialize() - - def _deserialize(self, dict_objects: dict) -> None: - """ Deserialize this module. - - Args: - dict_objects(dict): A dictionary including serialized objects. - - Returns: - None - """ - super()._deserialize(dict_objects) diff --git a/tests/unit/test_config.py b/tests/unit/test_config.py index 96927fd39..1d9b3b177 100644 --- a/tests/unit/test_config.py +++ b/tests/unit/test_config.py @@ -106,7 +106,7 @@ def test_config(config_json): assert config.resource_type.get() == "local" assert config.num_node.get() == 4 assert config.abci_group.get() == "gaa" - assert config.search_algorithm.get() == "aiaccel.optimizer.nelder_mead.search.NelderMeadOptimizer" + assert config.search_algorithm.get() == "aiaccel.optimizer.NelderMeadOptimizer" assert config.goal.get() == "minimize" assert config.trial_number.get() == 10 assert config.name_length.get() == 6