Skip to content

Commit 8430367

Browse files
committed
Add an example notebook for model metadata service
1 parent 5bda824 commit 8430367

File tree

2 files changed

+337
-0
lines changed

2 files changed

+337
-0
lines changed

examples/.gitignore

+2
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
#Ipython Notebook
2+
.ipynb_checkpoints

examples/metadata_demo.ipynb

+335
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,335 @@
1+
{
2+
"cells": [
3+
{
4+
"cell_type": "markdown",
5+
"metadata": {},
6+
"source": [
7+
"# Model Metadata API Demo"
8+
]
9+
},
10+
{
11+
"cell_type": "markdown",
12+
"metadata": {},
13+
"source": [
14+
"The Model Metadata API is still in developement. This demo showcases some of the functionality of the new API."
15+
]
16+
},
17+
{
18+
"cell_type": "markdown",
19+
"metadata": {},
20+
"source": [
21+
"## Api Configuration"
22+
]
23+
},
24+
{
25+
"cell_type": "code",
26+
"execution_count": null,
27+
"metadata": {},
28+
"outputs": [],
29+
"source": [
30+
"from seldon_deploy_sdk.rest import ApiException\n",
31+
"\n",
32+
"from seldon_deploy_sdk import V1Model, ModelMetadataServiceApi, Configuration, ApiClient\n",
33+
"from seldon_deploy_sdk.auth import OIDCAuthenticator\n",
34+
"from pprint import pprint\n",
35+
"\n",
36+
"config = Configuration()\n",
37+
"config.host = \"http://localhost:8080\"\n",
38+
"# auth if needed\n",
39+
"# config.oidc_server = \"http://localhost:8080/auth/realms/deploy-realm\"\n",
40+
"# config.oidc_client_id = \"sd-cli\""
41+
]
42+
},
43+
{
44+
"cell_type": "code",
45+
"execution_count": null,
46+
"metadata": {},
47+
"outputs": [],
48+
"source": [
49+
"# auth = OIDCAuthenticator(config)\n",
50+
"api_client = ApiClient(config)\n",
51+
"# config.access_token = auth.authenticate(\"[email protected]\", \"12341234\")"
52+
]
53+
},
54+
{
55+
"cell_type": "code",
56+
"execution_count": null,
57+
"metadata": {},
58+
"outputs": [],
59+
"source": [
60+
"api_instance = ModelMetadataServiceApi(api_client)"
61+
]
62+
},
63+
{
64+
"cell_type": "markdown",
65+
"metadata": {},
66+
"source": [
67+
"## Create a model metadata entry"
68+
]
69+
},
70+
{
71+
"cell_type": "code",
72+
"execution_count": null,
73+
"metadata": {},
74+
"outputs": [],
75+
"source": [
76+
"model = V1Model(\n",
77+
" uri=\"gs://test-model-alpha-v1.0.0\",\n",
78+
" name=\"alpha\",\n",
79+
" version=\"v1.0.0\",\n",
80+
" implementation=\"XGBOOST\",\n",
81+
" task_type=\"regression\",\n",
82+
" tags={\n",
83+
" \"source\": \"https://github.com/some-test-model-alpha-repo\",\n",
84+
" \"an arbitrary tag\": \"true\",\n",
85+
" },\n",
86+
")\n",
87+
"try:\n",
88+
" # Create a Model Metadata entry.\n",
89+
" api_response = api_instance.model_metadata_service_create_model_metadata(model)\n",
90+
" pprint(api_response)\n",
91+
"except ApiException as e:\n",
92+
" print(\n",
93+
" \"Exception when calling ModelMetadataServiceApi->model_metadata_service_create_model_metadata: %s\\n\"\n",
94+
" % e\n",
95+
" )"
96+
]
97+
},
98+
{
99+
"cell_type": "markdown",
100+
"metadata": {},
101+
"source": [
102+
"## Create multiple metadata entries"
103+
]
104+
},
105+
{
106+
"cell_type": "code",
107+
"execution_count": null,
108+
"metadata": {},
109+
"outputs": [],
110+
"source": [
111+
"models = [\n",
112+
" # Same model different versions\n",
113+
" {\n",
114+
" \"uri\": \"gs://test-model-beta-v1.0.0\",\n",
115+
" \"name\": \"beta\",\n",
116+
" \"version\": \"v1.0.0\",\n",
117+
" \"implementation\": \"SKLEARN\",\n",
118+
" \"task_type\": \"classification\",\n",
119+
" \"tags\": {\"author\": \"Jon\"},\n",
120+
" },\n",
121+
" {\n",
122+
" \"uri\": \"gs://test-model-beta-v2.0.0\",\n",
123+
" \"name\": \"beta\",\n",
124+
" \"version\": \"v2.0.0\",\n",
125+
" \"implementation\": \"SKLEARN\",\n",
126+
" \"task_type\": \"classification\",\n",
127+
" \"tags\": {\"author\": \"Bob\"},\n",
128+
" },\n",
129+
" {\n",
130+
" \"uri\": \"gs://test-model-beta-v3.0.0\",\n",
131+
" \"name\": \"beta\",\n",
132+
" \"version\": \"v3.0.0\",\n",
133+
" \"implementation\": \"SKLEARN\",\n",
134+
" \"task_type\": \"classification\",\n",
135+
" \"tags\": {\"author\": \"Bob\"},\n",
136+
" },\n",
137+
"]\n",
138+
"\n",
139+
"for model in models:\n",
140+
" body = V1Model(**model)\n",
141+
" try:\n",
142+
" # Create a Model Metadata entry.\n",
143+
" api_response = api_instance.model_metadata_service_create_model_metadata(body)\n",
144+
" pprint(api_response)\n",
145+
" except ApiException as e:\n",
146+
" print(\n",
147+
" \"Exception when calling ModelMetadataServiceApi->model_metadata_service_create_model_metadata: %s\\n\"\n",
148+
" % e\n",
149+
" )"
150+
]
151+
},
152+
{
153+
"cell_type": "markdown",
154+
"metadata": {},
155+
"source": [
156+
"## List all model metadata entries"
157+
]
158+
},
159+
{
160+
"cell_type": "code",
161+
"execution_count": null,
162+
"metadata": {},
163+
"outputs": [],
164+
"source": [
165+
"try:\n",
166+
" # List Model Metadata entries.\n",
167+
" api_response = api_instance.model_metadata_service_list_model_metadata()\n",
168+
" pprint(api_response)\n",
169+
"except ApiException as e:\n",
170+
" print(\n",
171+
" \"Exception when calling ModelMetadataServiceApi->model_metadata_service_list_model_metadata: %s\\n\"\n",
172+
" % e\n",
173+
" )"
174+
]
175+
},
176+
{
177+
"cell_type": "markdown",
178+
"metadata": {},
179+
"source": [
180+
"## Filter model metadata entries"
181+
]
182+
},
183+
{
184+
"cell_type": "code",
185+
"execution_count": null,
186+
"metadata": {},
187+
"outputs": [],
188+
"source": [
189+
"# uri = 'uri_example' # str | (optional)\n",
190+
"# name = 'name_example' # str | (optional)\n",
191+
"# version = 'version_example' # str | (optional)\n",
192+
"# implementation = 'implementation_example' # str | (optional)\n",
193+
"# task_type = 'task_type_example' # str | (optional)\n",
194+
"# model_type = 'model_type_example' # str | (optional)\n",
195+
"\n",
196+
"try:\n",
197+
" # List Model Metadata entries.\n",
198+
" api_response = api_instance.model_metadata_service_list_model_metadata(name=\"beta\")\n",
199+
" print(\"Filter by name=beta\")\n",
200+
" pprint(api_response)\n",
201+
"except ApiException as e:\n",
202+
" print(\n",
203+
" \"Exception when calling ModelMetadataServiceApi->model_metadata_service_list_model_metadata: %s\\n\"\n",
204+
" % e\n",
205+
" )"
206+
]
207+
},
208+
{
209+
"cell_type": "markdown",
210+
"metadata": {},
211+
"source": [
212+
"## Modify a metadata entry"
213+
]
214+
},
215+
{
216+
"cell_type": "code",
217+
"execution_count": null,
218+
"metadata": {},
219+
"outputs": [],
220+
"source": [
221+
"try:\n",
222+
" # List Model Metadata entries.\n",
223+
" api_response = api_instance.model_metadata_service_list_model_metadata(uri=\"gs://test-model-alpha-v1.0.0\")\n",
224+
" print(\"Before update:\")\n",
225+
" pprint(api_response)\n",
226+
"except ApiException as e:\n",
227+
" print(\n",
228+
" \"Exception when calling ModelMetadataServiceApi->model_metadata_service_list_model_metadata: %s\\n\"\n",
229+
" % e\n",
230+
" )\n",
231+
"\n",
232+
"\n",
233+
"model = V1Model(\n",
234+
" uri=\"gs://test-model-alpha-v1.0.0\",\n",
235+
" name=\"alpha\",\n",
236+
" version=\"v1.0.0\",\n",
237+
" implementation=\"XGBOOST\",\n",
238+
" task_type=\"regression\",\n",
239+
" tags={\n",
240+
" \"source\": \"https://github.com/some-other-repo\",\n",
241+
" \"an arbitrary tag\": \"true\",\n",
242+
" \"an additional tag\": \"123\",\n",
243+
" },\n",
244+
")\n",
245+
"try:\n",
246+
" # Update a Model Metadata entry.\n",
247+
" api_response = api_instance.model_metadata_service_update_model_metadata(model)\n",
248+
" pprint(api_response)\n",
249+
"except ApiException as e:\n",
250+
" print(\"Exception when calling ModelMetadataServiceApi->model_metadata_service_update_model_metadata: %s\\n\" % e)\n",
251+
" \n",
252+
"try:\n",
253+
" # List Model Metadata entries.\n",
254+
" api_response = api_instance.model_metadata_service_list_model_metadata(uri=\"gs://test-model-alpha-v1.0.0\")\n",
255+
" print(\"After update:\")\n",
256+
" pprint(api_response)\n",
257+
"except ApiException as e:\n",
258+
" print(\n",
259+
" \"Exception when calling ModelMetadataServiceApi->model_metadata_service_list_model_metadata: %s\\n\"\n",
260+
" % e\n",
261+
" )"
262+
]
263+
},
264+
{
265+
"cell_type": "markdown",
266+
"metadata": {},
267+
"source": [
268+
"## Get runtime information for a model"
269+
]
270+
},
271+
{
272+
"cell_type": "code",
273+
"execution_count": null,
274+
"metadata": {},
275+
"outputs": [],
276+
"source": [
277+
"try:\n",
278+
" # List Runtime Metadata for all deployments associated with a model.\n",
279+
" api_response = api_instance.model_metadata_service_list_runtime_metadata_for_model(model_uri=\"gs://kfserving-samples/models/sklearn/iris\", deployment_status=\"Running\")\n",
280+
" pprint(api_response)\n",
281+
"except ApiException as e:\n",
282+
" print(\"Exception when calling ModelMetadataServiceApi->model_metadata_service_list_runtime_metadata_for_model: %s\\n\" % e)"
283+
]
284+
},
285+
{
286+
"cell_type": "markdown",
287+
"metadata": {},
288+
"source": [
289+
"## Get model information for a deployment"
290+
]
291+
},
292+
{
293+
"cell_type": "code",
294+
"execution_count": null,
295+
"metadata": {},
296+
"outputs": [],
297+
"source": [
298+
"try:\n",
299+
" # List Runtime Metadata for all deployments associated with a model.\n",
300+
" api_response = api_instance.model_metadata_service_list_runtime_metadata_for_model(deployment_name=\"iris\", deployment_namespace=\"seldon\")\n",
301+
" pprint(api_response)\n",
302+
"except ApiException as e:\n",
303+
" print(\"Exception when calling ModelMetadataServiceApi->model_metadata_service_list_runtime_metadata_for_model: %s\\n\" % e)"
304+
]
305+
},
306+
{
307+
"cell_type": "code",
308+
"execution_count": null,
309+
"metadata": {},
310+
"outputs": [],
311+
"source": []
312+
}
313+
],
314+
"metadata": {
315+
"kernelspec": {
316+
"display_name": "Python 3",
317+
"language": "python",
318+
"name": "python3"
319+
},
320+
"language_info": {
321+
"codemirror_mode": {
322+
"name": "ipython",
323+
"version": 3
324+
},
325+
"file_extension": ".py",
326+
"mimetype": "text/x-python",
327+
"name": "python",
328+
"nbconvert_exporter": "python",
329+
"pygments_lexer": "ipython3",
330+
"version": "3.8.5"
331+
}
332+
},
333+
"nbformat": 4,
334+
"nbformat_minor": 4
335+
}

0 commit comments

Comments
 (0)