文档章节

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

openthings
 openthings
发布于 2018/05/06 16:01
字数 1730
阅读 423
收藏 3

【编者的话】本文来自 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-kubeflow
cd my-kubeflow
ks registry add kubeflow \
github.com/google/kubeflow/tree/master/kubeflow
ks pkg install kubeflow/core
ks pkg install kubeflow/tf-serving
ks pkg install kubeflow/tf-job
ks generate core kubeflow-core --name=kubeflow-core


然后定义两个集群通讯的环境变量。

kubectl config use-context minikube
ks env add minikube

kubectl config use-context gke
ks 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 minikube
kubectl 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 1
ks 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(翻译:李加庆

本文转载自:http://www.dockone.io/article/3291

openthings
粉丝 322
博文 1138
码字总数 687611
作品 1
东城
架构师
私信 提问
Kubeflow镜像的快速下载(V0.3.3)

Kubeflow是一个面向Kubernetes集群运行的机器学习框架。要想使用得先想办法把镜像搬到自己的环境里来。 目前版本0.3.3的容器镜像已经搬回来,可以使用下面的脚本来从Aliyun的镜像服务站下载:...

openthings
2018/11/28
661
0
AirFlow/NiFi/MLFlow/KubeFlow进展

大数据分析中,进行流程化的批处理是必不可少的。传统的大数据处理大部分是基于关系数据库系统,难以实现大规模扩展;主流的基于Hadoop/Spark体系总体性能较强,但使用复杂、扩展能力弱。大数...

openthings
06/21
342
0
谷歌发布Kubeflow 0.1版本,基于Kubernetes的机器学习工具包

自从 Google 发布开源容器编排工具——Kubernetes 以来,我们已经见证了其以各种方式遍地开花的景象。随着 Kubernetes 越来越受欢迎,许多辅助项目也已经发展起来。现在,Google 发布了Kubef...

Docker
2018/05/06
0
0
基于 Kubernetes 的机器学习工具库 - Kubeflow

Kubeflow 是谷歌发布的一个机器学习工具库,Kubeflow 项目旨在使 Kubernetes 上的机器学习变的轻松、便捷、可扩展,其目标不是重建其他服务,而是提供一种简便的方式找到最好的 OSS 解决方案...

匿名
2017/12/12
2.7K
3
业界 | 谷歌发布机器学习工具库Kubeflow:可提供最佳OSS解决方案

  选自GitHub   机器之心编译      Kubeflow 是谷歌发布的一个机器学习工具库,致力于使运行在 Kubernetes 上的机器学习变的更轻松、便捷和可扩展;Kubeflow 的目标不是重建其他服务...

机器之心
2017/12/11
0
0

没有更多内容

加载失败,请刷新页面

加载更多

查看线上日志常用命令

cat 命令(文本输出命令) 通常查找出错误日志 cat error.log | grep 'nick' , 这时候我们要输出当前这个日志的前后几行: 显示file文件里匹配nick那行以及上下5行 cat error.log | grep -C ...

xiaolyuh
25分钟前
3
0
六、Java设计模式之工厂方法

工厂方法定义: 定义一个创建对象的接口,但让实现这个接口的类来决定实例化哪个类,工厂方法让类的实例化推迟到子类中进行 类型:创建型 工厂方法-使用场景: 创建对象需要大量重复的代码 ...

东风破2019
31分钟前
3
0
win服务器管理遇到的一系列问题记录

有些小伙伴在使用iis7远程桌面管理工具的时候总是会遇到一系列的问题,下面就是为大家介绍一下服务器日常管理过程中出现的问题及我的解决办法和心得。希望能帮到大家。   拒绝服务器重新启...

1717197346
38分钟前
4
0
flutter 剪切板 复制粘贴

复制粘贴功能 import 'package:flutter/services.dart'; Clipboard.setData(ClipboardData(text:_text));Clipboard.getData;...

zdglf
41分钟前
3
0
如何保证消息的可靠性传输?或者说,如何处理消息丢失的问题?

面试题 如何保证消息的可靠性传输?或者说,如何处理消息丢失的问题? 面试官心理分析 这个是肯定的,用 MQ 有个基本原则,就是数据不能多一条,也不能少一条,不能多,就是前面说的重复消费...

米兜
42分钟前
2
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部