Bootstrap

Seldon使用(一):简介及入门

Seldon是一个开源的,基于kubernetes的模型部署服务。目前支持多种主流的机器学习及深度学习框架,包括Xgboost, Tensorflow, Pytorch等,支持多种语言(包括python,java等)的模型代码打包。

对于生产线上部署模型服务,Seldon可以支持大规模的集群部署,灰度及金丝雀部署等,内置支持监控和日志等常规线上服务需求,同时支持异常检测及模型解释等机器学习线上服务需求。

Seldon具有如此丰富的功能,值得上手使用及深入了解其产品设计理念及实现逻辑。首先,我们从使用入门。

如何部署Seldon

由于Seldon是基于kubernetes的,所以部署之前需要满足以下条件:

  • kubernetes集群环境,且kubernetes版本需不低于1.12

  • Helm 版本不低于3.0

官方推荐方式,可以使用helm或者kustomize。这里采用helm的方式,执行如下命令:

# 创建namespace
kubectl create namespace seldon-system
helm install seldon-core seldon-core-operator \
    --repo https://storage.googleapis.com/seldon-charts \
    --set usageMetrics.enabled=true \
    --namespace seldon-system

该安装,将在kubernetes集群上创建seldondeployments(CRD)和seldon-controller-manager(Operator)

其中,seldondeployments用于定义一个模型服务部署任务,而seldon-controller-manager用于监听和管理所有seldondeployments,包括创建及销毁pod,滚动更新和升级,以及服务路由(service相关)。

如何部署模型服务

完成seldon部署后,seldon管理服务(即seldon-controller-manager)便开始响应模型服务的部署需求。

这个部署需求就是seldondeployments(即CRD资源),即seldon管理服务会监听kubernetes集群内的CRD资源。我们只需要向kubernetes创建一个CRD资源,即可完成一次模型部署服务。

接下来,我们使用示例模型服务创建一个CRD资源,demo.yaml内容如下:

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
    graph:
      children: []
      endpoint:
        type: REST
      name: classifier
      type: MODEL
    name: example
    replicas: 1

yaml文件说明:

  • kind指定CRD资源类型是SeldonDeployment

  • predictors指定模型服务如何调用。Seldon支持简单的单容器模型,以及服务编排(即由多个容器模型组成graph实现业务模型)。该demo为单模型服务,所以只包含一个container

  • image指定模型服务的镜像,该镜像内包含模型服务代码。(后面的文章会深入介绍)

  • replicas指定模型服务的副本数量

然后执行如下命令:

kubectl create -f demo.yaml

查看创建的CRD资源

kubectl describe sdep seldon-model

Name:         seldon-model
Namespace:    seldon-system
API Version:  machinelearning.seldon.io/v1
Kind:         SeldonDeployment
Spec:
  Name:  test-deployment
  Predictors:
    Component Specs:
      Spec:
        Containers:
          Image:  seldonio/mock-classiffier-rest:1.3
          Name:   classifier
    Graph:
      Children:
      Endpoint:
        Type:  REST
      Name:    classifier
      Type:    MODEL
    Name:      example
    Replicas:  1
Status:
  Address:
    URL:  http://seldon-model-example.seldon-system.svc.cluster.local:8000/api/v1.0/predictions
  Deployment Status:
    Seldon - Model - Example - 0 - Classifier:
      Available Replicas:  1
      Replicas:            1
  Replicas:                1
  State:              Available

kubectl查看相关的pod及service

# kubectl get pods  --all-namespaces |grep seldon-model
seldon-system             seldon-model-example-0-classifier-7d59884ff7-rp2dq       2/2     Running

# kubectl get svc  --all-namespaces |grep seldon-model
seldon-system             seldon-model-example                    ClusterIP   10.254.30.17    8000/TCP,5001/TCP
seldon-system             seldon-model-example-classifier         ClusterIP   10.254.76.181   9000/TCP

模型服务部署成功后,可向service ip发送请求,测试模型推理。命令如下:

curl -s -d '{"data": {"ndarray":[[1.0, 2.0, 5.0]]}}'  \
     -X POST  http://10.254.30.17:8000/api/v1.0/predictions  \
     -H "Content-Type: application/json"
# 返回
{"data":{"names":["proba"],"ndarray":[[0.43782349911420193]]},"meta":{}}

至此,我们完成

了seldon的核心功能(模型服务部署)的使用测试。接下来,我们会深入了解一下,如何打包模型服务。