forked from mlflow/mlflow
-
Notifications
You must be signed in to change notification settings - Fork 0
/
abstract_store.py
265 lines (220 loc) · 9.48 KB
/
abstract_store.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
from abc import abstractmethod, ABCMeta
class AbstractStore:
"""
Note:: Experimental: This entity may change or be removed in a future release without warning.
Abstract class that defines API interfaces for storing Model Registry metadata.
"""
__metaclass__ = ABCMeta
def __init__(self):
"""
Empty constructor. This is deliberately not marked as abstract, else every derived class
would be forced to create one.
"""
pass
# CRUD API for RegisteredModel objects
@abstractmethod
def create_registered_model(self, name, tags=None, description=None):
"""
Create a new registered model in backend store.
:param name: Name of the new model. This is expected to be unique in the backend store.
:param tags: A list of :py:class:`mlflow.entities.model_registry.RegisteredModelTag`
instances associated with this registered model.
:param description: Description of the model.
:return: A single object of :py:class:`mlflow.entities.model_registry.RegisteredModel`
created in the backend.
"""
pass
@abstractmethod
def update_registered_model(self, name, description):
"""
Update description of the registered model.
:param name: Registered model name.
:param description: New description.
:return: A single updated :py:class:`mlflow.entities.model_registry.RegisteredModel` object.
"""
pass
@abstractmethod
def rename_registered_model(self, name, new_name):
"""
Rename the registered model.
:param name: Registered model name.
:param new_name: New proposed name.
:return: A single updated :py:class:`mlflow.entities.model_registry.RegisteredModel` object.
"""
pass
@abstractmethod
def delete_registered_model(self, name):
"""
Delete the registered model.
Backend raises exception if a registered model with given name does not exist.
:param name: Registered model name.
:return: None
"""
pass
@abstractmethod
def list_registered_models(self, max_results, page_token):
"""
List of all registered models.
:param max_results: Maximum number of registered models desired.
:param page_token: Token specifying the next page of results. It should be obtained from
a ``list_registered_models`` call.
:return: A PagedList of :py:class:`mlflow.entities.model_registry.RegisteredModel` objects
that satisfy the search expressions. The pagination token for the next page can be
obtained via the ``token`` attribute of the object.
"""
pass
@abstractmethod
def search_registered_models(
self, filter_string=None, max_results=None, order_by=None, page_token=None
):
"""
Search for registered models in backend that satisfy the filter criteria.
:param filter_string: Filter query string, defaults to searching all registered models.
:param max_results: Maximum number of registered models desired.
:param order_by: List of column names with ASC|DESC annotation, to be used for ordering
matching search results.
:param page_token: Token specifying the next page of results. It should be obtained from
a ``search_registered_models`` call.
:return: A PagedList of :py:class:`mlflow.entities.model_registry.RegisteredModel` objects
that satisfy the search expressions. The pagination token for the next page can be
obtained via the ``token`` attribute of the object.
"""
pass
@abstractmethod
def get_registered_model(self, name):
"""
Get registered model instance by name.
:param name: Registered model name.
:return: A single :py:class:`mlflow.entities.model_registry.RegisteredModel` object.
"""
pass
@abstractmethod
def get_latest_versions(self, name, stages=None):
"""
Latest version models for each requested stage. If no ``stages`` argument is provided,
returns the latest version for each stage.
:param name: Registered model name.
:param stages: List of desired stages. If input list is None, return latest versions for
each stage.
:return: List of :py:class:`mlflow.entities.model_registry.ModelVersion` objects.
"""
pass
@abstractmethod
def set_registered_model_tag(self, name, tag):
"""
Set a tag for the registered model.
:param name: Registered model name.
:param tag: :py:class:`mlflow.entities.model_registry.RegisteredModelTag` instance to log.
:return: None
"""
pass
@abstractmethod
def delete_registered_model_tag(self, name, key):
"""
Delete a tag associated with the registered model.
:param name: Registered model name.
:param key: Registered model tag key.
:return: None
"""
pass
# CRUD API for ModelVersion objects
@abstractmethod
def create_model_version(
self, name, source, run_id=None, tags=None, run_link=None, description=None
):
"""
Create a new model version from given source and run ID.
:param name: Registered model name.
:param source: Source path where the MLflow model is stored.
:param run_id: Run ID from MLflow tracking server that generated the model.
:param tags: A list of :py:class:`mlflow.entities.model_registry.ModelVersionTag`
instances associated with this model version.
:param run_link: Link to the run from an MLflow tracking server that generated this model.
:param description: Description of the version.
:return: A single object of :py:class:`mlflow.entities.model_registry.ModelVersion`
created in the backend.
"""
pass
@abstractmethod
def update_model_version(self, name, version, description):
"""
Update metadata associated with a model version in backend.
:param name: Registered model name.
:param version: Registered model version.
:param description: New model description.
:return: A single :py:class:`mlflow.entities.model_registry.ModelVersion` object.
"""
pass
@abstractmethod
def transition_model_version_stage(self, name, version, stage, archive_existing_versions):
"""
Update model version stage.
:param name: Registered model name.
:param version: Registered model version.
:param new_stage: New desired stage for this model version.
:param archive_existing_versions: If this flag is set to ``True``, all existing model
versions in the stage will be automically moved to the "archived" stage. Only valid
when ``stage`` is ``"staging"`` or ``"production"`` otherwise an error will be raised.
:return: A single :py:class:`mlflow.entities.model_registry.ModelVersion` object.
"""
pass
@abstractmethod
def delete_model_version(self, name, version):
"""
Delete model version in backend.
:param name: Registered model name.
:param version: Registered model version.
:return: None
"""
pass
@abstractmethod
def get_model_version(self, name, version):
"""
Get the model version instance by name and version.
:param name: Registered model name.
:param version: Registered model version.
:return: A single :py:class:`mlflow.entities.model_registry.ModelVersion` object.
"""
pass
@abstractmethod
def get_model_version_download_uri(self, name, version):
"""
Get the download location in Model Registry for this model version.
NOTE: For first version of Model Registry, since the models are not copied over to another
location, download URI points to input source path.
:param name: Registered model name.
:param version: Registered model version.
:return: A single URI location that allows reads for downloading.
"""
pass
@abstractmethod
def search_model_versions(self, filter_string):
"""
Search for model versions in backend that satisfy the filter criteria.
:param filter_string: A filter string expression. Currently supports a single filter
condition either name of model like ``name = 'model_name'`` or
``run_id = '...'``.
:return: PagedList of :py:class:`mlflow.entities.model_registry.ModelVersion`
objects.
"""
pass
@abstractmethod
def set_model_version_tag(self, name, version, tag):
"""
Set a tag for the model version.
:param name: Registered model name.
:param version: Registered model version.
:param tag: :py:class:`mlflow.entities.model_registry.ModelVersionTag` instance to log.
:return: None
"""
pass
@abstractmethod
def delete_model_version_tag(self, name, version, key):
"""
Delete a tag associated with the model version.
:param name: Registered model name.
:param version: Registered model version.
:param key: Tag key.
:return: None
"""
pass