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