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的使用还算简单,但智能化还有待提高,对于什么时候能够适用于普通人图形化操作学习还不知道。
缺点:
- 代码多,不易入门;
- 对系统的要求使普通人不好弄