Browse Source

[FIX] fix bugs for conda container

tags/v0.3.2
bxdd 2 years ago
parent
commit
3d322ed1f8
5 changed files with 11 additions and 14 deletions
  1. +5
    -8
      learnware/client/container.py
  2. +2
    -2
      learnware/client/learnware_client.py
  3. +1
    -1
      learnware/learnware/__init__.py
  4. +2
    -2
      learnware/learnware/base.py
  5. +1
    -1
      tests/test_learnware_client/test_reuse.py

+ 5
- 8
learnware/client/container.py View File

@@ -492,7 +492,6 @@ class LearnwaresContainer:
def __init__(
self,
learnwares: Union[List[Learnware], Learnware],
learnware_zippaths: Union[List[str], str],
cleanup=True,
mode="conda",
):
@@ -505,8 +504,6 @@ class LearnwaresContainer:
"""
if isinstance(learnwares, Learnware):
learnwares = [learnwares]
if isinstance(learnware_zippaths, str):
learnware_zippaths = [learnware_zippaths]

assert all(
[isinstance(_learnware.get_model(), dict) for _learnware in learnwares]
@@ -515,26 +512,26 @@ class LearnwaresContainer:
self.mode = mode
assert self.mode in {"conda", "docker"}, f"mode must be in ['conda', 'docker'], should not be {self.mode}"
self.learnware_list = learnwares
self.learnware_zippaths = learnware_zippaths
self.cleanup = cleanup

def __enter__(self):
if self.mode == "conda":
self.learnware_containers = [
Learnware(
_learnware.id, ModelCondaContainer(_learnware.get_model(), _zippath), _learnware.get_specification()
_learnware.id, ModelCondaContainer(_learnware.get_model(), _learnware.get_dirpath()), _learnware.get_specification(), _learnware.get_dirpath()
)
for _learnware, _zippath in zip(self.learnware_list, self.learnware_zippaths)
for _learnware in self.learnware_list
]
else:
self._docker_container = ModelDockerContainer._generate_docker_container()
self.learnware_containers = [
Learnware(
_learnware.id,
ModelDockerContainer(_learnware.get_model(), _zippath, self._docker_container, build=False),
ModelDockerContainer(_learnware.get_model(), _learnware.get_dirpath(), self._docker_container, build=False),
_learnware.get_specification(),
_learnware.get_dirpath()
)
for _learnware, _zippath in zip(self.learnware_list, self.learnware_zippaths)
for _learnware in self.learnware_list
]
atexit.register(ModelDockerContainer._destroy_docker_container, self._docker_container)



+ 2
- 2
learnware/client/learnware_client.py View File

@@ -373,10 +373,10 @@ class LearnwareClient:
for i in range(len(learnware_list)):
learnware_list[i].instantiate_model()
elif runnable_option == "conda_env":
with LearnwaresContainer(learnware_list, zip_paths, cleanup=False, mode="conda") as env_container:
with LearnwaresContainer(learnware_list, cleanup=False, mode="conda") as env_container:
learnware_list = env_container.get_learnwares_with_container()
elif runnable_option == "docker":
with LearnwaresContainer(learnware_list, zip_paths, cleanup=False, mode="docker") as env_container:
with LearnwaresContainer(learnware_list, cleanup=False, mode="docker") as env_container:
learnware_list = env_container.get_learnwares_with_container()

if len(learnware_list) == 1:


+ 1
- 1
learnware/learnware/__init__.py View File

@@ -71,4 +71,4 @@ def get_learnware_from_dirpath(id: str, semantic_spec: dict, learnware_dirpath)
logger.warning(f"Load Learnware {id} failed! Due to {repr(e)}")
return None

return Learnware(id=id, model=learnware_config["model"], specification=learnware_spec)
return Learnware(id=id, model=learnware_config["model"], specification=learnware_spec, learnware_dirpath=learnware_dirpath)

+ 2
- 2
learnware/learnware/base.py View File

@@ -14,7 +14,7 @@ logger = get_module_logger("Learnware")
class Learnware:
"""The learnware class, which is the basic components in learnware market"""

def __init__(self, id: str, model: Union[BaseModel, dict], specification: Specification, dirpath: str):
def __init__(self, id: str, model: Union[BaseModel, dict], specification: Specification, learnware_dirpath: str):
"""The initialization method for learnware.

Parameters
@@ -42,7 +42,7 @@ class Learnware:
self.id = id
self.model = model
self.specification = specification
self.learnware_dirpath = dirpath
self.learnware_dirpath = learnware_dirpath

def __repr__(self) -> str:
return "{}({}, {}, {})".format(type(self).__name__, self.id, type(self.model).__name__, self.specification)


+ 1
- 1
tests/test_learnware_client/test_reuse.py View File

@@ -25,7 +25,7 @@ if __name__ == "__main__":
learnware = get_learnware_from_dirpath(f"test_id{id}", semantic_specification, dir_path)
learnware_list.append(learnware)

with LearnwaresContainer(learnware_list, zip_paths) as env_container:
with LearnwaresContainer(learnware_list) as env_container:
learnware_list = env_container.get_learnwares_with_container()
reuser = AveragingReuser(learnware_list, mode="vote")
input_array = np.random.randint(0, 3, size=(20, 9))


Loading…
Cancel
Save