粒子Cecily

V1

2022/08/15阅读:55主题:自定义主题1

在 K8s 环境快速部署Kubeflow,轻松实现MLOPS

作为 AI 时代的 DevOps,MLOPS 助力于加速企业从数字化转型到大数据转型再到智能化转型的产业升级进程,为企业沉淀行业特有的 AI 模型、AI 应用提供工具链保证。随着 Kubernetes 的应用爆发,企业也积极投身建设基于 Kubernetes 的 AI 平台,充分利用 K8s 生态提供的资源管理、应用编排、运维监控能力。

然而,企业在直接使用流行的开源 MLOPS 软件如 Kubeflow[1] , MLflow[2] 等,通常需要消耗较大的调研、部署、运维、应用迁移、应用适配等成本。灵雀云 MLOPS 以及其开源版本 kubeflow-chart[3],致力于极大程度的降低企业应用 MLOPS 的成本,在 Kubeflow 的基础上,集成 MLFlow,SQLFlow, kfpdist,elyra 等工具,补充 Kubeflow 难以应用之处,构建完整的 MLOPS 开源解决方案。

关注云原生机器学习的朋友对 Kubeflow 必不会陌生。

Kubeflow 是基于容器和 Kubernetes 构建,提供面向机器学习业务的敏捷部署、开发、训练、发布和管理平台,通过集成开源生态中越来越多的项目,如 Jupyter, Knative, Seldon Core 等,搭建了机器学习应用从开发到上线到迭代的生命周期内的工具链,解决企业应用机器学习中遇到的和 DevOps 类似的工具链的困扰,因此,Kubeflow 也成为了当前云原生场景下主流的 MLOPS 平台。

然而,有了 Kubeflow,是不是在 Kubernetes 上一下子搞定机器学习、深度学习呢?事实并没有那么简单。据了解,很多企业对于 Kubeflow 调研和尝试也多以失败告终。Kubeflow 目前存在以下诸多问题导致企业直接使用 Kubeflow 应用 MLOPS 颇为困难:

  1. Kubeflow 部署复杂、困难
  2. Kubeflow 包含组件繁多,依赖复杂,运维排错耗费人力
  3. Kubeflow 许多功能易用性差,企业 AI 应用开发、迁移困难
  4. Kubeflow 没有中文支持

首先,部署 Kubeflow 完整平台,需要部署大量的依赖和组件。社区提供的安装方法为使用 Kustomize 命令,并使用仓库 https://github.com/kubeflow/manifests 中的层叠式 (overlayed) YAML 配置文件完成安装。当开发者需要修改某一具体配置项时,需要从庞大的 YAML 文件中寻找配置项位置,并建立新的 YAML 文件完成层叠式覆盖,非常繁琐与不便。

另外, 在多数 On-Prem (私有化)K8s 环境中,很多 Kubeflow 依赖的组件已经有原先的部署,比如 Istio, Knative, Dex 等,要和这些已有环境中的组件协同部署就不得不一个个组件的单独配置和部署,不能完成一键安装。

其次,Kubeflow 包含许多组件,每个组件都有其重要的功能,并相互依赖。当系统出现故障,排查会消耗大量的精力,如果要对使用不便的地方进行调整,就会更加耗时耗力。

再次,上手使用 Kubeflow 仍存在以下难题:诸如 Kubeflow Pipeline 工作流 Python API 的侵入式设计,开发学习成本高;实验血缘追踪使用复杂,没有针对训练任务的调度器,资源利用率不高,模型部署只能使用 YAML 配置,没有中文界面等。

在灵雀云企业级 MLOPS 的实践中,我们通过 kubeflow-chart,简化部署步骤,kubeflow-chart 可以将常见的配置项,比如镜像地址,认证配置信息,默认账户,依赖组件安装开关等常用配置项抽出,只需要更改一个 values.yaml 文件,即可完成 kubeflow 对不同 K8s 环境完成部署,同时我们也提供了 values-cn.yaml 免去在国内的同学对镜像下载的困扰。

有了 kubeflow-chart 的助力,开发者便可以轻松实现在 Kubernetes 上快速方便的部署、试用、管理当前最流行的机器学习软件。

那么,下面我们来详细介绍,如何使用 kubeflow-chart :

要使用该项目,按照以下的步骤即可(本地 minikube 环境):

  1. helm repo add alauda https://alauda.github.io/kubeflow-chart

  2. 安装前置依赖 istio 和 cert-manager helm install istio alauda/istio helm install cert-manager alauda/certmanager

  3. 安装 Kubeflow:helm install my-kubeflow alauda/kubeflow

如果您希望使用国内镜像源,则替换为如下的命令:

wget -O values-istio-cn.yaml https://raw.githubusercontent.com/alauda/kubeflow-chart/charts/istio/values-cn.yaml

helm install istio alauda/istio -f values-istio-cn.yaml

wget -O values-certm-cn.yaml https://raw.githubusercontent.com/alauda/kubeflow-chart/charts/certmanager/valuescn.

yaml

helm install cert-manager alauda/certmanager -f values-certm-cn.yaml

wget https://raw.githubusercontent.com/alauda/kubeflow-chart/main/values-cn.yaml

helm install my-kubeflow alauda/kubeflow -f values-cn.yaml

对于本地环境,开启下面端口转发之后,通过浏览器访问http://localhost:8080/,

使用默认账号密码 user@example.com, 12341234

即可登录 kubectl port-forward svc/istio-ingressgateway -n istio-system --address=0.0.0.0 8080:80

如果您的环境有其他的定制需求,比如需要使用其他的 S3 协议的对象存储等可以查看 values.yaml 中的文档描述进行配置。

kubeflow-chart 会逐步集成 SQLFlow、MLFlow、Elyra、kfpdist 等组件,完善 Kubeflow 功能弱点,构建完整的 MLOPS 平台:

SQLFlow:使用 SQL 语言在您的数据库之上构建 AI 应用

kubeflow-chart 预计会可选地集成 SQLFlow[4],使得您可以在 Kubeflow Jupyter Notebook 开发环境中,通过编写 SQL 语句即可对数据库中的数据进行模型训练,预测。充分降低 AI 应用门槛,使在传统关系型数据库方向工作的经验得以直接应用在 AI 方向。SQLFlow 可以支持主流的多种数据库系统,包括 MySQL, TiDB,Hive 等,并内置多种常见的模型、用例场景和大量实例教程,方便找到您合适的场景。

此外,SQLFlow 除了可以直接使用 Kubeflow Jupyter Notebook 作为 SQL 语言编写入口,SQLFlow 的实际机器学习训练、预测任务也是和 Kubeflow 共用了一套底层的 Argo 作为工作流任务调度器。Kubeflow 是通过 KFP SDK 使用 Python 编写机器学习工作流任务,SQLFlow 则是通过 SQL 语言编译器,生成可以在 Argo 上执行的执行计划。

kfpdist:在工作流任务中直接编排分布式任务

在现有的数据科学、机器学习工作流系统中,都很难在工作流的内部插入一个分布式训练任务,为了方便任务调度,通常都是在工作流任务的其中一个步骤(step)中去启动一个由另一个调度器控制的分布式任务。比如通过 KFP 的一个步骤启动一个 TFJob 类型的任务用于运行分布式训练。这样就要求有两个不同类型的任务控制器,并且工作流在等待分布式任务时也是空转,而且要求开发同学必须了解如何在工作流步骤中提及和等待任务执行,并且提交任务中,分布式任务对应的 Python 代码也要单独处理,不能直接在工作流定义的 Python 代码中编写。

kfpdist[5]是 KFP SDK 的插件,可以在编写工作流任务时,使用诸如 ParallelFor 并行计算语法,在某一个步骤执行分布式任务,而后续依赖的任务会在整个分布式任务执行完成之后执行。这样,开发同学可以直接在工作流任务中编写所有的数据处理、模型定义、模型训练迭代、Evaluation 各个部分的代码,不需要考虑单独提交的问题,然后指定某个步骤使用 ParallelFor 即可,有助于更专注于数据处理、模型迭代的代码而减少对系统性代码的依赖。

另外,KFP 工作流 SDK 在实际环境应用仍有诸多不便,最主要的是 KFP SDK 是“侵入式”设计的,即当我们已经有一个可以本地执行的训练任务代码仓库,要改用 KFP 就需要对代码进行“大改”,这通常是不划算且浪费时间的。所以我们仍需要一个“非侵入式”的,可以支持 ParallelFor 分布式训练的,并支持标注的数据科学工作流调度的一个 SDK。然而,现有框架均不能满足以上需求。灵雀云即将开源的 SDK ParaFlow 即满足以上需求,并可以和 Kubeflow 无缝结合,敬请期待。

kubeflow-chart 规划提供更多可选组件以助力 MLOPS

此外,kubeflow-chart 还计划支持如下开源系统,助力快速搭建适合您实际环境的 MLOPS 平台:Volcano 调度器,gang-scheduler,更加合理的分配训练任务使用的 CPU/GPU 内存等资源,并支持任务队列,优先级,抢占式调度等功能 MLFlow:Kubeflow 自身的 metadata 管理,实验追踪功能并不方便使用,需要手动修改代码许多内容,而使用 MLFlow autolog 功能,会自动将模型训练过程中的超参、loss、验证集指标、数据集版本以及输出模型文件记录下来,非常方便的对比每一次实验运行的结果对照,也更方便选择其中一个模型部署到线上。elyra:扩展了 Jupyter Notebook,可以可视化的创建数据科学、机器学习训练任务。您无需再了解 KFP SDK 的情况下也可以通过图形化的方法构建自己的机器学习工作流任务。诸如 Feast/FAISS 等特征工程,机器学习中间件,标注工具,数据集浏览分析等工具等。

总结: kubelfow-chart 会逐步推出下述功能,助力构建 MLOPS 完整开源解决方案:

  • 使用 Helm Chart 方式快速在任意环境部署 Kubeflow 以及其他组件
  • SQLFlow 助力降低企业 AI 研发成本,使用 SQL 即可就可以完成模型训练预测
  • kfpdist 统一Kubeflow工作流和分布式训练,无需再使用 TFJob
  • elyra 实现可视化 AI 工作流建模
  • Volcano 实现更适合 AI 任务的调度器,提升 CPU/GPU 资源利用率
  • MLFlow 替代 Kubeflow 实验追踪,获得更易用的实验追踪功能

kubeflow-chart 是灵雀云企业级 MLOPS 平台的一部分,在灵雀云企业级 MLOPS 平台中我们还会提供更完整的企业级功能包括:

  • 多租户
  • vGPU
  • 高可用和跨区域部署
  • 可视化、中文化
  • 丰富案例教程
  • 监控报警等

云原生技术社区有20+技术交流群,想进群跟技术大牛们聊天,或加入志愿者队伍,请加小助手微信:

引用链接

[1]

Kubeflow: https://www.kubeflow.org/

[2]

MLflow: https://mlflow.org/

[3]

kubeflow-chart: https://github.com/alauda/kubeflow-chart

[4]

SQLFlow: https://github.com/sql-machine-learning/sqlflow

[5]

kfpdist: https://github.com/typhoonzero/kfpdist

分类:

后端

标签:

云计算

作者介绍

粒子Cecily
V1

云原生技术社区公众号,欢迎关注