开源技术 * IBM 微讲堂:Kubeflow 系列(观看回放 | 下载讲义) 了解详情

IBM Developer 博客

通过 IBM Developer 关注最新动态并获取信息

探索适用于 Kubernetes 和 OpenShift 的机器学习工具包。


机器学习必须提供与构建、训练、维护和管理模型有关的各种复杂功能。显然,以一种可组合、可移植且可扩展的统一方式提供这些功能,并不是一件容易的事情。Kubernetes 框架非常适合解决这些问题,因此它可以为部署机器学习工作负载提供坚实的基础。为了兑现这一承诺,我们开启了 Kubeflow 项目的开发之旅,目前已实现了第一个重要目标 —— Kubeflow 1.0。

IBM 时刻准备着与强大的多元化社区合作,因此很早就加入了 Kubeflow 开发之旅。在过去的一年中,IBM 已成为仅次于 Google 的最大 Kubeflow 代码贡献者20 多位 IBM 员工为 Kubeflow 贡献了大量的代码,其中包括 500 多次提交和 90 多万行代码

我们一直致力于为 Kubeflow 的关键组件做出贡献,其中包括 Katib(超参数优化)、KFServing(模型维护)、Fairing (SDK)、Kubeflow Pipelines、kfctl(控制平面)、清单(配置)、TF-Operator 和 PyTorch-Operator(模型训练)。此外,我们一直在运行内部项目和性能测试,并为企业客户评估生产适应性,同时还对我们所投资的某些项目(例如,Containered、OpenShift 和 Power Systems)提出了一些要求。在 1.0 中,许多 Kubeflow 组件主要是用于构建、训练、部署和管理模型,它们已经发展成熟,可用于生产级部署。有关更多详细信息,可关注 Kubeflow 1.0 的社区博客

Kubeflow 提供了有关在 Google Cloud Platform (GCP) 和 Amazon Web Services (AWS) 上进行部署的操作说明。此外,我们还提供了有关运行 Kubeflow on IBM CloudKubeflow on OpenShiftKubeflow on Power 的操作说明。我们正在与电信、银行、农业和其他领域的企业客户合作,旨在打造使用 Kubeflow 和其他开源技术的端到端机器学习平台。在 5 月举行的 IBM THINK 会议 中,我们重点介绍了几个客户成功案例。

下面列出了我们与 Kubeflow 社区合作开发企业级 Kubeflow 1.0 的过程中的一些工作重点。

用于部署和管理 Kubeflow 的 Kubeflow Operator

我们最近合作开发了 Kubeflow Operator。Kubeflow Operator 可帮助部署和监视 Kubeflow 以及管理 Kubeflow 的生命周期。它使用 Operator Framework 构建而成。Operator Framework 是一个开源工具包,可用于构建、测试和打包 Operator 以及管理 Operator 的生命周期。现在,可以从 Kubeflow GitHub 中获取 Kubeflow Operator。此外,我们还创建了相应的元数据和代码,以便在 OperatorHub 上正式发布 Kubeflow Operator。这可帮助我们利用与 OpenShift 有关的生态系统和工具,主要是 Operator Lifecycle Manager

Kubeflow Operator 设计

开始使用 Kubeflow Operator

要开始使用 Kubeflow Operator,可将其部署在 Operator 命名空间中,然后使用已部署的 Operator 来部署 Kubeflow。

  1. 使用以下命令部署该 Operator。

     git clone https://github.com/kubeflow/kfctl.git && cd kfctl
     OPERATOR_NAMESPACE=operators
     kubectl create ns ${OPERATOR_NAMESPACE}
     kubectl create -f deploy/crds/kfdef.apps.kubeflow.org_kfdefs_crd.yaml
     kubectl create -f deploy/service_account.yaml -n ${OPERATOR_NAMESPACE}
     kubectl create clusterrolebinding kubeflow-operator --clusterrole cluster-admin --serviceaccount=${OPERATOR_NAMESPACE}:kubeflow-operator
     kubectl create -f deploy/operator.yaml -n ${OPERATOR_NAMESPACE}
    
  2. 指向 IBM Cloud 或 Red Hat OpenShift KFDEF(或者对应的云提供者)

    • 要部署到 IBM Cloud,可指向以下 kfdef 文件。

      export KFDEF_URL=https://raw.githubusercontent.com/opendatahub-io/manifests/v0.7-branch-openshift/kfdef/kfctl_openshift.yaml
      
    • 要部署到 Red Hat OpenShift,可指向以下 kfdef 文件。

      export KFDEF_URL=https://raw.githubusercontent.com/opendatahub-io/manifests/v0.7-branch-openshift/kfdef/kfctl_openshift.yaml
      
  3. 使用您的 Kubeflow 部署名称来更新 KFDEF 文件

     export KUBEFLOW_DEPLOYMENT_NAME=kubeflowexport
     KFDEF_URL=https://raw.githubusercontent.com/kubeflow/manifests/master/kfdef/kfctl_ibm.yamlexport KFDEF=$(echo "${KFDEF_URL}" | rev | cut -d/ -f1 | rev)
     curl -L ${KFDEF_URL} > ${KFDEF}yq w ${KFDEF} 'metadata.name' ${KUBEFLOW_DEPLOYMENT_NAME} > ${KFDEF}.tmp && mv ${KFDEF}.tmp ${KFDEF}kubectl create -f ${KFDEF} -n ${KUBEFLOW_NAMESPACE}
     yq w ${KFDEF} 'metadata.name' ${KUBEFLOW_DEPLOYMENT_NAME} > ${KFDEF}.tmp && mv ${KFDEF}.tmp ${KFDEF}
     kubectl create -f ${KFDEF} -n ${KUBEFLOW_NAMESPACE}
    
  4. 部署 Kubeflow

     kubectl create -f ${KFDEF} -n ${KUBEFLOW_NAMESPACE}
    

用于分布式训练和超参数优化的 TF Operator、PyTorch Operator 和 Katib

Kubernetes 上针对 Tensorflow 和 PyTorch 等的分布式模型训练一直是 Kubeflow 的基础。我们为 Tensorflow OperatorPyTorch Operator 贡献了 Python SDK,因此可以通过 Notebook 来运行分布式训练作业。Katib 也是 Kubeflow 的一个组件,可用于超参数调优和神经网络架构搜索。我们是 Katib 的主要贡献者,并主导设计和实现了它的多项功能(例如,指标收集器、试用模板、建议服务、Katib API 等)。我们还发布了详细的深入剖析 Katib 的各项功能,这为您提供了幕后的详细信息以及有关如何开始使用 Katib 的信息。

Katib

用于模型推断和模型管理的 KFServing

通过与 Google、Bloomberg、Seldon 等公司合作,IBM 帮助成立了 KFServing。该团队帮助实现了许多功能,包括为下列方面做出的贡献:SKLearn 和 PyTorch 服务器、存储 SDK、KNative 更新、Pipelines 集成、端到端测试基础架构以及其他重要功能(包括共同主导设计有效负载日志记录)。今年的工作重点是将可信 AI 功能植入 KFServing 中,例如使用 IBM 可信 AI 项目套件进行偏差检测、对抗检测并实现可解释性。

您可以开始 5 分钟快速体验 KFServing,并利用一个简单规范来部署模型的默认版本和 Canary 版本。有关更高级的推理场景,可关注我们在 KubeCon 上的演讲

apiVersion: "serving.kubeflow.org/v1alpha2"
kind: "InferenceService"
metadata:
  name: "flowers-sample"
spec:
  default:
    predictor:
      # 90% of traffic is sent to this model
      tensorflow:
        storageUri: "gs://kfserving-samples/models/tensorflow/flowers"
  canaryTrafficPercent: 10
  canary:
    predictor:
      # 10% of traffic is sent to this model
      tensorflow:
        storageUri: "gs://kfserving-samples/models/tensorflow/flowers-2"

KFserving

用于机器学习工作流程编排的 Kubeflow Pipelines

我们也与 Kubeflow Pipelines 建立了合作关系,在合作之初,我们贡献了一些 Pipeline 组件以及 Spark、Watson 产品服务组合(Watson Machine LearningWatson OpenScale)、KFServing、Katib、AI Fairness 360Adversarial Robustness 360 Toolbox 的样本。

Watson Pipeline

此外,IBM 还与 Argo 社区进行了合作,利用 Containerd(而不只是 Docker)帮助加快执行 Pipelines。IBM 还贡献了有关 Kubeflow Pipelines 和 TFX、内部身份验证/授权等的各种路线图和设计讨论材料。目前,IBM 正在推动 Kubeflow Pipelines 和 Tekton 比较性研究,并帮助搭建 KFP-Tekton YAML 代码和编译器的初始原型。CD 基金会成立了 MLOps Sig 来负责推动这一计划。

我们还发布了一个端到端管道样本,其中包括 Katib、TFJob 和 KFserving。

Kubeflow Pipelines

用于提供一致的多云 Kubeflow SDK 的 Fairing

通过使用 Kubeflow Fairing 并添加几行代码,您可以在本地或云中,直接通过 Python 代码或 Jupyter Notebook 来运行机器学习训练作业。IBM 一直在为 Kubeflow Fairing 做出重大贡献,包括用于 Fairing 的 Python 打包发布管理和维护、与 KF Serving 的集成、Fairing CI/CD 增强以及其他修订和功能增强。

与我们携手打造企业级机器学习平台

可通过以下几种方式与我们互动:

  • 要在 OpenShift 和 Kubernetes 上构建企业级端到端机器学习平台并做出贡献,可加入 Kubeflow 社区并提出任何问题、意见和反馈!
  • 如果您需要获得有关在内部 Kubernetes 平台、OpenShift 或 IBM Cloud 上部署和管理 Kubeflow 的帮助,联系我们
  • 如果您对 Data and AI 组合中的其他开源项目(即 Kafka、Hive、Hue 和 Spark)感兴趣并想要了解如何以云原生方式将它们组合在一起,可查看 OpenDataHub

感谢 Kubeflow 项目的 IBM 贡献者为项目的各个方面(内部和外部)做出的贡献,下面是部分人员名单:Jin Jin He、Tommy Li、Hou Gang Liu、Weiqiang Zhuang、Luang Ya、Christian Kadner、Andrew Butler、Jane Man 等。

还要感谢我们的 Red Hat 同事,感谢他们帮助强化了 Kubeflow on OpenShift,让 Kubeflow on OpenShift 可以在企业用例的生产环境中使用。最后要感谢由 Google、Arrikto、Cisco、Bloomberg、Microsoft 等组成的协作社区成员,正是有了他们的帮助,我们才迈入了第一个重大里程碑 —— Kubeflow 1.0。

  • Animesh Singh 是 IBM 认知应用团队的 Data and AI 开源平台首席架构师。*

本文翻译自:Kubeflow 1.0: An open source journey towards end-to-end enterprise machine learning(2020-03-02)