一 Seldon Core定义
Seldon Core 目前是机器学习模型部署领域最受欢迎的方案之一,由 Seldon 公司开源和维护,旨在为不同框架下训练出来的模型(Tensorflow,Pytorch,SKLearn,XGBoost)提供一套相对统一的部署方式,支持多种不同类型模型的Inference Server。
seldoncore将ML模型(Tensorflow、Pytorch、H2o等)或语言包装器(Python、Java等)转换为生产REST/GRPC微服务。
Seldon可以扩展到数千个生产机器学习模型,并提供现成的高级机器学习功能,包括高级指标、请求日志记录、解释器、异常值检测器、A/B测试、金丝雀等。
二 功能特点
- 多语言支持:支持多种编程语言和机器学习框架,如 Python、R、TensorFlow、PyTorch、Scikit-learn 等。
- 可扩展性:利用 Kubernetes 的可扩展性,支持大规模的模型部署和管理。
- A/B 测试和多臂赌博机:支持 A/B 测试和多臂赌博机实验,帮助优化模型性能。
- 模型监控:提供详细的监控和日志功能,帮助跟踪模型的性能和健康状况。
- 安全性:支持身份验证和授权,确保模型和数据的安全。
- 弹性伸缩:根据负载自动扩展和缩减模型实例,确保高效的资源利用。
- 集成性:与 CI/CD 工具、监控工具(如 Prometheus 和 Grafana)和日志工具(如 ELK Stack)无缝集成。
三 关键组件和底层原理
Seldon Core 的底层原理基于 Kubernetes 和容器化技术。它通过定义自定义资源(Custom Resource Definitions, CRDs)来扩展 Kubernetes API,使得用户可以使用 Kubernetes 原生的方式来管理机器学习模型,以下是 Seldon Core 的关键组件和原理:
1. SeldonDeployment CRD
Seldon Core 通过定义 SeldonDeployment CRD 来描述机器学习模型的部署规范。SeldonDeployment CRD 包含了模型的镜像、资源需求、服务配置等信息。
- apiVersion:定义 CRD 的 API 版本。
- kind:定义资源类型,这里是 SeldonDeployment。
- metadata:包含资源的元数据,如名称和命名空间。
- spec:定义模型的部署规范,包括预测器、图结构、模型 URI 等。
2. Seldon Operator
Seldon Operator 是一个控制器,负责监控 SeldonDeployment 资源的变化,并根据定义的规范创建和管理相应的 Kubernetes 资源(如 Pods、Services 等)。Seldon Operator 的主要职责包括:
- 监控 SeldonDeployment 资源的创建、更新和删除事件。
- 根据 SeldonDeployment 资源的定义,创建和管理相应的 Kubernetes 资源。
- 确保模型服务的高可用性和扩展性。
3. Model Server
Model Server 是容器化的模型服务器,负责加载和运行机器学习模型,处理预测请求。Seldon Core 支持多种模型服务器实现,如 TensorFlow Serving、SKLearn Server、XGBoost Server 等。
- 模型加载:从指定的存储位置加载模型。
- 预测处理:接收预测请求,调用模型进行预测,并返回预测结果。
4. Metrics Server
Metrics Server 收集和暴露模型的性能指标,供监控工具(如 Prometheus 和 Grafana)使用。常见的性能指标包括请求延迟、吞吐量、错误率等。
- 指标收集:收集模型服务的性能指标。
- 指标暴露:通过 Prometheus 格式暴露指标,供监控工具使用。
5. Router
Router 用于实现 A/B 测试和多臂赌博机实验,路由请求到不同的模型版本。Router 的主要职责包括:
- 请求路由:根据配置的路由策略,将请求分发到不同的模型版本。
- 实验管理:管理 A/B 测试和多臂赌博机实验,收集实验结果。
四 Seldon Core 的部署方案
Seldon Core 的部署方案主要包括以下步骤:
- 安装 Kubernetes 集群:确保 Kubernetes 集群已经安装并运行。
- 安装 Seldon Core:在 Kubernetes 集群中安装 Seldon Core。
- 创建 SeldonDeployment 资源:定义并创建 SeldonDeployment 资源,描述模型的部署规范。
- 部署模型:使用
kubectl
命令将 SeldonDeployment 资源应用到 Kubernetes 集群中。 - 访问模型服务:通过 Kubernetes 服务访问模型的预测接口。
1. 安装 Kubernetes 集群
可以使用多种方式安装 Kubernetes 集群,如 Minikube、Kubeadm、Google Kubernetes Engine(GKE)等。以下是使用 Minikube 安装 Kubernetes 集群的示例:
minikube start
2. 安装 Seldon Core
在 Kubernetes 集群中安装 Seldon Core。以下是使用 Helm 安装 Seldon Core 的示例:
kubectl create namespace seldon-system
kubectl apply -f https://raw.githubusercontent.com/SeldonIO/seldon-core/master/helm-charts/seldon-core-operator/templates/crds.yaml
helm install seldon-core seldon-core-operator --namespace seldon-system --repo https://storage.googleapis.com/seldon-charts
3. 创建 SeldonDeployment 资源
创建一个 YAML 文件,定义模型的部署规范。例如,以下是一个简单的 SeldonDeployment 示例:
apiVersion: machinelearning.seldon.io/v1
kind: SeldonDeployment
metadata:name: seldon-modelnamespace: default
spec:predictors:- name: defaultreplicas: 1graph:name: classifierimplementation: SKLEARN_SERVERmodelUri: gs://seldon-models/sklearn/irisname: default
4. 部署模型
使用 kubectl
命令将 SeldonDeployment 资源应用到 Kubernetes 集群中:
kubectl apply -f seldon-deployment.yaml
5. 访问模型服务
部署完成后,可以通过 Kubernetes 服务访问模型的预测接口。例如,使用 curl
命令发送预测请求:
curl -X POST http://<NODE_IP>:<NODE_PORT>/api/v1.0/predictions -d '{"data": {"ndarray": [[5.1, 3.5, 1.4, 0.2]]}}'
五 工作流程
- 模型打包:将机器学习模型打包为 Docker 镜像,并推送到容器镜像仓库。
- 定义 SeldonDeployment:创建一个 SeldonDeployment 资源,定义模型的部署规范。
- 部署模型:使用
kubectl
命令将 SeldonDeployment 资源应用到 Kubernetes 集群中。 - Seldon Operator 监控:Seldon Operator 监控 SeldonDeployment 资源的变化,并创建相应的 Kubernetes 资源。
- 模型服务启动:模型服务器容器启动,加载模型并开始处理预测请求。
- 监控和日志:Metrics Server 收集模型的性能指标,日志工具记录模型的运行日志。
- 扩展和缩减:根据负载自动扩展和缩减模型实例,确保高效的资源利用。
六 使用方法
使用 Seldon Core 通常涉及以下步骤:
-
安装 Seldon Core:
kubectl create namespace seldon-system kubectl apply -f https://raw.githubusercontent.com/SeldonIO/seldon-core/master/helm-charts/seldon-core-operator/templates/crds.yaml helm install seldon-core seldon-core-operator --namespace seldon-system --repo https://storage.googleapis.com/seldon-charts
-
创建 SeldonDeployment 资源: 创建一个 YAML 文件,定义模型的部署规范。例如,以下是一个简单的 SeldonDeployment 示例:
apiVersion: machinelearning.seldon.io/v1 kind: SeldonDeployment metadata:name: seldon-modelnamespace: default spec:predictors:- name: defaultreplicas: 1graph:name: classifierimplementation: SKLEARN_SERVERmodelUri: gs://seldon-models/sklearn/irisname: default
-
部署模型: 使用
kubectl
命令将 SeldonDeployment 资源应用到 Kubernetes 集群中:kubectl apply -f seldon-deployment.yaml
-
访问模型服务: 部署完成后,可以通过 Kubernetes 服务访问模型的预测接口。例如,使用
curl
命令发送预测请求:curl -X POST http://<NODE_IP>:<NODE_PORT>/api/v1.0/predictions -d '{"data": {"ndarray": [[5.1, 3.5, 1.4, 0.2]]}}'
七 优缺点
优点:
-
Seldon Core的安装量超过200万台,可用于跨组织管理机器学习模型的大规模部署,其主要优点包括:
- 使用pre-packaged推理服务器、自定义服务器或语言包装器来容器化ML模型的简单方法。
- 现成的端点可以通过swaggerui、Seldon Python客户端或Curl/GRPCurl进行测试。
- 云不可知论者,在AWS EKS、azureaks、Google GKE、阿里云、数字海洋和Openshift上进行了测试。
- 由预测器、变压器、路由器、组合器等组成的强大而丰富的推理图。
- 元数据来源,以确保每个模型可以追溯到其各自的培训系统、数据和指标。
- 与普罗米修斯和格拉法纳集成的高级可定制指标。
- 通过模型input-output请求实现完全可审计性(日志与Elasticsearch集成)
- 通过集成到Jaeger的Microservice分布式跟踪,可以深入了解跨微服务跃点的延迟。
- 通过一致的安全和更新政策维护安全、可靠和强健的系统。
缺点:
- 复杂性:需要一定的 Kubernetes 知识和经验,初学者可能需要一些时间来熟悉。
- 资源开销:在大规模部署时,可能需要较多的计算和存储资源。
- 调试难度:分布式系统的调试和故障排查可能比较复杂。
八 更多信息
Seldon Core 是一个强大的平台,通过提供多语言支持、可扩展性、模型监控和安全性等功能,显著提高了机器学习模型的部署和管理效率。随着机器学习技术的发展,Seldon Core 将继续在大规模模型部署和应用中发挥重要作用。更多信息和详细文档可以参考 Seldon Core 官方文档。