模型和元数据发布¶
示例¶
基础示例¶
元数据在框架中的实现¶
模型元数据¶
在 Seldon 中,你可以轻易的为模型添加元数据。
预封装模型服务器¶
要添加元数据到预封装模型服务器中,只需简单的将 metadata.yaml 添加到存储你模型的 S3 存储桶中:
name: my-model
versions: [my-model/v1]
platform: platform-name
inputs:
- messagetype: tensor
schema:
names: [a, b, c, d]
shape: [4]
outputs:
- messagetype: tensor
schema:
shape: [ 1 ]
custom:
author: seldon-dev
extra: information
查看基于 MinIO 的 SKLearn Server 示例获取更多信息。
Python 语言封装¶
你可以实现 init_metadata 方法来添加元数据到你自定义的 Python 模型:
class Model:
...
def init_metadata(self):
meta = {
"name": "my-model-name",
"versions": ["my-model-version-01"],
"platform": "seldon",
"inputs": [
{
"messagetype": "tensor",
"schema": {"names": ["a", "b", "c", "d"], "shape": [4]},
}
],
"outputs": [{"messagetype": "tensor", "schema": {"shape": [1]}}],
"custom": {"author": "seldon-dev", "extra": "information"},
}
return meta
查看 Python wrapper 文档获取更多信息,以及参考包含元数据的模型基础示例 notebook。
通过环境变量覆盖¶
也可定义 MODEL_METADATA 有更高优先级的环境变量。
apiVersion: machinelearning.seldon.io/v1
kind: SeldonDeployment
metadata:
name: seldon-model
spec:
name: test-deployment
predictors:
- componentSpecs:
- spec:
containers:
- name: my-model
image: ...
env:
- name: MODEL_METADATA
value: |
---
name: my-model-name
versions: [ my-model-version ]
platform: seldon
inputs:
- messagetype: tensor
schema:
names: [a, b, c, d]
shape: [4]
outputs:
- messagetype: tensor
schema:
shape: [ 1 ]
custom:
author: seldon-dev
extra: information
graph:
name: my-model
...
name: example
replicas: 1
元数据开发¶
模型元数据允许你在你的图中为每个组件(节点)定义特殊的元数据。
新的编排引擎会自动探测所有节点的元数据并为你的图派生全局的 inputs 和 outputs。
然后,他会在你的发布中将所有节点的元数据暴露在单一节点的 /api/v1.0/metadata/。
返回值示例:
{
"name": "example",
"models": {
"node-one": {
"name": "node-one",
"platform": "seldon",
"versions": ["generic-node/v0.3"],
"inputs": [
{"messagetype": "tensor", "schema": {"names": ["one-input"]}}
],
"outputs": [
{"messagetype": "tensor", "schema": {"names": ["one-output"]}}
],
"custom": {"author": "seldon-dev", "extra": "information"}
},
"node-two": {
"name": "node-two",
"platform": "seldon",
"versions": ["generic-node/v0.3"],
"inputs": [
{"messagetype": "tensor", "schema": {"names": ["two-input"]}}
],
"outputs": [
{"messagetype": "tensor", "schema": {"names": ["two-output"]}}
],
"custom": {"author": "seldon-dev", "extra": "information"}
}
},
"graphinputs": [
{"messagetype": "tensor", "schema": {"names": ["one-input"]}}
],
"graphoutputs": [
{"messagetype": "tensor", "schema": {"names": ["two-output"]}}
]
}
查看示例 notebook 获取更多信息。
元数据节点¶
在部署节点可以通过 GET 请求 /api/v1.0/metadata/{MODEL_NAME} 获取模型元数据。
返回值示例:
{
"name": "my-model",
"versions": ["my-model/v1"],
"platform": "platform-name",
"inputs": [{"messagetype": "tensor", "schema": {"shape": [1, 5]}}],
"outputs": [{"messagetype": "tensor", "schema": {"shape": [1, 3]}}],
"custom": {"author": "seldon-dev", "extra": "information"}
}
深入:SeldonMessage 和 kfserving 元数据参考¶
可为你模型的元数据 inputs/outputs 通过两种格式进行定义:
v1格式,与当前SeldonMessage格式相近。v2格式,是面向未来的,完全与 kfserving dataplane proposal 兼容。
通常大多数字段可通过 kfserving dataplane proposal 来定义模型元数据,你也可以定义额外的 custom 参数,它允许你定义任何你觉得有价值的内容。custom 字段是以字符串 string 保存的 kv 结构的字典。
查看 元数据架构和验证 notebook。
SeldonMessage 元数据¶
ndarray 输入/输出¶
name: my-model-name
versions: [ my-model-version-01 ]
platform: seldon
inputs:
- messagetype: ndarray
schema:
names: [a, b]
shape: [ 2, 2 ]
outputs:
- messagetype: ndarray
schema:
shape: [ 1 ]
custom:
author: seldon-dev
extra: information
这个元数据标识模型需要按照以下两种输入是可验证的:
{"data": {"names": ["a", "b"], "ndarray": [[1, 2], [3, 4]]}}
注意:针对 tensor 和 tftensor 消息类型的格式相同。
jsonData input/output¶
name: my-model-name
versions: [ my-model-version-01 ]
platform: seldon
inputs:
- messagetype: jsonData
schema:
type: object
properties:
my-names:
type: array
items:
type: string
my-data:
type: array
items:
type: number
format: double
outputs:
- messagetype: ndarray
schema:
shape: [ 1 ]
custom:
author: seldon-dev
extra: information
模型输入示例:
{"jsonData": {"my-names": ["a", "b", "c"], "my-data": [1.0, 4.2, 3.14]}}
schema 字段可选,并再结构上是自由的。
注意:正如您所看到的,您可以混合不同类型的输入和输出!
strData 输入/输出¶
name: my-model-name
versions: [ my-model-version-01 ]
platform: seldon
inputs:
- messagetype: strData
outputs:
- messagetype: strData
custom:
author: seldon-dev
extra: information
示例模型输入:
{"strData": "some test input"}
自定义输入/输出格式¶
您还可以指定您的自定义 messagetype。在这种情况下,您在 schema 下定义的字段没有限制。这对 raw 方法可能有用。
name: my-model-name
versions: [ my-model-version-01 ]
platform: seldon
inputs:
- messagetype: customData
schema:
my-names: ["a", "b", "c"]
outputs:
- messagetype: tensor
schema:
shape: [ 1 ]
custom:
author: seldon-dev
extra: information
kfserving TensorMetadata¶
你可以轻易的为模型定义与 kfserving dataplane proposal 兼容的元数据。
$metadata_model_response =
{
"name" : $string,
"versions" : [ $string, ... ], // optional
"platform" : $string,
"inputs" : [ $metadata_tensor, ... ],
"outputs" : [ $metadata_tensor, ... ]
}
与
$metadata_tensor =
{
"name" : $string,
"datatype" : $string,
"shape" : [ $number, ... ]
}
示例定义
name: my-model-name
versions: [ my-model-version-01 ]
platform: seldon
inputs:
- datatype: BYTES
name: input
shape: [ 1, 4 ]
outputs:
- datatype: BYTES
name: output
shape: [ 3 ]