Seldon 是一个开源的,基于 kubernetes 的模型部署服务。目前支持多种主流的机器学习及深度学习框架,包括 Xgboost, Tensorflow, Pytorch 等,支持多种语言(包括 python,java 等)的模型代码打包。
对于生产线上部署模型服务,Seldon 可以支持大规模的集群部署,灰度及金丝雀部署等,内置支持监控和日志等常规线上服务需求,同时支持异常检测及模型解释等机器学习线上服务需求。
Seldon 具有如此丰富的功能,值得上手使用及深入了解其产品设计理念及实现逻辑。首先,我们从使用入门。
如何部署 Seldon
由于 Seldon 是基于 kubernetes 的,所以部署之前需要满足以下条件:
官方推荐方式,可以使用 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 的核心功能(模型服务部署)的使用测试。接下来,我们会深入了解一下,如何打包模型服务。
评论 (1 条评论)