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的核心功能(模型服务部署)的使用测试。接下来,我们会深入了解一下,如何打包模型服务。