写点什么

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

用户头像
托内多
关注
发布于: 2021 年 03 月 21 日

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

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


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

如何部署 Seldon

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

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

  • Helm 版本不低于 3.0


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

# 创建namespacekubectl create namespace seldon-systemhelm 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/v1kind: SeldonDeploymentmetadata:  name: seldon-modelspec:  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-modelNamespace:    seldon-systemAPI Version:  machinelearning.seldon.io/v1Kind:         SeldonDeploymentSpec:  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:  1Status:  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-modelseldon-system             seldon-model-example-0-classifier-7d59884ff7-rp2dq       2/2     Running
# kubectl get svc --all-namespaces |grep seldon-modelseldon-system seldon-model-example ClusterIP 10.254.30.17 8000/TCP,5001/TCPseldon-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 的核心功能(模型服务部署)的使用测试。接下来,我们会深入了解一下,如何打包模型服务。


发布于: 2021 年 03 月 21 日阅读数: 19
用户头像

托内多

关注

享受coding,与时俱进 2017.10.24 加入

青年不油腻,简单生活,砥砺前行

评论 (1 条评论)

发布
用户头像
求更~~
2021 年 03 月 24 日 16:21
回复
没有更多了
Seldon使用(一):简介及入门