LINC-BIT's picture
Upload 1912 files
b84549f verified
# Copyright (c) Microsoft Corporation.
# Licensed under the MIT license.
from dataclasses import dataclass
from pathlib import Path, PurePosixPath
from typing import Any, Dict, Optional
from .base import PathLike
from .common import TrainingServiceConfig
from . import util
__all__ = ['OpenpaiConfig']
@dataclass(init=False)
class OpenpaiConfig(TrainingServiceConfig):
platform: str = 'openpai'
host: str
username: str
token: str
trial_cpu_number: int
trial_memory_size: str
storage_config_name: str
docker_image: str = 'msranni/nni:latest'
local_storage_mount_point: PathLike
container_storage_mount_point: str
reuse_mode: bool = True
openpai_config: Optional[Dict[str, Any]] = None
openpai_config_file: Optional[PathLike] = None
_canonical_rules = {
'host': lambda value: 'https://' + value if '://' not in value else value, # type: ignore
'local_storage_mount_point': util.canonical_path,
'openpai_config_file': util.canonical_path
}
_validation_rules = {
'platform': lambda value: (value == 'openpai', 'cannot be modified'),
'local_storage_mount_point': lambda value: Path(value).is_dir(),
'container_storage_mount_point': lambda value: (PurePosixPath(value).is_absolute(), 'is not absolute'),
'openpai_config_file': lambda value: Path(value).is_file()
}
def validate(self) -> None:
super().validate()
if self.openpai_config is not None and self.openpai_config_file is not None:
raise ValueError('openpai_config and openpai_config_file can only be set one')