コード例 #1
0
ファイル: core.py プロジェクト: siva-moturi/vessel-ml
    def deploy(self,
               mdl_serve_class,
               mdl_serve,
               mdl_file_list=['model.dat'],
               reqs_file='requirements.txt'):

        my_file_list = []
        my_file_list.extend(mdl_file_list)
        my_file_list.append(reqs_file)

        my_output_map = {
            key: value
            for (key, value) in self.MY_DEPLOYMENT_FILE_DICT.items()
        }

        #Add vessel ML core files to deployment image (MY_DEPLOYMENT_FILE_DICT dictionary has source and desired dest paths)
        self.preprocessor = FunctionPreProcessor(function_obj=mdl_serve,
                                                 output_map=my_output_map,
                                                 input_files=my_file_list)
        self.builder = ClusterBuilder(
            registry=self.DOCKER_REGISTRY,
            base_image=self.BASE_IMAGE,
            preprocessor=self.preprocessor,
            pod_spec_mutators=[
                fairing.cloud.gcp.add_gcp_credentials_if_exists
            ],
            context_source=gcs_context.GCSContextSource())

        self.builder.build()
        self.pod_spec = self.builder.generate_pod_spec()

        # TODO: Add support for deploying into custom user-provided namespaces (use namespace param of Serving class)
        self.infer_deployer = Serving(serving_class=mdl_serve_class)
        self.endpoint = self.infer_deployer.deploy(self.pod_spec)
        return self.endpoint
コード例 #2
0
 def get_builder(
         self,
         preprocessor,
         base_image,
         registry,
         needs_deps_installation=True,  # pylint:disable=arguments-differ
         pod_spec_mutators=None):
     pod_spec_mutators = pod_spec_mutators or []
     pod_spec_mutators.append(gcp.add_gcp_credentials_if_exists)
     pod_spec_mutators.append(docker.add_docker_credentials_if_exists)
     # TODO (karthikv2k): Add cloud build as the deafult
     # once https://github.com/kubeflow/fairing/issues/145 is fixed
     if not needs_deps_installation:
         return AppendBuilder(preprocessor=preprocessor,
                              base_image=base_image,
                              registry=registry)
     elif fairing.utils.is_running_in_k8s():
         return ClusterBuilder(
             preprocessor=preprocessor,
             base_image=base_image,
             registry=registry,
             pod_spec_mutators=pod_spec_mutators,
             context_source=gcs_context.GCSContextSource(
                 namespace=fairing.utils.get_default_target_namespace()))
     elif ml_tasks_utils.is_docker_daemon_exists():
         return DockerBuilder(preprocessor=preprocessor,
                              base_image=base_image,
                              registry=registry)
     else:
         # TODO (karthikv2k): Add more info on how to reolve this issue
         raise RuntimeError(
             "Not able to guess the right builder for this job!")
コード例 #3
0
ファイル: cluster.py プロジェクト: zhenghuiwang/fairing
 def __init__(self,
              registry=None,
              context_source=gcs_context.GCSContextSource(),
              preprocessor=None,
              base_image=constants.DEFAULT_BASE_IMAGE,
              dockerfile_path=None):
     super().__init__(
         registry=registry,
         preprocessor=preprocessor,
         base_image=base_image,
     )
     self.manager = KubeManager()
     self.context_source = context_source
コード例 #4
0
ファイル: core.py プロジェクト: siva-moturi/vessel-ml
    def train_v1(self,
                 mdl_trainer,
                 train_data_file_list=['data/train.csv'],
                 reqs_file='requirements.txt'):

        #TODO: optimize if sequence doesn't matter
        #logging.info("Creating docker context: %s", output_file)
        my_file_list = []
        my_file_list.append(mdl_trainer)
        my_file_list.extend(train_data_file_list)
        my_file_list.append(reqs_file)

        my_output_map = {
            key: value
            for (key, value) in self.MY_DEPLOYMENT_FILE_DICT.items()
        }
        #for f in train_data_file_list:
        #fname = f.split("/")[-1]
        #my_output_map[os.path.normpath(f)] = "/app/data/{0}".format(fname)

        self.preprocessor = BasePreProcessor(input_files=my_file_list,
                                             output_map=my_output_map)
        self.builder = ClusterBuilder(
            registry=self.DOCKER_REGISTRY,
            base_image=self.BASE_IMAGE,
            preprocessor=self.preprocessor,
            pod_spec_mutators=[
                fairing.cloud.gcp.add_gcp_credentials_if_exists
            ],
            context_source=gcs_context.GCSContextSource())

        self.builder.build()
        self.pod_spec = self.builder.generate_pod_spec()
        self.train_deployer = TfJob(pod_spec_mutators=[
            fairing.cloud.gcp.add_gcp_credentials_if_exists
        ],
                                    worker_count=1,
                                    chief_count=0)
        j_name = self.train_deployer.deploy(self.pod_spec)
        return (self.train_deployer.job_id, j_name)
コード例 #5
0
def run_submission_with_function_preprocessor(capsys,
                                              deployer="job",
                                              builder="append",
                                              namespace="default",
                                              cleanup=False):
    py_version = ".".join([str(x) for x in sys.version_info[0:3]])
    base_image = 'registry.hub.docker.com/library/python:{}'.format(py_version)
    if builder == 'cluster':
        fairing.config.set_builder(
            builder,
            base_image=base_image,
            registry=DOCKER_REGISTRY,
            pod_spec_mutators=[fairing.cloud.gcp.add_gcp_credentials],
            context_source=gcs_context.GCSContextSource(namespace=namespace),
            namespace=namespace)
    else:
        fairing.config.set_builder(builder,
                                   base_image=base_image,
                                   registry=DOCKER_REGISTRY)

    expected_result = str(uuid.uuid4())
    fairing.config.set_deployer(deployer,
                                namespace=namespace,
                                cleanup=cleanup,
                                labels={'pytest-id': expected_result})

    remote_train = fairing.config.fn(lambda: train_fn(expected_result))
    remote_train()
    captured = capsys.readouterr()
    assert expected_result in captured.out

    if deployer == "tfjob":
        if cleanup:
            assert expected_result not in str(
                get_tfjobs_with_labels('pytest-id=' + expected_result))
        else:
            assert expected_result in str(
                get_tfjobs_with_labels('pytest-id=' + expected_result))
コード例 #6
0
 def __init__(self,
              registry=None,
              image_name=constants.DEFAULT_IMAGE_NAME,
              context_source=None,
              preprocessor=None,
              push=True,
              base_image=constants.DEFAULT_BASE_IMAGE,
              pod_spec_mutators=None,
              namespace="kubeflow",
              dockerfile_path=None):
     super().__init__(
             registry=registry,
             image_name=image_name,
             push=push,
             preprocessor=preprocessor,
             base_image=base_image,
         )
     self.manager = KubeManager()
     if context_source is None:
         context_source = gcs_context.GCSContextSource(namespace=namespace)
     self.context_source = context_source
     self.pod_spec_mutators = pod_spec_mutators or []
     self.namespace = namespace
コード例 #7
0
ファイル: core.py プロジェクト: siva-moturi/vessel-ml
    def train(self,
              mdl_trainer,
              train_data_file_list=['train.csv'],
              reqs_file='requirements.txt'):

        my_file_list = []
        my_file_list.append(reqs_file)

        my_output_map = {
            key: value
            for (key, value) in self.MY_DEPLOYMENT_FILE_DICT.items()
        }
        for f in train_data_file_list:
            fname = f.split("/")[-1]
            my_output_map[os.path.normpath(f)] = "/app/data/{0}".format(fname)

        self.preprocessor = FunctionPreProcessor(function_obj=mdl_trainer,
                                                 output_map=my_output_map,
                                                 input_files=my_file_list)
        self.builder = ClusterBuilder(
            registry=self.DOCKER_REGISTRY,
            base_image=self.BASE_IMAGE,
            preprocessor=self.preprocessor,
            pod_spec_mutators=[
                fairing.cloud.gcp.add_gcp_credentials_if_exists
            ],
            context_source=gcs_context.GCSContextSource())

        self.builder.build()
        self.pod_spec = self.builder.generate_pod_spec()
        self.train_deployer = TfJob(pod_spec_mutators=[
            fairing.cloud.gcp.add_gcp_credentials_if_exists
        ],
                                    worker_count=1,
                                    chief_count=0)
        j_name = self.train_deployer.deploy(self.pod_spec)
        return (self.train_deployer.job_id, j_name)
コード例 #8
0
 def __init__(self, namespace=None, build_context_source=None):
     super(GKEBackend, self).__init__(namespace, build_context_source)
     self._build_context_source = gcs_context.GCSContextSource(
         namespace=self._namespace)
コード例 #9
0
 def __init__(self, namespace=None, build_context_source=None):
     build_context_source = build_context_source or gcs_context.GCSContextSource(
         namespace=namespace)
     super(GKEBackend, self).__init__(namespace, build_context_source)