Kubeflow

Kubeflow介绍

        Kubernetes 本来是一个用来管理无状态应用的容器平台,但是在近两年有越来越多的公司用它来运行各种各样的工作负载,尤其是机器学习。各种 AI 公司或者互联网公司的 AI 部门都会尝试在 Kubernetes上运行 TensorFlow,Caffe,MXNet 等等分布式学习的任务,这为 Kubernetes 带来了新的挑战。

        首先,分布式的机器学习任务一般会涉及参数服务器(以下称为 PS)和工作节点(以下成为 worker)两种不同的工作类型。而且不同领域的学习任务对 PS 和 worker 有不同的需求,这体现在 Kubernetes 中就是配置难的问题。以 TensorFlow 为例,TensorFlow 的分布式学习任务通常会启动多个 PS 和多个 worker,而且在 TensorFlow 提供的最佳实践中,每个 worker 和 PS 要求传入不同的命令行参数。

        其次,Kubernetes 默认的调度器对于机器学习任务的调度并不友好。如果说之前的问题只是在应用与部署阶段比较麻烦,那调度引发的资源利用率低,或者机器学习任务效率下降的问题,就格外值得关注。机器学习任务对于计算和网络的要求相对较高,一般而言所有的 worker 都会使用 GPU 进行训练,而且为了能够得到一个较好的网络支持,尽可能地同一个机器学习任务的 PS 和 worker 放在同一台机器或者网络较好的相邻机器上会降低训练所需的时间。

          针对这些问题,Kubeflow 项目应运而生,它以 TensorFlow 作为第一个支持的框架,在 Kubernetes 上定义了一个新的资源类型:TFJob,即 TensorFlow Job 的缩写。通过这样一个资源类型,使用 TensorFlow 进行机器学习训练的工程师们不再需要编写繁杂的配置,只需要按照他们对业务的理解,确定 PS 与 worker 的个数以及数据与日志的输入输出,就可以进行一次训练任务。

Kubeflow核心组件

        kubeflow是一个胶水项目,它把诸多对机器学习的支持,比如模型训练,超参数训练,模型部署等进行组合并已容器化的方式进行部署,提供整个流程各个系统的高可用及方便的进行扩展部署了 kubeflow的用户就可以利用它进行不同的机器学习任务。

上图体现了工业上机器学习的整体流程,从数据采集,验证,到模型训练再到服务发布等。而图中的每一个小组件都是Kubeflow中包含的。其核心组件包括:

  • jupyter

jupyter 创建和管理多用户交互式Jupyter notebooks。

  • Seldon

Seldon 提供在Kubernetes上对机器学习模型的部署。

  • TF-Serving

TF-Serving 提供对Tensorflow模型的在线部署,支持版本控制及无需停止线上服务,切换模型等功能。

  • Ambassador

Ambassador 对外提供统一服务的网关(API Gateway),它是一个 Kubernetes 原生的微服务 API 网关,它部署在网络边缘,将传入网络的流量路由到相应的内部服务(也被称为“南北”流量)。

  • Istio

Istio 提供微服务的管理,Telemetry收集。

  • Ksonnet

Ksonnet Kubeflow使用ksonnet来向kubernetes集群部署需要的k8s资源

  • Pachyderm

Pachyderm版本控制数据,类似于Git对代码的处理。 您可以跟踪一段时间内的数据状态,对历史数据进行回溯测试,与队友共享数据,以及恢复到以前的数据状态。

  • Argo

Argo是一个开源的基于容器的工作流引擎,并实现为一个K8S的CRD(CustomResourceDefinition)。

  • Pipelines

pipelines是 Kubeflow 社区新近开源的端到端的 ML/DL 工作流系统。实现了一个工作流模型。所谓工作流,或者称之为流水线(pipeline),可以将其当做一个有向无环图(DAG)。其中的每一个节点,在 kubeflow/pipelines 的语义下被称作组件(component)。组件在图中作为一个节点,其会处理真正的逻辑,比如预处理,数据清洗,模型训练等等。每一个组件负责的功能不同,但有一个共同点,即组件都是以 Docker 镜像的方式被打包,以容器的方式被运行的。

  • Katib

Katib是一个超参数训练系统。它是对 Google Vizier 的开源实现,Google Vizier 是 Google 内部的机器学习超参数训练系统的一个子系统。

  • 支持的机器学习引擎

PyTorch、MXnet、TF。TF为当前主要支持的机器学习引擎

全部组件:https://www.kubeflow.org/docs/guides/components/components/

发表评论