业界 | 谷歌发布机器学习工具库Kubeflow:可提供最佳OSS解决方案

选自GitHub

机器之心编译

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

Kubeflow 项目旨在使 Kubernetes 上的机器学习变的轻松、便捷、可扩展,其目标不是重建其他服务,而是提供一种简便的方式找到最好的 OSS 解决方案。该库包含包含的清单用于创建:

  • 用于创建和管理交互式 Jupyter notebook 的 JupyterHub
  • 可配置为使用 CPU 或 GPU,并通过单一设置调整至单个集群大小的 TensorFlow 训练控制器(Tensorflow Training Controller)
  • TF 服务容器(TF Serving container)

该文档详述在可运行 Kubernetes 的任何环境中运行 kubeflow 项目的步骤。

Kubeflow 目标

其目标是通过发挥 Kubernetes 的特长,从而更便捷地运用机器学习:

  • 在不同的基础设施上实现简单、可重复的便携式部署(笔记本<-> ML 装备 <-> 训练集群 <-> 生产集群)
  • 部署和管理松散耦合的微服务
  • 根据需求进行扩展

由于机器学习从业者可供使用的工具非常多,所以核心目标是你可以根据需求自定义堆栈,并让系统处理「无赖的东西」。虽然我们已开始使用少许技术,但我们正在与很多不同项目展开合作,以涵盖更多额外的工具。最终,我们希望给出一组简单的清单,只要在 Kubernetes 已运行的地方便能轻松使用 ML 堆栈,并可根据部署的集群实现自我配置。

设置

该文档假设你已经有一个可用的 Kubernetes 集群。对于具体的 Kubernetes 安装,可能需要额外的配置。

Minikube

Minikube 是一个让我们在本地运行 Kubernetes 更方便的工具。Minikube 会在笔记本的虚拟环境中运行一个单结点 Kubernetes 集群,从而令用户可以在该环境中试验它或执行日常的开发工作。下面的步骤适用于 Minikube 集群,本文档当前使用的是最新版 0.23.0,我们必须配置 Kubectl 才能访问 Minikube。

谷歌 Kubernetes 引擎

谷歌 Kubernetes 引擎是一个可用于部署容器化应用的托管环境。它融合了提高开发生产力、有效利用资源、自动化运维和开源灵活性方面的最新创新技术,能够加快模型进入市场以及迭代的时间。

谷歌在容器中运行生产工作负载的经验已超过 15 年,他们将在此期间学到的经验知识融入到了 Kubernetes 中。因此,Kubernetes 是行业领先的开源容器协调系统,为 Kubernetes Engine 提供技术支持。

如果读者正在使用谷歌 Kubernetes 引擎,在创建清单前,我们应该先授予自己所要求的 RBAC 角色,因而才能创建或编辑其它 RBAC 角色。

kubectl create clusterrolebinding default-admin --clusterrole=cluster-admin --user=user@gmail.com

快速开始

运行以下命令以快速设置堆栈的所有组件:

kubectl apply -f components/ -R

以上命令建立了 JupyterHub(使用 TensorFlow 训练的 API)和一系列的用于服务的部署文件。这些服务作为配置可以帮助用户在 TensorFlow 中以最低能耗的和便携的方式在不同的环境之间从训练转向服务。可以参考关于这些组件的使用说明。

使用

这部分描述了不同的组件和启动的必要步骤。

建立一个Notebook

一旦创建了 JupyterHub 所需的所有清单,同时也就创建了一个负载平衡器服务。可以使用 kubectl 命令行查看创建信息。

kubectl get svc

NAME         TYPE           CLUSTER-IP     EXTERNAL-IP    PORT(S)        AGE
kubernetes   ClusterIP      10.11.240.1    <none>         443/TCP        1h
tf-hub-0     ClusterIP      None           <none>         8000/TCP       1m
tf-hub-lb    LoadBalancer   10.11.245.94   xx.yy.zz.ww    80:32481/TCP   1m

如果你正在使用 minikube,可以运行以下命令获取 notebook 的 URL。

minikube service tf-hub-lb --url

http://xx.yy.zz.ww:31942

对于一些云部署,LoadBalancer 服务可能需要花费 5 分钟的时间,这是一个外部 IP 问题。通过再次重复执行 kubectl get svc 命令最终会显示填充的外部 IP 字段。

一旦有了一个外部 IP,就可以在浏览器中访问它。该 hub 默认设置成接受任意的用户名/密码组合。输入了用户名和密码之后,就可以启动一个 single-notebook 服务器、配置计算资源(内存/CPU/GPU),然后继续进行单节点训练。

我们还提供标准的 docker 图像,可用于在 Jupyter 上训练 TensorFlow 模型。

  • gcr.io/kubeflow/tensorflow-notebook-cpu
  • gcr.io/kubeflow/tensorflow-notebook-gpu

在 spawn 窗口,开始新的 Jupyter 实例时,你可以提供上述图像中的一个,这取决于你想在 CPU 还是 GPU 上运行。图像包括所有必备插件(包含用于模型可视化的 Tensorboard)。注意:基于 GPU 的图像大小可达数个 gigabytes,可能需要数分钟才能下载到本地。

此外,在谷歌 Kubernetes 引擎上运行时,公网地址将会暴露,默认是不安全的端点。关于使用 SSL 和身份验证进行生产部署,参见文档:https://github.com/google/kubeflow/blob/master/components/jupyterhub。

训练

TFJob 控制器(TFJob controller)使用 YAML 作为主控参数服务器,使用 worker 帮助运行分布式 TensorFlow。快速启动部署 TFJob 控制器,安装新型 tensorflow.org/v1alpha1 API。你可以向前面提到的 API 提交一份技术参数来进行新的 TensorFlow 训练部署。

技术参数示例如下:

apiVersion: "tensorflow.org/v1alpha1"
kind: "TfJob"
metadata:
  name: "example-job"
spec:
  replicaSpecs:
    - replicas: 1
      tfReplicaType: MASTER
      template:
        spec:
          containers:
            - image: gcr.io/tf-on-k8s-dogfood/tf_sample:dc944ff
              name: tensorflow
          restartPolicy: OnFailure
    - replicas: 1
      tfReplicaType: WORKER
      template:
        spec:
          containers:
            - image: gcr.io/tf-on-k8s-dogfood/tf_sample:dc944ff
              name: tensorflow
          restartPolicy: OnFailure
    - replicas: 2
      tfReplicaType: PS

可运行示例参见本项目 tf-controller-examples/ 目录,详细文档参见 tensorflow/k8s 项目,可查看更多使用 TFJob 控制器在 Kubernetes 上运行 TensorFlow jobs 的信息。

服务模型

详细指南参见 https://github.com/google/kubeflow/tree/master/components/k8s-model-server,使用内置 TensorFlow 服务部署设置模型服务。

原文链接:https://github.com//google/kubeflow

本文为机器之心编译,转载请联系本公众号获得授权。

原文发布于微信公众号 - 机器之心(almosthuman2014)

原文发表时间:2017-12-11

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏云时之间

Tensorflow简述和初步上手

AI这个概念好像突然就火起来了,年初大比分战胜李世石的AlphaGo成功的吸引了大量的关注,但其实看看你的手机上的语音助手,相机上的人脸识别,今日头条上帮你自动...

3106
来自专栏AI科技评论

开发 | 机器学习零基础?手把手教你用TensorFlow搭建图像分类器

AI科技评论按:Pete Warden是TensorFlow移动团队的技术负责人。曾在Jetpac担任首次技术官。Jetpac的深度学习技术经过优化,可在移动和...

3756
来自专栏CreateAMind

Deep Learning Book 中文第十章 循环和递归网络RNN

814
来自专栏机器之心

我的深度学习开发环境详解:TensorFlow + Docker + PyCharm等,你的呢(附问卷)

选自Upflow.co 作者:Killian 机器之心编译 参与:Nurhachu Null、李亚洲 在这篇文章中,研究员 Killian 介绍了自己的深度学习...

6506
来自专栏HBStream流媒体与音视频技术

MP4文件格式的解析,以及MP4文件的分割算法

1.1K12
来自专栏运维一切

镜像的自动化制作设计 原

终极的目标是为了缩短构建时间和发布时间,为此增加一些镜像层数是情有可原的,另外目前尚不清楚到底镜像可以叠加多少层,操作层数之后会有什么样的麻烦? ####技术研...

501
来自专栏JAVA高级架构

策略模式(Strategy)

1172
来自专栏AI研习社

Github 项目推荐 | SpaceX Falcon 9 Box2D 回收降落动作模拟器

这是一款 SpaceX Falcon 9 第一级火箭的垂直火箭着陆模拟器,该模拟器用 Python 3.5 开发并且在 OpenAI Gym 环境中编写。该模拟...

1352
来自专栏小小詹同学

知乎大神爬取高颜值美女(Python爬虫+人脸检测+颜值检测)

这是一篇来自知乎大神的技术文章

88110
来自专栏机器之心

专栏 | 百度深度学习平台PaddlePaddle框架解析

机器之心专栏 来源:百度PaddlePaddle PaddlePaddle 是 2016 年 8 月底百度开源的深度学习平台,并且在短时间内迅速引发全球开发热度...

3965

扫码关注云+社区

领取腾讯云代金券