当前位置: 首页 > article >正文

Seldon Core大模型部署详解

一 Seldon Core定义

Seldon Core 目前是机器学习模型部署领域最受欢迎的方案之一,由 Seldon 公司开源和维护,旨在为不同框架下训练出来的模型(Tensorflow,Pytorch,SKLearn,XGBoost)提供一套相对统一的部署方式,支持多种不同类型模型的Inference Server。

seldoncore将ML模型(Tensorflow、Pytorch、H2o等)或语言包装器(Python、Java等)转换为生产REST/GRPC微服务。

Seldon可以扩展到数千个生产机器学习模型,并提供现成的高级机器学习功能,包括高级指标、请求日志记录、解释器、异常值检测器、A/B测试、金丝雀等。

二 功能特点

  1. 多语言支持:支持多种编程语言和机器学习框架,如 Python、R、TensorFlow、PyTorch、Scikit-learn 等。
  2. 可扩展性:利用 Kubernetes 的可扩展性,支持大规模的模型部署和管理。
  3. A/B 测试和多臂赌博机:支持 A/B 测试和多臂赌博机实验,帮助优化模型性能。
  4. 模型监控:提供详细的监控和日志功能,帮助跟踪模型的性能和健康状况。
  5. 安全性:支持身份验证和授权,确保模型和数据的安全。
  6. 弹性伸缩:根据负载自动扩展和缩减模型实例,确保高效的资源利用。
  7. 集成性:与 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 的部署方案主要包括以下步骤:

  1. 安装 Kubernetes 集群:确保 Kubernetes 集群已经安装并运行。
  2. 安装 Seldon Core:在 Kubernetes 集群中安装 Seldon Core。
  3. 创建 SeldonDeployment 资源:定义并创建 SeldonDeployment 资源,描述模型的部署规范。
  4. 部署模型:使用 kubectl 命令将 SeldonDeployment 资源应用到 Kubernetes 集群中。
  5. 访问模型服务:通过 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-model
  namespace: default
spec:
  predictors:
  - name: default
    replicas: 1
    graph:
      name: classifier
      implementation: SKLEARN_SERVER
      modelUri: gs://seldon-models/sklearn/iris
    name: 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]]}}'

五 工作流程

  1. 模型打包:将机器学习模型打包为 Docker 镜像,并推送到容器镜像仓库。
  2. 定义 SeldonDeployment:创建一个 SeldonDeployment 资源,定义模型的部署规范。
  3. 部署模型:使用 kubectl 命令将 SeldonDeployment 资源应用到 Kubernetes 集群中。
  4. Seldon Operator 监控:Seldon Operator 监控 SeldonDeployment 资源的变化,并创建相应的 Kubernetes 资源。
  5. 模型服务启动:模型服务器容器启动,加载模型并开始处理预测请求。
  6. 监控和日志:Metrics Server 收集模型的性能指标,日志工具记录模型的运行日志。
  7. 扩展和缩减:根据负载自动扩展和缩减模型实例,确保高效的资源利用。

六 使用方法

使用 Seldon Core 通常涉及以下步骤:

  1. 安装 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
    
  2. 创建 SeldonDeployment 资源: 创建一个 YAML 文件,定义模型的部署规范。例如,以下是一个简单的 SeldonDeployment 示例:

    apiVersion: machinelearning.seldon.io/v1
    kind: SeldonDeployment
    metadata:
      name: seldon-model
      namespace: default
    spec:
      predictors:
      - name: default
        replicas: 1
        graph:
          name: classifier
          implementation: SKLEARN_SERVER
          modelUri: gs://seldon-models/sklearn/iris
        name: default
    
  3. 部署模型: 使用 kubectl 命令将 SeldonDeployment 资源应用到 Kubernetes 集群中:

    kubectl apply -f seldon-deployment.yaml
    
  4. 访问模型服务: 部署完成后,可以通过 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分布式跟踪,可以深入了解跨微服务跃点的延迟。
    • 通过一致的安全和更新政策维护安全、可靠和强健的系统。

缺点

  1. 复杂性:需要一定的 Kubernetes 知识和经验,初学者可能需要一些时间来熟悉。
  2. 资源开销:在大规模部署时,可能需要较多的计算和存储资源。
  3. 调试难度:分布式系统的调试和故障排查可能比较复杂。

八 更多信息

Seldon Core 是一个强大的平台,通过提供多语言支持、可扩展性、模型监控和安全性等功能,显著提高了机器学习模型的部署和管理效率。随着机器学习技术的发展,Seldon Core 将继续在大规模模型部署和应用中发挥重要作用。更多信息和详细文档可以参考 Seldon Core 官方文档。


http://www.kler.cn/a/388781.html

相关文章:

  • 【Qt】Macbook M1下载安装
  • learn-F12 Performance(性能)前端性能分析(LCP,CLS,INP)
  • Node.Js+Knex+MySQL增删改查的简单示例(Typescript)
  • Rust:GUI 开源框架
  • springboot参数校验
  • 手动实现h5移动端点击全屏按钮横屏展示图片,左右滑动切换,处理页面会随着手指滑动问题
  • 如何在vscode中安装git详细新手教程
  • 快速上手 muduo
  • 【iOS】知乎日报第三周总结
  • 金融市场中的量化分析:正大科技如何赋能投资者决策
  • 期权懂|你知道期权策略有哪些核心策略吗?
  • 保护Kubernetes免受威胁:容器安全的有效实践
  • 力扣力扣力:动态规划入门(1)
  • solo博客使用非docker方式进行https部署
  • Android 文件带进度的下载功能实现与封装
  • 2024年11月6日Github流行趋势
  • 【计网不挂科】计算机网络期末考试——【选择题&填空题&判断题&简述题】试卷(2)
  • 蓝桥杯:编程爱好者的试炼场
  • 运维的目标管理:以业务为核心,驱动运维价值最大化
  • 实时高效,全面测评快递100API的物流查询功能
  • 基于单片机洗衣机控制器的设计(论文+源码)
  • BMC运维管理:IPMI实现服务器远控制
  • 笔记整理—linux驱动开发部分(10)input子系统与相关框架
  • 计算机毕业设计 | SpringBoot社区物业管理系统(附源码)
  • 使用Golang实现开发中常用的【实例设计模式】
  • Android下的系统调用 (syscall),内联汇编syscall