前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >kubeflow二次开发项目

kubeflow二次开发项目

原创
作者头像
Ray刘
发布2021-12-09 20:21:34
3.9K2
发布2021-12-09 20:21:34
举报
文章被收录于专栏:TBDS & AI

背景

Datainsight 是基于kubeflow二次开发的项目。是一个专用于k8s上具备可移植性与可扩展性的机器学习工具包。目标:

  • 在不同的基础设施上轻松、可重复、可移植的部署ML 堆栈(例如,在笔记本电脑上进行试验,然后转移到本地集群或云)
  • 部署和管理松散耦合的微服务
  • 按需扩容

包含的服务:

  1. 数据准备
  2. 模型训练,
  3. 预测服务
  4. 服务管理
  5. notebook 创建和管理交互
  6. Tf-server服务容器

目标是基于K8S,构建一整套统一的机器学习平台,覆盖最主要的机器学习流程(数据->特征->建模->服务→监控),同时兼顾机器学习的实验探索阶段和正式的生产环境。

任务/目标

架构设计

chainer: 深度学习框架,基于Numpy和CuPy Python库

MPI:使用MPI来训练Tensorflow。基于消息传递的并行计算框架,MPI从数据存储节点读取需要处理的数据分配给各个计算节点=>数据处理=>数据处理

MXNet:深度学习的多层感知机为算法基础,数据集选用MNIST,用于训练和部署深度神经网络。

scikit-learn: 机器学习库:回归、聚类算法,支持向量机,随即深林,提督提升,k均值,DBScan;

XGBoost:树类算法,用于推理算法

机器学习的流程

开发和部署 ML 系统时,ML 工作流通常由几个阶段组成。因为开发 ML 系统是一个迭代过程(训练、评估、验证、训练)。我们需要评估 ML 工作流各个阶段的输出,并在必要时对模型和参数应用更改,以确保模型不断产生您需要的结果。

下面根据机器学习的阶段对应了datainsight的阶段使用到的组件,流程末尾的箭头指向流程迭代。

在实验阶段,我们将基于初始假使来开发模型,并反复测试和更新模型以产生所需的结果:

1、确定我们要ML系统解决的问题;

2、收集和分析训练ML模型所需的数据(本地、datastudio)

3、创建notebook,打开notebook选择一个ML框架和算法,并为模型的初始版本编码;

4、导入数据和训练模型(通过kale将notebook代码抓换位pipelines部署,负责解决数据依赖关系并管理pipeline生命周期)

5、调整模型超参数(用来控制算法行为的参数)以确保有效的处理和准确的结果.(工作流中最难的部分之一是为模型寻找最佳的超参数。机器学习模型的性能与超参数直接相关。超参数调优越多,得到的模型就越好)

在生产阶段,我们将部署执行以下过程的系统:

1、将数据转换为训练系统所需的格式。(确保我们的模型在训练和预测过程中行为始终一致,转换过程在实验阶段和生产阶段必须相同)

2、训练ML模型

3、服务模型以进行在线预测或以批处理模式进行

4、监督模型的性能,并将结果UI展示(带有模型详细信息、日志、yaml 的 KFServing 用户界面),方便调整或重新训练模型.

整体技术架构

核心特性:

pipelines工作流模型:可以将其当作一个有向无环图DAG。其中每个节点都被称为一个组件。组建处理真正的逻辑,比如预处理、数据清洗、模型训练等。每一个组件负责的功能不同,但有一个共同点,每个组件都是以docker镜像的方式打包,以容器的方式被运行,每个连线都代表了组件之间的input和output。

整体可以将pipeline主要划分为8个部分:

1、python sdk:notebook katib 把代码生成pipelines组件的特定语言(DSL)

2、DSL compiler: 将python代码转换成yaml 静态配置文件(DSL编译器)

3、pipeline web server:用户通过 pipeline流水线产看任务的执行信息(基础图像、命令、参数、component的名称和 id、参数的名称和值,可视化、volume、logs、pod、metadata), 收集各种数据一显示相关视图:当前正在运行的pipeline列表,pipeline执行的历史记录,有关各个pipeline运行的调试信息和执行状态等。通过查看MLMD,可以从数据读取、数据预处理、验证、训练、评估、部署等方面跟踪整个ML工作流的全部过程和信息。

4、pipeline service:后台服务,调用k8s服务从yaml配置中读取信息创建和运行

5、k8s resources:创建crds 运行pipeline

6、ML metadata service:用于监视由pipeline service 创建的k8s资源,并将这些资源的状态持久化在ML元数据服务中(存储任务流容器之间的input/output数据交互)

7、artifact storage: 用于存储的metadata和artifact。pipeline 将元数据存储在mysql】数据库中,将component存储在minio服务器等component存储中。

8、orchestration contrallers:任务编排,比如 visualizationserver或者**workflow控制器,协调任务驱动的工作流

pipelines 工作原理

流水线的定义可以分为两步:

1、第一步定义组件,组件可以从镜像开始完全自定义:

首先需要打包一个docker镜像,这个镜像事组件的依赖,每一个组件的运行,就是一个docker容器。

其次需要为其定义一个python函数,描述组件的输入输出等信息,这一定义是为了能够让流水线理解组件在流水线中的结构,有几个输入/输出节点。

2、根据定义好的组件组成流水线,在流水线中,由输入/输出关系会确定图上的边以及方向。在定义好流水线后,可以通过python中实现好的流水线客户端提交到系统中运行。

Pipeline的整个架构分为5个部分:

1、ScheduledWorkflow CRD扩展了argo proj/argo的workflow定义,这也是刘姝贤乡中的核心,他负责真正的在k8s 上按照拓扑图创建出对应的容器完成流水线的逻辑。

2、phthon SDK负责构造出刘姝贤,并且根据流水线构造出ScheduledWorkflow的yaml定义,随后将其作为参数传递给流水线系统的后端服务。

3、后台服务依赖关系存储数据库(如Mysql)和对象存储(如S3), 处理所有刘姝贤中CRUD请求。

4、前端负责可视化整个流水线的过程,以及获取日志,发起新的运行等。

5、Persistence agent负责把数据从k8s master的Etcd(为一个高可用强一致性的服务发现存储仓库,主要用于共享配置和服务发现)中sync到后段服务的关系型数据库中,其实现的方式与CRD Operator类似,通过informer来监听k8s apiserver对应资源实现。

Kale

作用:kale以notebook扩展的形式提供了一个插件UI。主要利用notebook的json结构在notebook级别(Notebook 元数据)和单个 Cell 级别(Cell 元数据)对它们进行注释。此注释允许:

  • 将代码单元分配给特定的管道组件
  • 将多个单元格合并到一个管道组件中
  • 定义它们之间的(执行)依赖关系

Kale 将带注释的 Jupyter Notebook 作为输入,并生成一个独立的 Python 脚本,该脚本基于 Notebook 和 Cells 注释使用轻量级组件定义 KFP 管道。

用户可以通过kale插件设置pipeline 元数据,并将notebook的cell分配给特定的pipeline step,以及定义依赖项并将多个cells合并在一起。

数据传递:

Kale对notebook的 python代码进行静态分析,检测变量和对象首先声明和使用的位置,功过这种方式,创建了一个内部图关联表示,描述了pipeline步骤之前的数据依赖关系。并且kale在每一组件的开通和结尾注入代码,用来在执行期间将这些对象编组到共享的pvc中。

Kale 对用户透明地处理在pipeline步骤之间传递的数据。

Jupyter 扩展是在用户浏览器中执行的代码,无论集群在哪里。出于这个原因,每当需要与集群或 Kale Python 后端进行交互时,我们都会在后台创建一个新的 Python 内核并执行rpc对 Kale的方法调用,以便在 NotebookServer 容器内执行一些登录。

models(模型服务) - 用于管理模型服务器的 Web 应用程序

作用:可以监控用户部署的所有推理服务,显示 KF Serving 的整个状态。在这里,您可以监控您部署的所有推理服务,查看详细信息、指标和日志。这是我们模型在模型 UI 上的页面。

用例

目前,用户可以通过此 Web 应用程序执行以下工作流程:

  • 查看命名空间中现有 InferenceService CR 的列表
  • 通过提供 YAML 创建一个新的 InferenceService
  • 检查推理服务
    • 查看 InferenceService 的实时状态
    • 检查底层 Knative 资源的 K8s 条件
    • 查看为该 InferenceService 创建的 Model server Pod 的日志
    • 检查存储在 K8s API 服务器中的 YAML 内容
    • 查看一些基本指标

列表页面

该应用程序的主页提供了部署在所选命名空间中的所有 InferenceServices 的列表。前端会定期轮询后端以获取 InferenceServices 的最新状态。

创建

用于创建新 InferenceService 的页面。用户可以粘贴他们想要创建的 InferenceService 的 YAML 对象。

请注意,后端将覆盖.metadata.namespace提交对象的提供字段,以防止用户尝试在其他命名空间中创建 InferenceService。

可以在“详细信息”选项卡上查看更多详细信息

KFServing

KServe 提供了一个简单的 Kubernetes CRD,可以将单个或多个经过训练的模型部署到模型服务运行时,例如TFServing、 TorchServeTriton Inference Server。此外,KFServer是在 KServe 中使用预测 v1 协议实现的 Python 模型服务运行时, MLServer使用 REST 和 gRPC实现了预测 v2 协议。这些模型服务运行时能够提供开箱即用的模型服务,但您也可以选择为更复杂的用例构建自己的模型服务器。KServe 提供基本的 API 原语,让您轻松构建自定义模型服务运行时,您可以使用其他工具,如BentoML 构建您的自定义模型服务图像。

使用 InferenceService 部署模型后,您将获得 KServe 提供的以下所有无服务器功能。

  • 从零缩放
  • CPU/GPU 上基于请求的自动缩放
  • 修订管理
  • 优化容器
  • 批处理
  • 请求/响应日志记录
  • 交通管理
  • AuthN/AuthZ 的安全性
  • 分布式追踪
  • 开箱即用的指标
  • 入口/出口控制

在 PVC 中存储模型并使用 PVC 上保存的模型创建 InferenceService

代码语言:javascript
复制
apiVersion: v1
kind: PersistentVolume
metadata:
  name: task-pv-volume
  labels:
    type: local
spec:
  storageClassName: manual
  capacity:
    storage: 2Gi
  accessModes:
    - ReadWriteOnce
  hostPath:
    path: "/home/ubuntu/mnt/data"

---

代码语言:javascript
复制
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: task-pv-claim
spec:
  storageClassName: manual
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 1Gi
  • 创建带有 s3 的 InferenceServicestorageUri和附加了 s3 凭据的服务帐户。
代码语言:javascript
复制
apiVersion: "serving.kserve.io/v1beta1"
kind: "InferenceService"
metadata:
  name: "mnist-s3"
spec:
  predictor:
    serviceAccountName: sa
    tensorflow:
      storageUri: "s3://kserve-examples/mnist"

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 背景
    • Kale
      • 创建
        • KFServing
        相关产品与服务
        容器服务
        腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
        领券
        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档