Kubeflow连接云计算与机器学习

Kubeflow技术入门介绍

前言

本篇博文的内容多出自于《Kubeflow云计算和机器学习的桥梁》(何金池等人编),是放假前在图书馆新书区看到的(2020.12月),感谢作者把前沿的东西展现在我们面前!
我尽量通俗的把它讲出来,让基础知识欠缺的入门者有个较好的了解。

Kubeflow横空出世:

Kubeflow在2018年获得业界广泛关注,19年进入技术开发的“沸腾”期,20年在其1.0版本发行,性能更稳定并逐步走进商业应用。将机器学习通过云计算来进行分布式训练,可以大大提高模型训练效率,kubernetes1作为标杆云计算平台,成为kubeflow的底层依赖架构,提供kubeflow底层容器(集群),关于kubernetes相关说明请看注释1,很通俗哦。

Kubeflow的安装部署:

Ddocker的安装:

Linux系统:sudo yum install docker
(对于Ubuntu系统请使用apt-get命令安装)

Kubernetes集群部署工具:

在用户安装了Docker的前提下,可安装kind工具对kubernetes进行简单管理:在MAC或Linux操作系统中

curl -Lo ./kind<kind下载网址,可以在网上找>/kind -$(uname)-amd64

chmod +x ./kind

mv ./kind /一个在PATH变量里的路径,可以用 echo $PATH 来查看/kind

在Windows系统里下载kind工具:

curl.exe -Lo kind-windows-amds64.exe <kind下载网址,可以在网上找>/kind-windows-amds64

Move-Item ./kind-windows-amds64.exe c:\一个在PATH变量里的路径\kind.exe

安装后可使用kubrctl命令对kubernetes集群进行管理啦。
如部署kubernetes应用,发布服务,弹性伸缩,更新应用,删除应用等。

Kubeflow安装:

在github中下载Kfctl,然后进行解压后安装。
具体步骤参照知乎k8s启示录文章

pv的创建:先编辑yaml文件然后 kubectl create -f pv.yaml进行创建。

kubeflow的其它组件的下载安装

后续补充。

Kubeflow的相关组件介绍:

Operator

就是一些机器学习框架的支持,比如TF Operator支持TensorFlow,其他的如PyTorch等。

Kubeflow Pipelines

顾名思义,管道,一种对工作进行编排的表现形式,用来编排、部署、管理这些端到端的机器学习工作流。让机器学习按照你规定的pipelines流畅来进行。

Medadata

像日志一样,跟踪文件数据流信息。便于调试和工作人员的实时查看监督。

KFServing

快速发布模型,解决机器学习最后一公里的事。基于Istio/Knative2开发。

Katib

用来超参调优,如学习率之类的参数,为了确定最佳的学习率需要不断调试,katib即可自动完成。

Fairing

一个python库,可以更快的构建训练发布模型到本地或云平台,属于高级API吧。

Kubebench

用于测试模型之类的性能的组件。

Kubeflow运行实例:

  • 如何通过Kubeflow将现有的机器运行到Kubernetes中:
    (不使用Kubeflow Fairing的High Level API)
    下面以代码的形式进行展示:
#安装一些python SDK
pip installing kfp
pip installing kubeflow-fairing
pip installing kubeflow-metadata

#fairing:include-cell
#上面的标注是告诉Fairing预处理器将Jupyter Notebook cell的代码转化为
#python代码后打包入docker镜像中,不想打包的则开头不使用此注释
import fire
#...有很多,这里重在展示流程,不再贴代码

#fairing:include-cell
#定义数据源,并且定义训练模型、评估模型性能、保存模型的函数
#产生回归数据集
def read_synthetic_input(test_size=0.25):
#...
#定义训练模型的函数
def train_model():
#...
#定义评估模型及保存模型的函数
#...

#连接Metadata并创建其Workspace
@retrying.retry(stop_max_delay=18000)
#等待Metadata连接
#...

#fairing:include-cell
#封装训练模型和发布服务的函数到class中,便于后续使用
class
#
def train(self):
#
#可使用Kubeflow Metadata将Dataset的源数据信息记录到数据库中
self.exec.log_input(metadata.Dataset(
description="xgboost synthetic data",
name="synthetic-data",
owner="someone@kubeflow.org",
uri="file://path/to/dataset",
version="v1.0.0"))
#Metrics或模型的数据信息记录同上类似
#
#定义模型预测函数
def predict(): 
#
#创建一个Metadata Execution即执行代码
#

到这里准备工作基本完成,Kubeflow Fairing在端到端的机器学习中大致分为四步:

  • 预处理
    完成代码转换ipynb–>py,方便下边的镜像构建
  • 构建镜像
    选择合适的基础镜像构建中间镜像,最后appendbuilder构建最终镜像,并上传到指定的仓库中。至此你的模型的准备代码已经成为个可在kubernetes中使用的工具了。
  • 根据镜像启动一个Job来训练模型
  • 在kubernetes云平台上发布
    会生成一个url,即调用模型的网上地址,可以通过这个网址进行预测操作
    (本次容器使用Docker官方提供的仓库,当然也可以自己搭建。)

Pipelines的使用

创建pipelines、编译pipelines、创建experienct、提交pipelines。
即可在kubeflow中运行,也可以在其用户界面进行查看。
效果如下(摘自原书的pipelines展示):
Kubeflow连接云计算与机器学习

后记

现在的kubeflow的使用还算简单,但智能化还有待提高,对于什么时候能够适用于普通人图形化操作学习还不知道。

缺点:

  • 代码多,不易入门;
  • 对系统的要求使普通人不好弄

  1. 网络世界的数据和应用需要容器,Docker是个很好的容器,容器也需要管理编排,特别是量大的时候,也就是kubernetes的功能。kubernetes里一个核心的概念是Pod,可以理解为一个小的容器的“生态系统”,Pod有端口,kubernetes也有用户UI接口,方便用户管理。。而kubeflow则站在上层对kubernetes进行指挥利用。 ↩︎

  2. Istio是网络管理服务的一个组件,可通过Istio访问kubeflow的用户界面(dashboard)。Knative主要用于服务发布的底层框架,不用细究。 ↩︎

上一篇:ElasticSearch-mappings自定义创建映射


下一篇:一文搞懂 Traefik2.1 在 K8S 中的使用