Kubeflow:云计算和机器学习的桥梁
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人

3.1 Kubeflow 是什么

Kubeflow 从2017 年开始在Google 内部使用,用于将TensorFlow 机器学习框架快速地运行和部署到 Kubernetes 集群(当前 Kubeflow 社区中的 tf-operator 项目)中。Kubeflow 于2018 年初开源,只用了一年时间,就发展成了能够运行整个机器学习Pipelines的多架构、多云框架。

官方对Kubeflow 的定义如下:Kubeflow 是 Kubernetes 的机器学习工具包,是一个为Kubernetes 构建的简单、可组合、便携式、可扩展的机器学习技术栈,作用是方便机器学习的工作流部署。

官方定义稍显笼统,简而言之,Kubeflow 犹如一座桥梁,连接起了云计算的标杆技术Kubernetes 和机器学习的主流框架。那么Kubeflow 名字从何而来呢?在最初命名时,Kubeflow 的前半部分Kube 来自Kubernetes,后半部分flow 来自TensorFlow。但目前看来,flow 代表的不止是TensorFlow,而是所有AI 平台,包括PyTorch、MXNet、XGBoost等,因为Kubeflow 社区支持大部分机器学习框架,所以我们可以将flow 理解为“流”技术的统称。

Kubeflow 最初用于帮助解决数据科学家和机器学习工程师在机器学习过程中遇到的一些问题。具体是什么问题呢?最近几年越来越多的公司使用Kubernetes 运行各种各样的工作负载,尤其是机器学习的相关应用,如模型训练和服务发布。各种AI 公司和互联网公司的AI 部门都会尝试在Kubernetes 云平台上运行TensorFlow、PyTorch、MXNet等分布式学习任务,给数据科学家和机器学习工程师带来了新的挑战:他们需要将机器学习的代码运行到基于Kubernetes 的云平台上,但是学习和熟悉Kubernetes 云平台需要时间,在其上搭建机器学习的平台也需要花费精力,这个过程甚至比单机运行需要更长的时间。Kubeflow 的出现,为数据科学家和机器学习工程师节省了搭建平台和处理流程等工作,使用者只需将主要的精力放到自己的业务逻辑上,如编写机器学习代码(Kubeflow 可以协助节省部分精力)、进行特殊数据处理等,对于其他工作,如与平台相关的工作,都可以交给Kubeflow 完成。除了平台部署的相关工作,Kubeflow 还会做一些其他工作(例如,Katib 可以负责超参调优,KFServing 可以负责模型发布和模型解释,等等),对机器学习有很大的辅助和促进作用。

那么有人会问:机器学习不就是模型训练吗,为什么需要在Kubernetes 云平台上运行呢,在一台性能比较好、带有GPU 或TPU 的机器上直接训练模型不就行了?如果遇到这样的问题,那只能说明,提问者的机器学习尚处于预研阶段或实验室阶段。在真实的生产环境中,模型训练只是机器学习流程中一个很小的模块,而大部分工作是模型训练之外的工作,如平台的搭建和配置、数据收集、数据检查、数据转换、模型分析、监控、日志收集和分析、服务发布和更新、迁移训练等,机器学习的组成模块如图3-1 所示。Kubeflow 可以辅助完成节省模型训练之外的工作。例如,在进行模型训练时,如果仅仅使用性能比较好的机器进行模型训练,则只能满足实验室阶段的要求,在真实的生产环境中,模型较大,并且层析较深,很难通过单机在有效的时间内完成模型训练或迁移,需要集群“作战”,进行分布式训练,集群一般部署在云计算平台上,Kubeflow 社区中的tf-operator 项目正是负责在Kubernetes 云平台上进行分布式模型训练的。

根据图3-1 可知,机器学习要经过多个步骤才能完成,而后面的步骤需要前面步骤的结果。例如,模型训练需要经过数据检验和数据转换的数据,而服务发布需要训练好的模型,一环套一环。Kubeflow Pipelines 项目可以有效地将以上步骤连接起来,在后面章节中将详细讲解。

img

图3-1 机器学习的组成模块