推理图¶
Seldon Core 使用 k8s 自定义资源 SeldonDeployment 扩展 Kubernetes,您可以在其中定义由 Seldon 管理的模型和其他组件组成的运行时序推理图。
一个 SeldonDeployment 为 JSON 或 YAML 文件,它允许你定义一张组件镜像图,以及运行在(Kubernetes PodTemplateSpec)模式下的镜像的资源。如下示例:
最小单元的 YAML 模型示例
apiVersion: machinelearning.seldon.io/v1alpha2
kind: SeldonDeployment
metadata:
name: seldon-model
spec:
name: test-deployment
predictors:
- componentSpecs:
- spec:
containers:
- name: classifier
image: seldonio/mock_classifier:1.0
graph:
children: []
endpoint:
type: REST
name: classifier
type: MODEL
name: example
replicas: 1
关键组件包括:
预估列表,每个都包含特定数量的副本
每个都包含相应的推理图及部署信息。想在生产和 Canary 之间区分和控制流量是,多个推理图就会至关重要
预估器的
componentSpecs。每个componentSpec都是 Kubernetes 的PodTemplateSpec,Seldon 将构建到 Kubernetes Deployment。在这里贴出推理图所需镜像、依赖,如:Volumes, ImagePullSecrets, Resources Requests 等。描述组件的组合方式
带有前置和后置处理的推理图示例¶
面我们展示了一个具有稍微复杂的图形结构的示例。我们正在定义预处理器和后处理器组件
apiVersion: machinelearning.seldon.io/v1alpha2
kind: SeldonDeployment
metadata:
name: seldon-model
spec:
name: test-deployment
predictors:
- componentSpecs:
- spec:
containers:
- name: step_one
image: seldonio/step_one:1.0
- name: step_two
image: seldonio/step_two:1.0
- name: step_three
image: seldonio/step_three:1.0
graph:
name: step_one
endpoint:
type: REST
type: MODEL
children:
name: step_two
endpoint:
type: REST
type: MODEL
children:
name: step_three
endpoint:
type: REST
type: MODEL
children: []
name: example
replicas: 1
更复杂的推理图¶
可以使用 ROUTERS, COMBINERS 等其他组件构造更复杂的推理图,可在示例章节找到这些特殊用例。
通过 GoLang 源码 学习所有类型¶
根据 Kubernetes Seldon Deployment GoLang 类型文件 学习 SeldonDeployment YAML 定义。
镜像 UserIds¶
我们提供一个环境变量 DEFAULT_USER_ID (通过 helm chart .Values.defaultUserID 设置) ,它允许镜像在此 User Id 下运行。默认 8888。如果想在特定的 Pod/Container 下(非全局),可通过以下方式设置:
apiVersion: machinelearning.seldon.io/v1
kind: SeldonDeployment
metadata:
name: seldon-model
spec:
name: test-deployment
predictors:
- componentSpecs:
- spec:
containers:
- image: seldonio/mock_classifier_rest:1.3
name: classifier
securityContext:
runAsUser: 1000
graph:
children: []
endpoint:
type: REST
name: classifier
type: MODEL
name: example
replicas: 1
上述示例使传统容器以用户 Id 1000 运行。我们建议所有容器都使用非 root。在 Openshift 集群中,通常会强制自动执行此操作。