介绍Kubeflow-为Kubernetes构建的可组合,可移植,可扩展的ML堆栈

今天的帖子是Kubeflow项目的项目经理兼工程师David Aronchick和Jeremy Lewi的。

Kubernetes与机器学习

Kubernetes已迅速成为用于在任何地方部署复杂工作负载的混合解决方案。从无状态服务开始,客户就已经开始利用Kubernetes提供的丰富API,可靠性和性能将复杂的工作负载转移到平台上。增长最快的用例之一是使用Kubernetes作为机器学习的首选部署平台。

构建任何可用于生产的机器学习系统都涉及各种组件,通常会混合使用供应商和手动解决方案。即使对于中等复杂的设置,连接和管理这些服务也会为采用机器学习带来巨大的复杂性障碍。在测试单个模型之前,基础架构工程师通常会花费大量时间手动调整部署和手动滚动解决方案。

更糟糕的是,这些部署与已部署到的集群紧密相关,以至于这些堆栈无法移动,这意味着如果不进行大量重新架构,则实际上不可能将模型从便携式计算机迁移到高度可扩展的云集群。所有这些差异加在一起浪费了精力,并在每次转换时创造了引入错误的机会。

介绍Kubeflow

为了解决这些问题,我们宣布创建Kubeflow项目,这是一个新的开源GitHub存储库,致力于在Kubernetes上轻松,快速和扩展地使用ML堆栈。该存储库包含:

  • JupyterHub用于创建和管理交互式Jupyter笔记本
  • 张量流 自订资源 (CRD),可以将其配置为使用CPU或GPU,并可以通过单个设置将其调整为群集的大小
  • TF服务容器 因为此解决方案依赖Kubernetes,所以它可以在Kubernetes运行的任何地方运行。只需旋转集群即可开始!

使用Kubeflow

假设您正在使用两个不同的Kubernetes集群:一个本地 迷你库 簇;和一个 带GPU的GKE集群;而且你有两个 kubectl上下文 定义名为minikube和gke。

首先,我们需要初始化我们的 知识网 应用程序并安装Kubeflow软件包。 (要使用kso​​nnet,您必须先将其安装在操作系统上-这样做的说明是 这里 )

     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 迷你库  
     ks env add 迷你库  

     kubectl config use-context gke  
     ks env add gke  

我们完成了!现在,只需在集群上创建环境即可。首先,在minikube上:

     ks apply 迷你库 -c kubeflow-core  

并在我们的多节点GKE集群上创建它以进行更快的培训:

     ks apply gke -c kubeflow-core  

通过轻松地在各处部署相同的丰富ML堆栈,这些环境之间的漂移和重写可保持在最低限度。

要访问这两个部署,可以执行以下命令:

     kubectl port-forward tf-hub-0 8100:8000  

and then open up http://127.0.0.1:8100 to access JupyterHub. To change the environment used by kubectl, use either of these commands:

     # To access 迷你库  
     kubectl config use-context 迷你库  

     # To access GKE  
     kubectl config use-context gke  

执行apply时,您将在K8s上启动

  • JupyterHub用于在K8s上启动和管理Jupyter笔记本
  • A TF CRD

假设您要提交培训工作。 Kubeflow提供ksonnet 原型 容易定义 组件。使用tf-job原型可以轻松为您的代码创建作业,但是在本示例中,我们将使用运行的tf-cnn原型 TensorFlow的CNN基准.

要提交培训工作,您首先要从原型生成新工作:

     ks generate tf-cnn cnn --name=cnn  

默认情况下,tf-cnn原型使用1个工作器并且不使用GPU,这对于我们的minikube集群非常理想,因此我们可以提交它。

     ks apply 迷你库 -c cnn

在GKE上,我们将要调整原型以利用多个节点和GPU。首先,让我们列出所有可用的参数:

     # To see a list of parameters  
     ks prototype list tf-job  

现在,让我们调整参数以利用GPU并访问多个节点。

     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参数不变!

训练后,你 导出模型 到服务地点。

Kubeflow还包括一个服务包。在另一个示例中,我们训练了标准的Inception模型,并将训练后的模型存储在我们创建的名为“ gs:// kubeflow-models”的存储桶中,路径为“ / inception”。

要部署经过训练的服务模型,请执行以下操作:

     ks generate tf-serving inception --name=inception  
     ---namespace=default --model\_path=gs://kubeflow-models/inception  
     ks apply gke -c inception  

这突出显示了Kubeflow中的另一个选项-根据您的部署传递输入的能力。此命令在GKE群集上创建tf服务服务,并将其提供给您的应用程序。

有关部署和监视TensorFlow培训作业和TensorFlow模型的更多信息,请参阅 用户指南.

Kubeflow + Ksonnet

我们要指出的一种选择是使用kso​​nnet项目。我们认为,对于大多数Kubeflow用户而言,使用多种环境(开发,测试,生产)将是常态。通过使环境成为一流的概念,ksonnet使Kubeflow用户可以轻松地在不同环境之间移动工作负载。

特别是现在 Helm正在整合ksonnet 在他们平台的下一个版本中,我们觉得它是我们的理想选择。有关ksonnet的更多信息,请参见ksonnet。 docs.

我们还要感谢的团队 用于加速对Kubeflow使用kso​​nnet至关重要的功能。

下一步是什么?

我们现在正在努力建立社区,我们将竭诚为您服务!我们已经与许多团队合作- 彩云, 红帽和OpenShift, 典范, 织造厂, 集装箱解决方案 还有很多其他 酷睿,例如,已经看到了Kubeflow的希望:

“ Kubeflow项目是一项必要的进步,它可以大大简化在Kubernetes上设置和生产机器学习工作负载的过程,我们预计它将大大扩展更多企业使用该平台的机会。我们期待与项目成员合作,将Kubeflow与企业Kubernetes平台Tectonic紧密集成。” -CoreOS产品副总裁Reza Shafii

如果您想立即在浏览器中试用Kubeflow,我们已经与 卡塔科达 使它超级容易。你可以尝试一下 这里 !

我们才刚刚开始!我们很乐意为您提供帮助。您可能会怎么问?好…

杰里米·刘易&大卫·阿伦奇克谷歌