推理图

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 集群中,通常会强制自动执行此操作。