Skip to content

Commit 2513631

Browse files
authored
Merge pull request #216 from dataiku/feature/dss110-sc-76218-mlflow-configure-container-exec
For mlflow, allow to specify a container execution configuration when adding or evaluating an SMV
2 parents d51ba05 + 85100a9 commit 2513631

File tree

1 file changed

+19
-7
lines changed

1 file changed

+19
-7
lines changed

dataikuapi/dss/savedmodel.py

Lines changed: 19 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -122,7 +122,7 @@ def get_origin_ml_task(self):
122122
if fmi is not None:
123123
return DSSMLTask.from_full_model_id(self.client, fmi, project_key=self.project_key)
124124

125-
def import_mlflow_version_from_path(self, version_id, path, code_env_name="INHERIT"):
125+
def import_mlflow_version_from_path(self, version_id, path, code_env_name="INHERIT", container_exec_config_name="INHERIT"):
126126
"""
127127
Create a new version for this saved model from a path containing a MLFlow model.
128128
@@ -133,6 +133,10 @@ def import_mlflow_version_from_path(self, version_id, path, code_env_name="INHER
133133
:param str code_env_name: Name of the code env to use for this model version. The code env must contain at least
134134
mlflow and the package(s) corresponding to the used MLFlow-compatible frameworks.
135135
If value is "INHERIT", the default active code env of the project will be used
136+
:param str container_exec_config_name: Name of the containerized execution configuration to use while creating
137+
this model version.
138+
If value is "INHERIT", the container execution configuration of the project will be used.
139+
If value is "NONE", local execution will be used (no container)
136140
:return a :class:MLFlowVersionHandler in order to interact with the new MLFlow model version
137141
"""
138142
# TODO: Add a check that it's indeed a MLFlow model folder
@@ -144,13 +148,13 @@ def import_mlflow_version_from_path(self, version_id, path, code_env_name="INHER
144148
archive_filename = _make_zipfile(os.path.join(archive_temp_dir, "tmpmodel.zip"), path)
145149

146150
with open(archive_filename, "rb") as fp:
147-
self.client._perform_empty("POST", "/projects/%s/savedmodels/%s/versions/%s?codeEnvName=%s" % (self.project_key, self.sm_id, version_id, code_env_name),
151+
self.client._perform_empty("POST", "/projects/%s/savedmodels/%s/versions/%s?codeEnvName=%s&containerExecConfigName=%s" % (self.project_key, self.sm_id, version_id, code_env_name, container_exec_config_name),
148152
files={"file": (archive_filename, fp)})
149153
return self.get_mlflow_version_handler(version_id)
150154
finally:
151155
shutil.rmtree(archive_temp_dir)
152156

153-
def import_mlflow_version_from_managed_folder(self, version_id, managed_folder, path, code_env_name="INHERIT"):
157+
def import_mlflow_version_from_managed_folder(self, version_id, managed_folder, path, code_env_name="INHERIT", container_exec_config_name="INHERIT"):
154158
"""
155159
Create a new version for this saved model from a path containing a MLFlow model in a managed folder.
156160
@@ -162,6 +166,10 @@ def import_mlflow_version_from_managed_folder(self, version_id, managed_folder,
162166
:param str code_env_name: Name of the code env to use for this model version. The code env must contain at least
163167
mlflow and the package(s) corresponding to the used MLFlow-compatible frameworks.
164168
If value is "INHERIT", the default active code env of the project will be used
169+
:param str container_exec_config_name: Name of the containerized execution configuration to use for evaluating
170+
this model version.
171+
If value is "INHERIT", the container execution configuration of the project will be used.
172+
If value is "NONE", local execution will be used (no container)
165173
:return a :class:MLFlowVersionHandler in order to interact with the new MLFlow model version
166174
"""
167175
# TODO: Add a check that it's indeed a MLFlow model folder
@@ -172,8 +180,8 @@ def import_mlflow_version_from_managed_folder(self, version_id, managed_folder,
172180
folder_ref = managed_folder
173181

174182
self.client._perform_empty(
175-
"POST", "/projects/{project_id}/savedmodels/{saved_model_id}/versions/{version_id}?codeEnvName={codeEnvName}".format(
176-
project_id=self.project_key, saved_model_id=self.sm_id, version_id=version_id, codeEnvName=code_env_name
183+
"POST", "/projects/{project_id}/savedmodels/{saved_model_id}/versions/{version_id}?codeEnvName={codeEnvName}&containerExecConfigName={containerExecConfigName}".format(
184+
project_id=self.project_key, saved_model_id=self.sm_id, version_id=version_id, codeEnvName=code_env_name, containerExecConfigName=container_exec_config_name
177185
),
178186
params={"folderRef": folder_ref, "path": path},
179187
files={"file": (None, None)} # required for backend-mandated multipart request
@@ -343,7 +351,7 @@ def set_core_metadata(self,
343351
"/projects/%s/savedmodels/%s/versions/%s/external-ml/metadata" % (self.saved_model.project_key, self.saved_model.sm_id, self.version_id),
344352
body=metadata)
345353

346-
def evaluate(self, dataset_ref):
354+
def evaluate(self, dataset_ref, container_exec_config_name="INHERIT"):
347355
"""
348356
Evaluates the performance of this model version on a particular dataset.
349357
After calling this, the "result screens" of the MLFlow model version will be available
@@ -352,11 +360,15 @@ def evaluate(self, dataset_ref):
352360
353361
:meth:`set_core_metadata` must be called before you can evaluate a dataset
354362
:param str dataset_ref: Evaluation dataset to use (either a dataset name, "PROJECT.datasetName", :class:`DSSDataset` instance or :class:`dataiku.Dataset` instance)
363+
:param str container_exec_config_name: Name of the containerized execution configuration to use for running the evaluation process.
364+
If value is "INHERIT", the container execution configuration of the project will be used.
365+
If value is "NONE", local execution will be used (no container)
355366
"""
356367
if hasattr(dataset_ref, 'name'):
357368
dataset_ref = dataset_ref.name
358369
req = {
359-
"datasetRef": dataset_ref
370+
"datasetRef": dataset_ref,
371+
"containerExecConfigName": container_exec_config_name
360372
}
361373
self.saved_model.client._perform_empty("POST",
362374
"/projects/%s/savedmodels/%s/versions/%s/external-ml/actions/evaluate" % (self.saved_model.project_key, self.saved_model.sm_id, self.version_id),

0 commit comments

Comments
 (0)