| @@ -129,19 +129,11 @@ class LearnwaresContainer: | |||||
| @staticmethod | @staticmethod | ||||
| def _initialize_model_container(model: ModelEnvContainer): | def _initialize_model_container(model: ModelEnvContainer): | ||||
| try: | |||||
| model.init_env_and_metadata() | |||||
| except Exception as e: | |||||
| logger.warning(f"fail to initialize model container, due to {e}") | |||||
| pass | |||||
| model.init_env_and_metadata() | |||||
| @staticmethod | @staticmethod | ||||
| def _destroy_model_container(model: ModelEnvContainer): | def _destroy_model_container(model: ModelEnvContainer): | ||||
| try: | |||||
| model.remove_env() | |||||
| except Exception as e: | |||||
| logger.warning(f"fail to destroy model container, due to {e}") | |||||
| pass | |||||
| model.remove_env() | |||||
| def __enter__(self): | def __enter__(self): | ||||
| model_list = [_learnware.get_model() for _learnware in self.learnware_list] | model_list = [_learnware.get_model() for _learnware in self.learnware_list] | ||||
| @@ -1,4 +1,5 @@ | |||||
| import os | import os | ||||
| import numpy as np | |||||
| import yaml | import yaml | ||||
| import json | import json | ||||
| import zipfile | import zipfile | ||||
| @@ -7,13 +8,16 @@ import requests | |||||
| import tempfile | import tempfile | ||||
| from enum import Enum | from enum import Enum | ||||
| from tqdm import tqdm | from tqdm import tqdm | ||||
| from typing import List | |||||
| from ..config import C | from ..config import C | ||||
| from .. import learnware | from .. import learnware | ||||
| from . import package_utils | from . import package_utils | ||||
| from .container import LearnwaresContainer | |||||
| from ..market.easy import EasyMarket | from ..market.easy import EasyMarket | ||||
| from ..logger import get_module_logger | from ..logger import get_module_logger | ||||
| from ..specification import Specification | from ..specification import Specification | ||||
| from ..learnware import BaseReuser, Learnware | |||||
| CHUNK_SIZE = 1024 * 1024 | CHUNK_SIZE = 1024 * 1024 | ||||
| logger = get_module_logger(module_name="LearnwareClient") | logger = get_module_logger(module_name="LearnwareClient") | ||||
| @@ -427,3 +431,12 @@ class LearnwareClient: | |||||
| logger.info("test ok") | logger.info("test ok") | ||||
| pass | pass | ||||
| def reuse_learnware(self, input_array: np.ndarray, learnware_list: List[Learnware], learnware_zippaths: List[str], reuser: BaseReuser): | |||||
| logger.info(f"reuse learnare list {learnware_list} with reuser {reuser}") | |||||
| with LearnwaresContainer(learnware_list, learnware_zippaths) as env_container: | |||||
| learnware_list = env_container.get_learnware_list_with_container() | |||||
| reuser.reset(learnware_list=learnware_list) | |||||
| result = reuser.predict(input_array) | |||||
| return result | |||||
| @@ -77,7 +77,7 @@ class Learnware: | |||||
| class BaseReuser: | class BaseReuser: | ||||
| """Providing the interfaces to reuse the learnwares which is searched by learnware""" | """Providing the interfaces to reuse the learnwares which is searched by learnware""" | ||||
| def __init__(self, learnware_list: List[Learnware]): | |||||
| def __init__(self, learnware_list: List[Learnware] = None): | |||||
| """The initializaiton method for base reuser | """The initializaiton method for base reuser | ||||
| Parameters | Parameters | ||||
| @@ -87,6 +87,11 @@ class BaseReuser: | |||||
| """ | """ | ||||
| self.learnware_list = learnware_list | self.learnware_list = learnware_list | ||||
| def reset(self, **kwargs): | |||||
| for _k, _v in kwargs.items(): | |||||
| if hasattr(_k): | |||||
| setattr(_k, _v) | |||||
| def predict(self, user_data: np.ndarray) -> np.ndarray: | def predict(self, user_data: np.ndarray) -> np.ndarray: | ||||
| """Give the final prediction for user data with reused learnware | """Give the final prediction for user data with reused learnware | ||||
| @@ -21,7 +21,7 @@ logger = get_module_logger("Reuser") | |||||
| class JobSelectorReuser(BaseReuser): | class JobSelectorReuser(BaseReuser): | ||||
| """Baseline Multiple Learnware Reuser using Job Selector Method""" | """Baseline Multiple Learnware Reuser using Job Selector Method""" | ||||
| def __init__(self, learnware_list: List[Learnware], herding_num: int = 1000, use_herding: bool = True): | |||||
| def __init__(self, learnware_list: List[Learnware] = None, herding_num: int = 1000, use_herding: bool = True): | |||||
| """The initialization method for job selector reuser | """The initialization method for job selector reuser | ||||
| Parameters | Parameters | ||||
| @@ -265,7 +265,7 @@ class JobSelectorReuser(BaseReuser): | |||||
| class AveragingReuser(BaseReuser): | class AveragingReuser(BaseReuser): | ||||
| """Baseline Multiple Learnware Reuser using Ensemble Method""" | """Baseline Multiple Learnware Reuser using Ensemble Method""" | ||||
| def __init__(self, learnware_list: List[Learnware], mode: str): | |||||
| def __init__(self, learnware_list: List[Learnware] = None, mode: str = 'mean'): | |||||
| """The initialization method for averaging ensemble reuser | """The initialization method for averaging ensemble reuser | ||||
| Parameters | Parameters | ||||
| @@ -330,7 +330,7 @@ class EnsemblePruningReuser(BaseReuser): | |||||
| References: [1] Yu-Chang Wu, Yi-Xiao He, Chao Qian, and Zhi-Hua Zhou. Multi-objective Evolutionary Ensemble Pruning Guided by Margin Distribution. In: Proceedings of the 17th International Conference on Parallel Problem Solving from Nature (PPSN'22), Dortmund, Germany, 2022. | References: [1] Yu-Chang Wu, Yi-Xiao He, Chao Qian, and Zhi-Hua Zhou. Multi-objective Evolutionary Ensemble Pruning Guided by Margin Distribution. In: Proceedings of the 17th International Conference on Parallel Problem Solving from Nature (PPSN'22), Dortmund, Germany, 2022. | ||||
| """ | """ | ||||
| def __init__(self, learnware_list: List[Learnware], mode: str): | |||||
| def __init__(self, learnware_list: List[Learnware] = None, mode: str = 'classification'): | |||||
| """The initialization method for ensemble pruning reuser | """The initialization method for ensemble pruning reuser | ||||
| Parameters | Parameters | ||||