Kubeflow:基于 Kubernetes 的云原生机器学习

Kubeflow 项目旨在让每个人都能轻松地在 Kubernetes 上开发、部署和管理可组合、可移植和可扩展的机器学习。
233 位读者喜欢这篇文章。
clouds in windows

Opensource.com。CC BY-SA 4.0

机器学习彻底改变了计算领域,为技术提供了全新的应用场景,并使现有场景更加高效。然而,为了拥有高效的机器学习解决方案,企业必须确保其拥抱以下三个概念:可组合性、可移植性和可扩展性。

机器学习中的 3 个挑战

可组合性

当大多数人听到机器学习时,他们通常首先想到的是构建模型。有许多非常流行的框架使这个过程变得更加容易,例如 TensorFlow、PyTorch、Scikit Learn、XGBoost 和 Caffe。这些平台中的每一个都旨在让数据科学家在探索其问题空间时更轻松地工作。

Steps of building a production-grade solution

然而,在构建实际生产级解决方案的现实中,还有许多更复杂的步骤。 这些包括导入、转换和可视化数据;构建和验证模型;大规模训练模型;以及将模型部署到生产环境。仅关注模型训练会忽略数据科学家日常工作的大部分。

可移植性

引用 Joe Beda 的话,“开发/暂存/生产环境之间的每一个差异最终都会导致中断。”

机器学习的不同步骤通常属于完全不同的系统。 为了使事情变得更加复杂,硬件、加速器和操作系统等较低级别的组件也是需要考虑的因素,这增加了变化。 如果没有自动化系统和工具,这些更改可能会很快变得难以承受且难以管理。 这些更改也使得从重复实验中获得一致的结果变得非常困难。

Elements of experimentation

可扩展性

近期机器学习(深度学习)的最大突破之一是云中可用规模和容量的扩大。 这包括各种机器类型和特定于硬件的加速器(例如,图形处理单元/张量处理单元),以及用于提高性能的数据局部性。 此外,可扩展性不仅仅关乎您的硬件和软件;通过协作扩展团队并简化大量实验的运行也很重要。

Kubernetes 和机器学习

Kubernetes 已迅速成为在任何地方部署复杂工作负载的解决方案。 虽然它最初是从简单的无状态服务开始的,但客户已开始将复杂的工作负载迁移到该平台,从而利用 Kubernetes 提供的丰富的 API、可靠性和性能。 机器学习社区开始利用这些核心优势;不幸的是,创建这些部署仍然很复杂,并且需要混合使用供应商和手工解决方案。 对于只想探索模型的数据科学家来说,连接和管理这些服务(即使是对于中等复杂的设置)也会带来巨大的复杂性障碍。

介绍 Kubeflow

为了应对这些挑战,Kubeflow 项目于 2017 年底创建。Kubeflow 的使命是让每个人都能轻松地在任何地方的 Kubernetes 上开发、部署和管理可组合、可移植和可扩展的机器学习。

Kubeflow 位于一个开源 GitHub 存储库中,该存储库致力于使 Kubernetes 上的机器学习堆栈变得简单、快速和可扩展。 该存储库包含

  • JupyterHub,用于协作和交互式训练
  • TensorFlow 训练自定义资源
  • TensorFlow 服务部署
  • Argo,用于工作流
  • SeldonCore,用于复杂推理和非 TensorFlow Python 模型
  • 反向代理 (Ambassador)
  • 连接,使其可以在任何地方的 Kubernetes 上工作

因为此解决方案依赖于 Kubernetes,所以它在任何运行 Kubernetes 的地方都可以运行。 只需启动一个集群即可!

假设您正在使用 OpenShift 运行 Kubernetes,以下是如何开始使用 Kubeflow 的方法。(您也可以查看 Kubeflow 用户指南。)

# Get ksonnet from https://ksonnet.io/#get-started
# Get oc from https://www.openshift.org/download.html

# Create a namespace for kubeflow deployment
oc new-project mykubeflow

# Initialize a ksonnet app, set environment default namespace
# For different kubernetes api versions see 'oc version'
ks init my-kubeflow --api-spec=version:v1.9.0
cd my-kubeflow
ks env set default --namespace mykubeflow

# Install Kubeflow components, for a list of version see https://github.com/kubeflow/kubeflow/releases
ks registry add kubeflow github.com/kubeflow/kubeflow/tree/v0.1.0/kubeflow
ks pkg install kubeflow/core@v0.1.0
ks pkg install kubeflow/tf-serving@v0.1.0
ks pkg install kubeflow/tf-job@v0.1.0

# Create templates for core components
ks generate kubeflow-core kubeflow-core

# Relax OpenShift security
oc login -u system:admin
oc adm policy add-scc-to-user anyuid -z ambassador -nmykubeflow
oc adm policy add-scc-to-user anyuid -z jupyter-hub -nmykubeflow
oc adm policy add-role-to-user cluster-admin -z tf-job-operator -nmykubeflow

# Deploy Kubeflow
ks apply default -c kubeflow-core

要在本地连接到 JupyterHub,只需转发到本地端口并连接到 http://127.0.0.1:8000

创建 TensorFlow 训练作业

# Create a component
ks generate tf-job myjob --name=myjob

# Parameters can be set using ks param e.g. to set the Docker image used
ks param set myjob image http://gcr.io/tf-on-k8s-dogfood/tf_sample:d4ef871-dirty-991dde4
# To run your job
ks apply default -c myjob

提供 TensorFlow 模型服务

# Create a component for your model
ks generate tf-serving serveInception--name=serveInception
ks param setserveInception modelPath gs://kubeflow-models/inception

# Deploy the model component
ks apply default -c serveInception

接下来是什么?

Kubeflow 正致力于构建社区,并期待您的帮助! 我们已经与许多团队合作,包括 CaiCloudRed Hat & OpenShiftCanonicalWeaveworksContainer SolutionsCiscoIntel、阿里巴巴、Uber 等等。 Red Hat 高级主管 Reza Shafii 解释了他的公司如何已经看到 Kubeflow 的前景

“Kubeflow 项目是使在 Kubernetes 上设置和生产化机器学习工作负载变得更加容易的必要进步,我们预计它将大大扩展更多企业采用该平台的机会。 我们期待与项目成员合作。”

如果您想立即在浏览器中试用 Kubeflow,我们已与 Katacoda 合作,使其变得非常容易。

您还可以通过此视频了解更多关于 Kubeflow 的信息。

我们才刚刚开始! 我们希望您能提供帮助。

User profile image.
薛飞是 Google Kubeflow 团队的成员,Kubeflow 是一项开源项目,旨在帮助开发人员和企业在任何地方开发和部署云原生机器学习。 薛飞拥有分布式系统开发背景,并在微软研究院从事神经网络研究。

评论已关闭。

Creative Commons License本作品根据知识共享署名-相同方式共享 4.0 国际许可协议获得许可。
© . All rights reserved.