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

百家 作者:机器之心 2017-12-11 05:02:04


选自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 角色。


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


快速开始


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


  1. kubectl apply -f components/ -R


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


使用


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


建立一个Notebook


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


  1. kubectl get svc

  2. NAME         TYPE           CLUSTER-IP     EXTERNAL-IP    PORT(S)        AGE

  3. kubernetes   ClusterIP      10.11.240.1    < none>         443/TCP        1h

  4. tf-hub-0     ClusterIP      None           < none>         8000/TCP       1m

  5. tf-hub-lb    LoadBalancer   10.11.245.94   xx.yy.zz.ww    80:32481/TCP   1m


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


  1. minikube service tf-hub-lb --url

  2. 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 训练部署。


技术参数示例如下:


  1. apiVersion: "tensorflow.org/v1alpha1"

  2. kind: "TfJob"

  3. metadata:

  4.  name: "example-job"

  5. spec:

  6.  replicaSpecs:

  7.    - replicas: 1

  8.      tfReplicaType: MASTER

  9.      template:

  10.        spec:

  11.          containers:

  12.            - image: gcr.io/tf-on-k8s-dogfood/tf_sample:dc944ff

  13.              name: tensorflow

  14.          restartPolicy: OnFailure

  15.    - replicas: 1

  16.      tfReplicaType: WORKER

  17.      template:

  18.        spec:

  19.          containers:

  20.            - image: gcr.io/tf-on-k8s-dogfood/tf_sample:dc944ff

  21.              name: tensorflow

  22.          restartPolicy: OnFailure

  23.    - replicas: 2

  24.      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



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

✄------------------------------------------------

加入机器之心(全职记者/实习生):hr@jiqizhixin.com

投稿或寻求报道:content@jiqizhixin.com

广告&商务合作:bd@jiqizhixin.com

关注公众号:拾黑(shiheibook)了解更多

[广告]赞助链接:

四季很好,只要有你,文娱排行榜:https://www.yaopaiming.com/
让资讯触达的更精准有趣:https://www.0xu.cn/

公众号 关注网络尖刀微信公众号
随时掌握互联网精彩
赞助链接