Kubeflow 1.0:面向所有人的云原生机器学习

代表整个社区,我们自豪地宣布 Kubeflow 1.0,这是我们的第一个主要版本。Kubeflow 于 2017 年 12 月在 Kubecon USA 开源,在过去两年中,Kubeflow 项目的增长超出了我们最疯狂的预期。现在已有来自 30 多个参与组织的数百名贡献者。

Kubeflow 的目标是让机器学习 (ML) 工程师和数据科学家能够轻松利用云资源(公有云或本地)进行机器学习工作负载。您可以在任何符合 Kubernetes 标准的集群上使用 Kubeflow。

通过 1.0 版本,我们正式发布了一组核心稳定应用,这些应用能够高效地在 Kubernetes 上开发、构建、训练和部署模型。(在 Kubeflow 的版本策略应用要求中了解更多关于正式发布的信息。)

已毕业应用包括

在 Kubernetes Podcast 上 Jeremy Lewi(Kubeflow 创始人兼核心贡献者)的本次访谈中,了解更多关于 Kubeflow 的使命和 1.0 版本发布的信息。

使用 Kubeflow 进行开发、构建、训练和部署

Kubeflow 1.0 应用,构成了我们开发、构建、训练、部署的关键用户旅程。Kubeflow 1.0 应用,构成了我们开发、构建、训练、部署的关键用户旅程。

通过 Kubeflow 1.0,用户可以使用 Jupyter 开发模型。然后他们可以使用 Kubeflow 工具,例如 fairing(Kubeflow 的 Python SDK),来构建容器并创建 Kubernetes 资源以训练他们的模型。一旦有了模型,他们就可以使用 KFServing 创建并部署一个用于推理的服务器。

Kubernetes 上的机器学习入门

Kubernetes 是一个出色的平台,用于利用基础设施(无论是在公有云还是本地),但是部署针对机器学习进行了优化并与您的云集成的 Kubernetes 并非易事。通过 1.0 版本,我们提供了一个 CLI 和配置文件,让您只需一个命令即可部署 Kubeflow

kfctl apply -f [kfctl_gcp_iap.v1.0.0.yaml](https://github.com/kubeflow/manifests/blob/master/kfdef/kfctl_gcp_iap.yaml)

kfctl apply -f [kfctl_k8s_istio.v1.0.0.yaml](https://github.com/kubeflow/manifests/blob/master/kfdef/kfctl_gcp_iap.yaml)

kfctl apply -f [kfctl_aws_cognito.v1.0.0.yaml](https://github.com/kubeflow/manifests/blob/master/kfdef/kfctl_gcp_iap.yaml)

kfctl apply -f [kfctl_ibm.v1.0.0.yaml](https://github.com/kubeflow/manifests/blob/master/kfdef/kfctl_gcp_iap.yaml)

Kubernetes 上的 Jupyter

在 Kubeflow 的用户调查中,数据科学家们一致表达了 Jupyter notebook 的重要性。此外,他们还需要能够将独立的 Jupyter notebook 与云端 Kubernetes 的效率相结合,以便使用 GPU 训练更大的模型并并行运行多个实验。Kubeflow 使利用 Kubernetes 进行资源管理变得简单,并将您的数据中心的全部力量置于数据科学家的指尖。

使用 Kubeflow,每个数据科学家或团队都可以拥有自己的命名空间来运行他们的工作负载。命名空间提供安全性和资源隔离。使用 Kubernetes 资源配额,平台管理员可以轻松限制个人或团队可以消耗多少资源,以确保公平调度。

部署 Kubeflow 后,用户可以利用 Kubeflow 的中心面板启动 notebook

Kubeflow 用于管理 notebook 的 UI:查看并连接到现有 notebook 或启动新的 notebook。Kubeflow 用于管理 notebook 的 UI:查看并连接到现有 notebook 或启动新的 notebook。

在 Kubeflow UI 中,用户可以通过选择一个预构建的 Jupyter Docker 镜像或输入自定义镜像的 URL 来轻松启动新的 notebook。接下来,用户可以设置要为他们的 notebook 分配多少 CPU 和 GPU。notebook 还可以包含配置和 secret 参数,以简化对外部代码库和数据库的访问。

通过分布式训练加速训练

分布式训练在 Google 是常态(博客),也是 TensorFlow 和 PyTorch 等深度学习框架最令人兴奋且备受期待的功能之一。

当我们开始开发 Kubeflow 时,关键动机之一就是利用 Kubernetes 来简化分布式训练。Kubeflow 提供了 Kubernetes 自定义资源,使得使用 TensorFlow 和 PyTorch 进行分布式训练变得简单。用户只需定义一个 TFJob 或 PyTorch 资源,如下所示。自定义控制器会负责启动和管理所有独立进程,并配置它们相互通信

apiVersion: kubeflow.org/v1
kind: TFJob
metadata:
  name: mnist-train
spec:
  tfReplicaSpecs:
    Chief:
      replicas: 1
        spec:
          containers:
            image: gcr.io/alice-dev/fairing-job/mnist
            name: tensorflow
    Ps:
      replicas: 1
      template:
        spec:
          containers:
            image: gcr.io/alice-dev/fairing-job/mnist
            name: tensorflow
    Worker:
      replicas: 10      
        spec:
          containers:
            image: gcr.io/alice-dev/fairing-job/mnist
            name: tensorflow

使用 TensorBoard 监控模型训练

为了训练高质量模型,数据科学家需要使用诸如 TensorBoard 之类的工具来调试和监控训练过程。借助 Kubernetes 和 Kubeflow,用户可以通过创建如下所示的 YAML 文件,轻松地在其 Kubernetes 集群上部署 TensorBoard。在 Kubeflow 上部署 TensorBoard 时,用户可以利用 Kubeflow 的 AuthN 和 AuthZ 集成,通过 Kubeflow 在公有云上的 Ingress 安全地访问 TensorBoard

// On GCP: [https://${KFNAME}.endpoints.${PROJECT}.cloud.goog/mnist/kubeflow-mnist/tensorboard/](https://${KFNAME}.endpoints.${PROJECT}.cloud.goog/mnist/kubeflow-mnist/tensorboard/)

// On AWS:
[http://8fb34ebe-istiosystem-istio-2af2-925939634.us-west-2.elb.amazonaws.com/mnist/anonymous/tensorboard/](http://8fb34ebe-istiosystem-istio-2af2-925939634.us-west-2.elb.amazonaws.com/mnist/anonymous/tensorboard/)

无需 kubectl port-forward 到单个 pod。

部署模型

KFServing 是构建在 Knative 之上的一个自定义资源,用于部署和管理机器学习模型。KFServing 提供了低级原语(例如 Deployment)不提供的以下功能

  1. 使用开箱即用的模型服务器部署您的模型(无需编写自己的 Flask 应用)

  2. 基于负载的自动扩展,即使是为在 GPU 上提供服务的模型

  3. 安全、受控的模型灰度发布

  4. 可解释性 (Alpha 版)

  5. 载荷日志记录 (Alpha 版)

下面是一个 KFServing 规格示例,展示了如何部署模型。用户只需使用 storageUri 提供其模型文件的 URI

apiVersion: "serving.kubeflow.org/v1alpha2"
kind: "InferenceService"
metadata:
  name: "sklearn-iris"
spec:
  default:
    predictor:
      sklearn:
        storageUri: "gs://kfserving-samples/models/sklearn/iris"

查看示例,学习如何使用上述功能。

解决方案不只是模型

一个模型在对象存储中闲置对您的组织没有任何好处。为了让机器学习发挥作用,您通常需要将该模型整合到应用程序中——无论是 Web 应用程序、移动应用,还是某个后端报告流程的一部分。

诸如 Flask 和 Bootstrap 之类的框架使得数据科学家能够轻松创建丰富、视觉吸引人的 Web 应用程序,让他们的模型发挥作用。下面是我们为 Kubeflow 的 mnist 示例构建的 UI 截图。

使用 Kubeflow,数据科学家无需学习新概念或平台来部署他们的应用程序,也无需处理 Ingress、网络证书等。他们可以像部署 TensorBoard 一样部署他们的应用程序;唯一改变的是 Docker 镜像和标志。

如果这听起来正是您正在寻找的,我们建议您

  1. 访问我们的文档,学习如何在您的公有云或私有云上部署 Kubeflow。

  2. 跟着 mnist 教程操作,亲自尝试我们的核心应用。

Kubeflow 未来展望

Kubeflow 不仅限于本博文涵盖的内容。除了此处列出的应用之外,我们还有许多正在开发中的应用

  • Pipelines (Beta 版),用于定义复杂的机器学习工作流程

  • Metadata (Beta 版),用于跟踪数据集、任务和模型,

  • Katib (Beta 版),用于超参数调优

  • 用于其他框架(例如 xgboost)的分布式 Operator

在未来的版本中,我们将正式发布这些应用的 1.0 版本。

用户证言

如果没有用户的反馈和合作,这一切都不可能实现。一些在生产环境中使用 Kubeflow 的用户反馈包括

*“Kubeflow 1.0 版本的发布是一个重要里程碑,它使 Kubeflow 成为一个可行的企业级机器学习平台。Kubeflow 1.0 为机器学习研究人员带来了实质性的生产力提升。”* — Jeff Fogarty, AVP ML / 云工程师, US Bank

*“Kubeflow 的数据和模型存储允许顺畅地集成到 CI/CD 流程中,从而使得机器学习模型能够更快、更敏捷地交付到应用程序中。”* — Laura Schornack, 共享服务架构师, Chase Commercial Bank

*“随着 Kubeflow 1.0 的推出,我们现在拥有了一个功能齐全的端到端开源机器学习平台,使得从小型团队到像 Gojek 这样的大型独角兽公司所有人都能大规模运行机器学习。”* — Willem Pienaar, 工程主管,数据科学平台, GoJek

*“Kubeflow 提供了一个与一组出色工具的无缝接口,这些工具共同管理机器学习工作流程的复杂性,并鼓励最佳实践。Volvo Cars 的数据科学和机器学习团队能够轻松地迭代并交付可重现的、生产级别的服务。”* — Leonard Aukea, Volvo Cars

“以 Kubeflow 作为我们机器学习平台的核心,我们的小公司能够在生产环境中叠加模型,以提升转化率、找到新客户,并在正确的时间将正确的产品呈现给正确的客户。” *— *高级总监, One Technologies

“Kubeflow 正在帮助 GroupBy 标准化机器学习工作流程并简化非常复杂的部署!” *— *Mohamed Elsaied, 机器学习团队负责人, GroupBy

感谢!

如果没有数十个组织和数百名开发、测试和推广 Kubeflow 的个人,这一切都不可能实现。

开放社区

如果没有一个极其活跃的社区,我们不可能实现我们的里程碑。请加入我们!

非常感谢大家 — 继续前进!