Kubeflow

Kubeflow

谷歌发布Kubeflow 0.1版本,基于Kubernetes的机器学习工具包

YiGagyeong 发表了文章 • 0 个评论 • 1941 次浏览 • 2018-05-05 19:53 • 来自相关话题

【编者的话】Google 发布 Kubeflow 开源工具,旨在让数据科学家充分利用在 Kubernetes 集群上运行机器学习任务的优势。 自从 Google 发布开源容器编排工具——Kubernetes 以来,我们已经见证了其以各 ...查看全部
【编者的话】Google 发布 Kubeflow 开源工具,旨在让数据科学家充分利用在 Kubernetes 集群上运行机器学习任务的优势。

自从 Google 发布开源容器编排工具——Kubernetes 以来,我们已经见证了其以各种方式遍地开花的景象。随着 Kubernetes 越来越受欢迎,许多辅助项目也已经发展起来。现在,Google 发布了Kubeflow 开源工具 0.1 版本,该工具旨在将机器学习带入 Kubernetes 容器的世界。

虽然 Google 早已将 Kubernetes 迁移入 Cloud Native Computing Foundation ,但仍在积极参与该项目,发布 Kubeflow 就是很好的证明。该项目最初只是在去年底奥斯汀举办的 Kubecon 上宣布,但取得了不错反响。

在 Google 运营 Kubeflow 的 David Aronchick,加入Kubeflow之前,已经带领了 Kubernetes 团队两年半的时间。 他表示,该项目背后的想法是让数据科学家充分利用在 Kubernetes 集群上运行机器学习任务的优势。Kubeflow 可以让机器学习团队将现有任务轻松放到集群中运行,而无需作出太多改变。

随着今天的 0.1 版本的发布,该项目将开始推进,并将通过博客公布里程碑,将稳定性提高到一个新的水平,同时还会增加大量社区一直呼吁的新功能。其中包括为 Jupyter Hub 提供用于机器学习任务的协作和交互式训练以、Tensorflow 训练及托管支持等。

Aronchick 强调说,作为一个开源项目,你可以贡献任何你喜欢的工具,而不仅仅限于 Tensorflow,尽管早期的版本确实包含了对 Google 机器学习工具的支持。随着项目进一步发展,预计会有更多额外的工具支持。

在项目最初宣布后的 4 个月内,社区发展迅速,有 70 多个贡献者,20 多个捐助组织以及 15 个 repositoriy 中的 700 多个提交。可以期待一下,可能今年夏天的某个时候就会发布 0.2 版本。
# Kubeflow 0.1 简介
Kubeflow 0.1 提供了一套最精简的软件开发包,用于开发,训练和部署 ML。只需几个命令,就可以获得:

  • Jupyter Hub:用于机器学习任务的协作和交互式训练
  • TensorFlow 训练控制器:支持原生的分布式训练
  • TensorFlow 服务:用于服务托管
  • Argo:工作流
  • SeldonCore:用于复杂推断及非 TF 模型
  • Ambassador:反向代理
  • Wiring:可以使 Kubeflow 在任意 Kubernetes 上运行

下面是入门示例:
# 为 kubeflow 开发环境创建 namespace
NAMESPACE=kubeflow
kubectl create namespace ${NAMESPACE}
VERSION=v0.1.3

# #初始化 ksonnet 应用,设置 namespace 为其默认环境变量
APP_NAME=my-kubeflow
ks init ${APP_NAME}
cd ${APP_NAME}
ks env set default --namespace ${NAMESPACE}

# #安装 Kubeflow 组件
ks registry add kubeflow github.com/kubeflow/kubeflow/tree/${VERSION}/kubeflow
ks pkg install kubeflow/core@${VERSION}
ks pkg install kubeflow/tf-serving@${VERSION}
ks pkg install kubeflow/tf-job@${VERSION}

# #为核心组件创建模板
ks generate kubeflow-core kubeflow-core

# #部署 Kubeflow
ks apply default -c kubeflow-core

至此,JupyterHub 已部署,我们现在可以使用 Jupyter 开始开发模型。一旦有了 python 代码来构建模型,我们就可以构建一个 Docker 镜像并使用 TFJob 运算符通过运行如下命令来训练模型:
ks generate tf-job my-tf-job --name=my-tf-job --image=gcr.io/my/image:latest
ks apply default -c my-tf-job


# #下面部署模型

ks generate tf-serving ${MODEL_COMPONENT} --name=${MODEL_NAME}
ks param set ${MODEL_COMPONENT} modelPath ${MODEL_PATH}
ks apply ${ENV} -c ${MODEL_COMPONENT}

只需要几个命令,数据科学家和软件工程师就可以创建更复杂的 ML 解决方案,并专注于他们最擅长的事情:解决核心业务问题。

原文链接:Google Kubeflow, machine learning for Kubernetes, begins to take shapeAnnouncing Kubeflow 0.1(翻译:李加庆

Kubeflow 入门——为 Kubernetes 打造的组件化、可移植、可扩展的机器学习堆栈

YiGagyeong 发表了文章 • 0 个评论 • 13613 次浏览 • 2018-01-24 14:36 • 来自相关话题

【编者的话】本文来自 Kubeflow 项目的产品经理 David Aronchick 和首席工程师 Jeremy Lewi,主要讲了他们新的开源项目——Kubeflow 的一些入门知识,Kubeflow 致力于使 Kubernetes 上的机器学习堆栈变得 ...查看全部
【编者的话】本文来自 Kubeflow 项目的产品经理 David Aronchick 和首席工程师 Jeremy Lewi,主要讲了他们新的开源项目——Kubeflow 的一些入门知识,Kubeflow 致力于使 Kubernetes 上的机器学习堆栈变得简单,快速及可扩展。

Kubernetes 已经迅速成长为部署复杂工作负载的混合解决方案。 虽然提供的只是无状态服务,但客户已经开始将复杂的工作负载转移到Kubernetes 平台上,并充分利用了 Kubernetes 提供的丰富API、可靠性以及良好的性能。其中增长最快的用途之一是使用 Kubernetes 作为机器学习的部署平台。

构建一套生产环境下的机器学习系统需要涉及各种组件,通常需要使用混合供应商并结合自研的解决方案。使用相对复杂的配置来连接和管理这些服务,给学习机器学习带来了巨大障碍。基础设施工程师通常会花费大量时间手动部署,然后才能测试一个模型。

更糟糕的是,上述部署与他们部署的集群紧密相关,这些堆栈是不可移植的,这意味着在没有进行重大重新架构的情况下,将模型从笔记本电脑迁移到高度可扩展的云端集群实际上是不可能的。所有这些差异都会浪费极大的精力,并且每次转换都可能会引入 bug。
# Kubeflow 入门
为了解决这些问题,我们决定创建 Kubeflow 项目,一个新的开源 Github repo,致力于在 Kubernetes 上让 ML(Machine Learning)堆栈变得简单,快速、可扩展。

这个仓库包含:

  • JupyterHub,用于创建和管理交互性的 Jupyter notebook
  • Tensorflow Custom Resource (CRD),无论是 GPU 和CPU的选择还是调整集群大小,一条命令就能搞定。
  • 一个 TF 服务容器
因为此解决方案基于 Kubernetes, 所以任何运行 Kubernetes 的地方都可以使用此方案。只需启动一个集群,便可使用。# 使用 Kubeflow假设你正在使用两个不同的 Kubernetes 集群:一个本地的 minikube 集群和一个使用 GPU 的GKE集群,而且有两 kubectl 上下文,分别命名为 minikube 和 gke。首先需要初始化 ksonnet,并安装 Kubeflow(ksonnet使用前需要在操作系统中安装,具体可参考此处)。
ks init my-kubeflowcd my-kubeflowks registry add kubeflow \github.com/google/kubeflow/tree/master/kubeflowks pkg install kubeflow/coreks pkg install kubeflow/tf-servingks pkg install kubeflow/tf-jobks generate core kubeflow-core --name=kubeflow-core
然后定义两个集群通讯的环境变量。
kubectl config use-context minikubeks env add minikubekubectl config use-context gkeks env add gke
在集群中创建环境变量,首先在 minikube 上创建:
ks apply minikube -c kubeflow-core
然后在用于快速训练的多节点 GKE 集群中创建:
ks apply gke -c kubeflow-core
为了在任何地方都能轻易部署这样一套丰富的 ML 堆栈,环境变量的修改和重写应该保持在最低限度。执行以下命令就可以访问任何一个部署:
kubectl port-forward tf-hub-0 8100:8000
打开地址 `ttp://127.0.0.1:8100` 访问 JupyterHub。使用下面的命令,就可以通过 kubectl 修改环境变量:
# To access minikubekubectl config use-context minikube # To access GKE kubectl config use-context gke
执行`应用` 时, 就会在 k8s上启动:
  • 启动和管理 Jupyter notebook 的 JupyterHub
  • 一个 TF CRD
假设你想提交一个训练任务,Kubeflow 提供了 ksonnet 原型,可以轻松定义组件。tf-job 原型可以很容易地为你的代码创建一个任务,但是对于训练任务,我们将使用运行了 TensorFlow CNN 基准的 tf-cnn 原型。提交训练任务前,首先从模型中生成一个新的任务
ks generate tf-cnn cnn --name=cnn
tf-cnn 模型默认使用一个 worker,没有使用 GPU,很适合 minikube 集群,直接提交即可。
ks apply minikube -c cnn
对于 GKE,我们要转为使用另外一个模型,以便充分利用其多节点及 GPU 的优势,首先,列出所有可用参数:
# To see a list of parameters ks prototype list tf-job
调整参数:
ks param set --env=gke cnn num_gpus 1ks param set --env=gke cnn num_workers 1  ks apply gke -c cnn
注意,我们设置变量后,在只有部署到 GKE 时才会生效,minikube 中的参数并未改变(编者注: 使用了 `-- env` 来指定想要修改参数的集群)。训练之后,就可以将模型迁移到用到的服务上。Kubeflow 还包括一个服务包。在另外一个单独的例子中,我们训练了一个标准的 Inception 模型,并将训练好的模型存储在名为 `gs:// kubeflow-models` 的 bucket 中,路径为 `/ inception`。可以通过下面的命令,部署一个训练好的模型
ks generate tf-serving inception --name=inception ---namespace=default --model_path=gs://kubeflow-models/inception ks apply gke -c inception
这也同时突出了 Kubeflow 另外一个功能 -- 部署时接受输入。这条命令创建了一个基于 GKE 集群的 `tf-serving` 服务,面向应用程序可用。有关部署和监控 TensorFlow 训练任务和 TensorFlow 模型的更多信息,请参阅用户指南# Kubeflow + ksonnet我们想引出的是 ksonnet 的使用。我们认为多环境(dev,test,prod)开发将会是大多数 Kubeflow 用户的常态。通过将环境作为一等概念,ksonnet 使 Kubeflow 用户可以在不同环境之间轻易地迁移工作负载。我们觉得 Ksonnet 是一个不错的选择,特别是现在 Helm 正在把 Ksonnet 整合到其下一个版本的平台中。有关 ksonnet 的更多信息可以在 ksonnet文档中找到。我们也要感谢 Heptio 团队加快支持了 Kubeflow 用到的一些 ksonnet 关键功能。# 接下来呢?我们正在努力建立一个社区,并期待大家的贡献!我们已经和许多团队合作比如 CaiCloudRed Hat&OpenShiftCanonicalWeaveworkContainer Solutions等等。CoreOS 对 Kubeflow 寄予了厚望:

“Kubeflow 在简易化 Kubernetes 上配置和生产化机器学习工作负载上取得了重大进步,我们认为这会极大程度上让更多企业接受该平台。我们期待与 Kubeflow 团队合作,提供 Kubeflow 与企业级 Kubernetes 平台 -- Tectonic 的紧密集成。“ -- Reza Shafii,CoreOS 产品副总裁

如果你现在想在浏览器中尝试 Kubeflow,我们已经与Katacoda合作, 点击这里轻松尝试!我们才刚刚起步!我们很乐意为您提供帮助,可以通过以下方式关注我们:
原文链接:Introducing Kubeflow - A Composable, Portable, Scalable ML Stack Built for Kubernetes(翻译:李加庆

Kubeflow 入门——为 Kubernetes 打造的组件化、可移植、可扩展的机器学习堆栈

YiGagyeong 发表了文章 • 0 个评论 • 13613 次浏览 • 2018-01-24 14:36 • 来自相关话题

【编者的话】本文来自 Kubeflow 项目的产品经理 David Aronchick 和首席工程师 Jeremy Lewi,主要讲了他们新的开源项目——Kubeflow 的一些入门知识,Kubeflow 致力于使 Kubernetes 上的机器学习堆栈变得 ...查看全部
【编者的话】本文来自 Kubeflow 项目的产品经理 David Aronchick 和首席工程师 Jeremy Lewi,主要讲了他们新的开源项目——Kubeflow 的一些入门知识,Kubeflow 致力于使 Kubernetes 上的机器学习堆栈变得简单,快速及可扩展。

Kubernetes 已经迅速成长为部署复杂工作负载的混合解决方案。 虽然提供的只是无状态服务,但客户已经开始将复杂的工作负载转移到Kubernetes 平台上,并充分利用了 Kubernetes 提供的丰富API、可靠性以及良好的性能。其中增长最快的用途之一是使用 Kubernetes 作为机器学习的部署平台。

构建一套生产环境下的机器学习系统需要涉及各种组件,通常需要使用混合供应商并结合自研的解决方案。使用相对复杂的配置来连接和管理这些服务,给学习机器学习带来了巨大障碍。基础设施工程师通常会花费大量时间手动部署,然后才能测试一个模型。

更糟糕的是,上述部署与他们部署的集群紧密相关,这些堆栈是不可移植的,这意味着在没有进行重大重新架构的情况下,将模型从笔记本电脑迁移到高度可扩展的云端集群实际上是不可能的。所有这些差异都会浪费极大的精力,并且每次转换都可能会引入 bug。
# Kubeflow 入门
为了解决这些问题,我们决定创建 Kubeflow 项目,一个新的开源 Github repo,致力于在 Kubernetes 上让 ML(Machine Learning)堆栈变得简单,快速、可扩展。

这个仓库包含:

  • JupyterHub,用于创建和管理交互性的 Jupyter notebook
  • Tensorflow Custom Resource (CRD),无论是 GPU 和CPU的选择还是调整集群大小,一条命令就能搞定。
  • 一个 TF 服务容器
因为此解决方案基于 Kubernetes, 所以任何运行 Kubernetes 的地方都可以使用此方案。只需启动一个集群,便可使用。# 使用 Kubeflow假设你正在使用两个不同的 Kubernetes 集群:一个本地的 minikube 集群和一个使用 GPU 的GKE集群,而且有两 kubectl 上下文,分别命名为 minikube 和 gke。首先需要初始化 ksonnet,并安装 Kubeflow(ksonnet使用前需要在操作系统中安装,具体可参考此处)。
ks init my-kubeflowcd my-kubeflowks registry add kubeflow \github.com/google/kubeflow/tree/master/kubeflowks pkg install kubeflow/coreks pkg install kubeflow/tf-servingks pkg install kubeflow/tf-jobks generate core kubeflow-core --name=kubeflow-core
然后定义两个集群通讯的环境变量。
kubectl config use-context minikubeks env add minikubekubectl config use-context gkeks env add gke
在集群中创建环境变量,首先在 minikube 上创建:
ks apply minikube -c kubeflow-core
然后在用于快速训练的多节点 GKE 集群中创建:
ks apply gke -c kubeflow-core
为了在任何地方都能轻易部署这样一套丰富的 ML 堆栈,环境变量的修改和重写应该保持在最低限度。执行以下命令就可以访问任何一个部署:
kubectl port-forward tf-hub-0 8100:8000
打开地址 `ttp://127.0.0.1:8100` 访问 JupyterHub。使用下面的命令,就可以通过 kubectl 修改环境变量:
# To access minikubekubectl config use-context minikube # To access GKE kubectl config use-context gke
执行`应用` 时, 就会在 k8s上启动:
  • 启动和管理 Jupyter notebook 的 JupyterHub
  • 一个 TF CRD
假设你想提交一个训练任务,Kubeflow 提供了 ksonnet 原型,可以轻松定义组件。tf-job 原型可以很容易地为你的代码创建一个任务,但是对于训练任务,我们将使用运行了 TensorFlow CNN 基准的 tf-cnn 原型。提交训练任务前,首先从模型中生成一个新的任务
ks generate tf-cnn cnn --name=cnn
tf-cnn 模型默认使用一个 worker,没有使用 GPU,很适合 minikube 集群,直接提交即可。
ks apply minikube -c cnn
对于 GKE,我们要转为使用另外一个模型,以便充分利用其多节点及 GPU 的优势,首先,列出所有可用参数:
# To see a list of parameters ks prototype list tf-job
调整参数:
ks param set --env=gke cnn num_gpus 1ks param set --env=gke cnn num_workers 1  ks apply gke -c cnn
注意,我们设置变量后,在只有部署到 GKE 时才会生效,minikube 中的参数并未改变(编者注: 使用了 `-- env` 来指定想要修改参数的集群)。训练之后,就可以将模型迁移到用到的服务上。Kubeflow 还包括一个服务包。在另外一个单独的例子中,我们训练了一个标准的 Inception 模型,并将训练好的模型存储在名为 `gs:// kubeflow-models` 的 bucket 中,路径为 `/ inception`。可以通过下面的命令,部署一个训练好的模型
ks generate tf-serving inception --name=inception ---namespace=default --model_path=gs://kubeflow-models/inception ks apply gke -c inception
这也同时突出了 Kubeflow 另外一个功能 -- 部署时接受输入。这条命令创建了一个基于 GKE 集群的 `tf-serving` 服务,面向应用程序可用。有关部署和监控 TensorFlow 训练任务和 TensorFlow 模型的更多信息,请参阅用户指南# Kubeflow + ksonnet我们想引出的是 ksonnet 的使用。我们认为多环境(dev,test,prod)开发将会是大多数 Kubeflow 用户的常态。通过将环境作为一等概念,ksonnet 使 Kubeflow 用户可以在不同环境之间轻易地迁移工作负载。我们觉得 Ksonnet 是一个不错的选择,特别是现在 Helm 正在把 Ksonnet 整合到其下一个版本的平台中。有关 ksonnet 的更多信息可以在 ksonnet文档中找到。我们也要感谢 Heptio 团队加快支持了 Kubeflow 用到的一些 ksonnet 关键功能。# 接下来呢?我们正在努力建立一个社区,并期待大家的贡献!我们已经和许多团队合作比如 CaiCloudRed Hat&OpenShiftCanonicalWeaveworkContainer Solutions等等。CoreOS 对 Kubeflow 寄予了厚望:

“Kubeflow 在简易化 Kubernetes 上配置和生产化机器学习工作负载上取得了重大进步,我们认为这会极大程度上让更多企业接受该平台。我们期待与 Kubeflow 团队合作,提供 Kubeflow 与企业级 Kubernetes 平台 -- Tectonic 的紧密集成。“ -- Reza Shafii,CoreOS 产品副总裁

如果你现在想在浏览器中尝试 Kubeflow,我们已经与Katacoda合作, 点击这里轻松尝试!我们才刚刚起步!我们很乐意为您提供帮助,可以通过以下方式关注我们:
原文链接:Introducing Kubeflow - A Composable, Portable, Scalable ML Stack Built for Kubernetes(翻译:李加庆

谷歌发布Kubeflow 0.1版本,基于Kubernetes的机器学习工具包

YiGagyeong 发表了文章 • 0 个评论 • 1941 次浏览 • 2018-05-05 19:53 • 来自相关话题

【编者的话】Google 发布 Kubeflow 开源工具,旨在让数据科学家充分利用在 Kubernetes 集群上运行机器学习任务的优势。 自从 Google 发布开源容器编排工具——Kubernetes 以来,我们已经见证了其以各 ...查看全部
【编者的话】Google 发布 Kubeflow 开源工具,旨在让数据科学家充分利用在 Kubernetes 集群上运行机器学习任务的优势。

自从 Google 发布开源容器编排工具——Kubernetes 以来,我们已经见证了其以各种方式遍地开花的景象。随着 Kubernetes 越来越受欢迎,许多辅助项目也已经发展起来。现在,Google 发布了Kubeflow 开源工具 0.1 版本,该工具旨在将机器学习带入 Kubernetes 容器的世界。

虽然 Google 早已将 Kubernetes 迁移入 Cloud Native Computing Foundation ,但仍在积极参与该项目,发布 Kubeflow 就是很好的证明。该项目最初只是在去年底奥斯汀举办的 Kubecon 上宣布,但取得了不错反响。

在 Google 运营 Kubeflow 的 David Aronchick,加入Kubeflow之前,已经带领了 Kubernetes 团队两年半的时间。 他表示,该项目背后的想法是让数据科学家充分利用在 Kubernetes 集群上运行机器学习任务的优势。Kubeflow 可以让机器学习团队将现有任务轻松放到集群中运行,而无需作出太多改变。

随着今天的 0.1 版本的发布,该项目将开始推进,并将通过博客公布里程碑,将稳定性提高到一个新的水平,同时还会增加大量社区一直呼吁的新功能。其中包括为 Jupyter Hub 提供用于机器学习任务的协作和交互式训练以、Tensorflow 训练及托管支持等。

Aronchick 强调说,作为一个开源项目,你可以贡献任何你喜欢的工具,而不仅仅限于 Tensorflow,尽管早期的版本确实包含了对 Google 机器学习工具的支持。随着项目进一步发展,预计会有更多额外的工具支持。

在项目最初宣布后的 4 个月内,社区发展迅速,有 70 多个贡献者,20 多个捐助组织以及 15 个 repositoriy 中的 700 多个提交。可以期待一下,可能今年夏天的某个时候就会发布 0.2 版本。
# Kubeflow 0.1 简介
Kubeflow 0.1 提供了一套最精简的软件开发包,用于开发,训练和部署 ML。只需几个命令,就可以获得:

  • Jupyter Hub:用于机器学习任务的协作和交互式训练
  • TensorFlow 训练控制器:支持原生的分布式训练
  • TensorFlow 服务:用于服务托管
  • Argo:工作流
  • SeldonCore:用于复杂推断及非 TF 模型
  • Ambassador:反向代理
  • Wiring:可以使 Kubeflow 在任意 Kubernetes 上运行

下面是入门示例:
# 为 kubeflow 开发环境创建 namespace
NAMESPACE=kubeflow
kubectl create namespace ${NAMESPACE}
VERSION=v0.1.3

# #初始化 ksonnet 应用,设置 namespace 为其默认环境变量
APP_NAME=my-kubeflow
ks init ${APP_NAME}
cd ${APP_NAME}
ks env set default --namespace ${NAMESPACE}

# #安装 Kubeflow 组件
ks registry add kubeflow github.com/kubeflow/kubeflow/tree/${VERSION}/kubeflow
ks pkg install kubeflow/core@${VERSION}
ks pkg install kubeflow/tf-serving@${VERSION}
ks pkg install kubeflow/tf-job@${VERSION}

# #为核心组件创建模板
ks generate kubeflow-core kubeflow-core

# #部署 Kubeflow
ks apply default -c kubeflow-core

至此,JupyterHub 已部署,我们现在可以使用 Jupyter 开始开发模型。一旦有了 python 代码来构建模型,我们就可以构建一个 Docker 镜像并使用 TFJob 运算符通过运行如下命令来训练模型:
ks generate tf-job my-tf-job --name=my-tf-job --image=gcr.io/my/image:latest
ks apply default -c my-tf-job


# #下面部署模型

ks generate tf-serving ${MODEL_COMPONENT} --name=${MODEL_NAME}
ks param set ${MODEL_COMPONENT} modelPath ${MODEL_PATH}
ks apply ${ENV} -c ${MODEL_COMPONENT}

只需要几个命令,数据科学家和软件工程师就可以创建更复杂的 ML 解决方案,并专注于他们最擅长的事情:解决核心业务问题。

原文链接:Google Kubeflow, machine learning for Kubernetes, begins to take shapeAnnouncing Kubeflow 0.1(翻译:李加庆

Kubeflow 入门——为 Kubernetes 打造的组件化、可移植、可扩展的机器学习堆栈

YiGagyeong 发表了文章 • 0 个评论 • 13613 次浏览 • 2018-01-24 14:36 • 来自相关话题

【编者的话】本文来自 Kubeflow 项目的产品经理 David Aronchick 和首席工程师 Jeremy Lewi,主要讲了他们新的开源项目——Kubeflow 的一些入门知识,Kubeflow 致力于使 Kubernetes 上的机器学习堆栈变得 ...查看全部
【编者的话】本文来自 Kubeflow 项目的产品经理 David Aronchick 和首席工程师 Jeremy Lewi,主要讲了他们新的开源项目——Kubeflow 的一些入门知识,Kubeflow 致力于使 Kubernetes 上的机器学习堆栈变得简单,快速及可扩展。

Kubernetes 已经迅速成长为部署复杂工作负载的混合解决方案。 虽然提供的只是无状态服务,但客户已经开始将复杂的工作负载转移到Kubernetes 平台上,并充分利用了 Kubernetes 提供的丰富API、可靠性以及良好的性能。其中增长最快的用途之一是使用 Kubernetes 作为机器学习的部署平台。

构建一套生产环境下的机器学习系统需要涉及各种组件,通常需要使用混合供应商并结合自研的解决方案。使用相对复杂的配置来连接和管理这些服务,给学习机器学习带来了巨大障碍。基础设施工程师通常会花费大量时间手动部署,然后才能测试一个模型。

更糟糕的是,上述部署与他们部署的集群紧密相关,这些堆栈是不可移植的,这意味着在没有进行重大重新架构的情况下,将模型从笔记本电脑迁移到高度可扩展的云端集群实际上是不可能的。所有这些差异都会浪费极大的精力,并且每次转换都可能会引入 bug。
# Kubeflow 入门
为了解决这些问题,我们决定创建 Kubeflow 项目,一个新的开源 Github repo,致力于在 Kubernetes 上让 ML(Machine Learning)堆栈变得简单,快速、可扩展。

这个仓库包含:

  • JupyterHub,用于创建和管理交互性的 Jupyter notebook
  • Tensorflow Custom Resource (CRD),无论是 GPU 和CPU的选择还是调整集群大小,一条命令就能搞定。
  • 一个 TF 服务容器
因为此解决方案基于 Kubernetes, 所以任何运行 Kubernetes 的地方都可以使用此方案。只需启动一个集群,便可使用。# 使用 Kubeflow假设你正在使用两个不同的 Kubernetes 集群:一个本地的 minikube 集群和一个使用 GPU 的GKE集群,而且有两 kubectl 上下文,分别命名为 minikube 和 gke。首先需要初始化 ksonnet,并安装 Kubeflow(ksonnet使用前需要在操作系统中安装,具体可参考此处)。
ks init my-kubeflowcd my-kubeflowks registry add kubeflow \github.com/google/kubeflow/tree/master/kubeflowks pkg install kubeflow/coreks pkg install kubeflow/tf-servingks pkg install kubeflow/tf-jobks generate core kubeflow-core --name=kubeflow-core
然后定义两个集群通讯的环境变量。
kubectl config use-context minikubeks env add minikubekubectl config use-context gkeks env add gke
在集群中创建环境变量,首先在 minikube 上创建:
ks apply minikube -c kubeflow-core
然后在用于快速训练的多节点 GKE 集群中创建:
ks apply gke -c kubeflow-core
为了在任何地方都能轻易部署这样一套丰富的 ML 堆栈,环境变量的修改和重写应该保持在最低限度。执行以下命令就可以访问任何一个部署:
kubectl port-forward tf-hub-0 8100:8000
打开地址 `ttp://127.0.0.1:8100` 访问 JupyterHub。使用下面的命令,就可以通过 kubectl 修改环境变量:
# To access minikubekubectl config use-context minikube # To access GKE kubectl config use-context gke
执行`应用` 时, 就会在 k8s上启动:
  • 启动和管理 Jupyter notebook 的 JupyterHub
  • 一个 TF CRD
假设你想提交一个训练任务,Kubeflow 提供了 ksonnet 原型,可以轻松定义组件。tf-job 原型可以很容易地为你的代码创建一个任务,但是对于训练任务,我们将使用运行了 TensorFlow CNN 基准的 tf-cnn 原型。提交训练任务前,首先从模型中生成一个新的任务
ks generate tf-cnn cnn --name=cnn
tf-cnn 模型默认使用一个 worker,没有使用 GPU,很适合 minikube 集群,直接提交即可。
ks apply minikube -c cnn
对于 GKE,我们要转为使用另外一个模型,以便充分利用其多节点及 GPU 的优势,首先,列出所有可用参数:
# To see a list of parameters ks prototype list tf-job
调整参数:
ks param set --env=gke cnn num_gpus 1ks param set --env=gke cnn num_workers 1  ks apply gke -c cnn
注意,我们设置变量后,在只有部署到 GKE 时才会生效,minikube 中的参数并未改变(编者注: 使用了 `-- env` 来指定想要修改参数的集群)。训练之后,就可以将模型迁移到用到的服务上。Kubeflow 还包括一个服务包。在另外一个单独的例子中,我们训练了一个标准的 Inception 模型,并将训练好的模型存储在名为 `gs:// kubeflow-models` 的 bucket 中,路径为 `/ inception`。可以通过下面的命令,部署一个训练好的模型
ks generate tf-serving inception --name=inception ---namespace=default --model_path=gs://kubeflow-models/inception ks apply gke -c inception
这也同时突出了 Kubeflow 另外一个功能 -- 部署时接受输入。这条命令创建了一个基于 GKE 集群的 `tf-serving` 服务,面向应用程序可用。有关部署和监控 TensorFlow 训练任务和 TensorFlow 模型的更多信息,请参阅用户指南# Kubeflow + ksonnet我们想引出的是 ksonnet 的使用。我们认为多环境(dev,test,prod)开发将会是大多数 Kubeflow 用户的常态。通过将环境作为一等概念,ksonnet 使 Kubeflow 用户可以在不同环境之间轻易地迁移工作负载。我们觉得 Ksonnet 是一个不错的选择,特别是现在 Helm 正在把 Ksonnet 整合到其下一个版本的平台中。有关 ksonnet 的更多信息可以在 ksonnet文档中找到。我们也要感谢 Heptio 团队加快支持了 Kubeflow 用到的一些 ksonnet 关键功能。# 接下来呢?我们正在努力建立一个社区,并期待大家的贡献!我们已经和许多团队合作比如 CaiCloudRed Hat&OpenShiftCanonicalWeaveworkContainer Solutions等等。CoreOS 对 Kubeflow 寄予了厚望:

“Kubeflow 在简易化 Kubernetes 上配置和生产化机器学习工作负载上取得了重大进步,我们认为这会极大程度上让更多企业接受该平台。我们期待与 Kubeflow 团队合作,提供 Kubeflow 与企业级 Kubernetes 平台 -- Tectonic 的紧密集成。“ -- Reza Shafii,CoreOS 产品副总裁

如果你现在想在浏览器中尝试 Kubeflow,我们已经与Katacoda合作, 点击这里轻松尝试!我们才刚刚起步!我们很乐意为您提供帮助,可以通过以下方式关注我们:
原文链接:Introducing Kubeflow - A Composable, Portable, Scalable ML Stack Built for Kubernetes(翻译:李加庆