使用Kubeflow在Kubernetes上进行机器学习编排
首页>>云原生>>正文

目录




    MLOps:从概念验证到产业化



    近年来,人工智能和机器学习在各种创新用例中跨行业取得了巨大的增长。对于企业领导者来说,这是最重要的战略趋势。当我们深入研究技术时,第一步通常是在非常基本的用例上进行小规模试验,然后下一步就是扩大操作规模。复杂的ML模型可帮助公司有效地发现模式,发现异常,做出预测和决策并产生见解,并且正日益成为市场上的关键差异化因素。公司认识到有必要从概念验证过渡到工程解决方案,并将ML模型从开发转移到生产。


    工具缺乏一致性,开发和部署过程效率低下。慢慢的随着这些技术的成熟,我们需要操作训练和复杂的工作流程来充分利用和大规模动作。这通常称为MLOps或ML CI/CD或ML DevOps。在本文中,我们探索了如何通过Kubeflow项目实现这一目标,该项目使在Kubernetes上部署机器学习工作流变得简单,可移植且可扩展。




    Cloud Native World中的MLOps



    公共云环境中有诸如Amazon SageMaker,Azure ML,Google Cloud AI和IBM Watson Studio之类的企业ML平台。对于内部部署和混合开放源代码平台,最著名的项目是Kubeflow。




    什么是Kubeflow?



    Kubeflow是一个精选的机器学习框架和工具集合。它是为数据科学家和ML工程师提供的一个平台,他们希望尝试他们的模型并设计高效的工作流以进行大规模开发,测试和部署。它是一个可移植的,可扩展的开源平台,它通过抽象化基础的Kubernetes概念构建在Kubernetes之上。




    Kubeflow架构



    Kubeflow利用Istio,Knative,Argo,Tekton等各种云原生技术,并利用Kubernetes原生能力(例如部署,服务和自定义资源)。Istio和Knative帮助提供了诸如蓝/绿部署,流量拆分,金丝雀版本和自动缩放等功能。Kubeflow通过提供非Kubernetes用户可以使用的UI,CLI和简单的工作流来抽象Kubernetes组件。


    对于ML功能,Kubeflow集成了最好的框架和工具,例如TensorFlow,MXNet,Jupyter Notebooks,PyTorch和Seldon Core。这种集成提供了数据准备,训练和服务功能。


    Kubeflow架构




    让我们看一下Kubeflow组件



    • 中央仪表板:用于管理所有Kubeflow管道并与各种组件进行交互的用户界面。

    • Jupyter Notebooks:它允许与其他团队成员合作并开发模型。

    • 元数据:通过跟踪和管理工件中的元数据,有助于组织工作流程。在这种情况下,元数据表示有关执行(运行),模型,数据集和其他工件的信息。工件是构成ML工作流程中组件输入和输出的文件和对象。

    • Fairing:通过将其嵌入到Notebook或本地python代码中并部署预测端点,可以远程运行训练作业。

    • Feature Store(Feast):它有助于功能共享和重用,大规模提供功能,提供训练和服务之间的一致性,时间点正确性,保持数据质量和验证。

    • ML框架:这是一系列框架的集合,其中包括提供Chainer(已弃用),MPI,MXNet,PyTorch,TensorFlow。

    • Katib:用于使用Hyperparameters(用于控制模型训练过程的变量),神经体系结构搜索(NAS)来提高模型的预测准确性和性能,以及用于与Katib交互的Web UI来实现自动化机器学习。

    • Pipelines:提供端到端编排和易于重用的解决方案,以简化实验。

    • 服务工具:有两种支持多框架模型服务的模型服务系统:KFServing和Seldon Core。您可以在此处阅读有关服务工具的更多信息。

    https://www.kubeflow.org/docs/external-add-ons/serving/overview/



    有哪些Kubeflow用例?



    • 大规模混合多云ML平台:由于Kubeflow基于Kubernetes,因此它利用了Kubernetes提供的所有功能和强大功能。这使您可以设计可移植的ML平台,并利用相同的API等在本地和公共云上运行。


    • 实验:简单的用户界面和抽象有助于快速进行实验和协作。通过提供有指导的用户旅程来加快开发速度。


    • 面向ML平台的DevOps:Kubeflow管道可帮助创建可重复的工作流,这些工作流可提供一致性,节省迭代时间,并有助于调试,可审核性和合规性要求。


    • 在训练期间调整模型超参数:在模型开发期间,超参数调整通常很难调整且耗时。这对于模型的性能和准确性也至关重要。Katib可以通过自动执行超参数调整来减少测试时间并提高交付速度。




    Kubeflow演示



    让我们尝试通过示例学习Kubeflow。在此演示中,我们将在本地Kind群集上尝试Kubeflow。您应该至少有16GB的RAM,8个CPU的现代计算机才能在本地计算机上尝试,否则请在云中使用VM。我们将使用Zalando的Fashion-MNIST数据集和manceps的笔记本进行演示。


    由于某些问题,我必须启用一些功能门和额外的API服务器参数才能使其正常工作。请使用以下种类配置创建集群。

    # kind cluster configuration - kind.yamlkind: ClusterapiVersion: kind.x-k8s.io/v1alpha4featureGates:  "TokenRequest": true  "TokenRequestProjection": truekubeadmConfigPatches:  - |    kind: ClusterConfiguration    metadata:      name: config    apiServer:      extraArgs:        "service-account-signing-key-file": "/etc/kubernetes/pki/sa.key"        "service-account-issuer": "kubernetes.default.svc"


    创建Kind集群并安装Kubeflow。

    # Create Kind clusterkind create cluster --config kind.yaml# Deploy Kubeflow on Kind. mkdir -p /root/kubeflow/v1.0cd /root/kubeflow/v1.0wget https://github.com/kubeflow/kfctl/releases/download/v1.0/kfctl_v1.0-0-g94c35cf_linux.tar.gztar -xvf kfctl_v1.0-0-g94c35cf_linux.tar.gz      export PATH=$PATH:/root/kubeflow/v1.0export KF_NAME=my-kubeflowexport BASE_DIR=/root/kubeflow/v1.0export KF_DIR=${BASE_DIR}/${KF_NAME}export CONFIG_URI="https://raw.githubusercontent.com/kubeflow/manifests/v1.2-branch/kfdef/kfctl_k8s_istio.v1.2.0.yaml" mkdir -p ${KF_DIR}cd ${KF_DIR}kfctl apply -f ${CONFIG_URI}


    调出所有服务可能需要15–20分钟。

    ❯ kubectl get pods -n kubeflowNAME                                                     READY   STATUS    RESTARTS   AGEadmission-webhook-bootstrap-stateful-set-0               1/1     Running   0          19madmission-webhook-deployment-5cd7dc96f5-4hsqr            1/1     Running   0          18mapplication-controller-stateful-set-0                    1/1     Running   0          21margo-ui-65df8c7c84-dcm6m                                 1/1     Running   0          18mcache-deployer-deployment-5f4979f45-6fvg2                2/2     Running   1          3m21scache-server-7859fd67f5-982mg                            2/2     Running   0          102scentraldashboard-67767584dc-f5zhh                        1/1     Running   0          18mjupyter-web-app-deployment-8486d5ffff-4cb8n              1/1     Running   0          18mkatib-controller-7fcc95676b-brk2q                        1/1     Running   0          18mkatib-db-manager-85db457c64-bb7dp                        1/1     Running   3          18mkatib-mysql-6c7f7fb869-c4qqx                             1/1     Running   0          18mkatib-ui-65dc4cf6f5-qrjpm                                1/1     Running   0          18mkfserving-controller-manager-0                           2/2     Running   0          18mkubeflow-pipelines-profile-controller-797fb44db9-hdnxc   1/1     Running   0          18mmetacontroller-0                                         1/1     Running   0          19mmetadata-db-6dd978c5b-wtglv                              1/1     Running   0          18mmetadata-envoy-deployment-67bd5954c-z8qrv                1/1     Running   0          18mmetadata-grpc-deployment-577c67c96f-ts9v6                1/1     Running   6          18mmetadata-writer-756dbdd478-7cbgj                         2/2     Running   0          18mminio-54d995c97b-85xl6                                   1/1     Running   0          18mml-pipeline-7c56db5db9-9mswf                             2/2     Running   0          18sml-pipeline-persistenceagent-d984c9585-82qvs             2/2     Running   0          18mml-pipeline-scheduledworkflow-5ccf4c9fcc-mjrwz           2/2     Running   0          18mml-pipeline-ui-7ddcd74489-jw8gj                          2/2     Running   0          18mml-pipeline-viewer-crd-56c68f6c85-tszc4                  2/2     Running   1          18mml-pipeline-visualizationserver-5b9bd8f6bf-dj2r6         2/2     Running   0          18mmpi-operator-d5bfb8489-9jzsf                             1/1     Running   0          4m27smxnet-operator-7576d697d6-7wj52                          1/1     Running   0          18mmysql-74f8f99bc8-fddww                                   2/2     Running   0          18mnotebook-controller-deployment-5bb6bdbd6d-vx8tv          1/1     Running   0          18mprofiles-deployment-56bc5d7dcb-8x7vr                     2/2     Running   0          18mpytorch-operator-847c8d55d8-zgh2x                        1/1     Running   0          18mseldon-controller-manager-6bf8b45656-6k8r7               1/1     Running   0          18mspark-operatorsparkoperator-fdfbfd99-5drsc               1/1     Running   0          19mspartakus-volunteer-558f8bfd47-h2w62                     1/1     Running   0          18mtf-job-operator-58477797f8-86z42                         1/1     Running   0          18mworkflow-controller-64fd7cffc5-77g6z                     1/1     Running   0          18m


    现在,您可以通过在http2/$INGRESS_PORT上进行端口转发来访问Kubeflow仪表板,可以使用以下命令进行获取。


    export INGRESS_PORT=$(kubectl -n istio-system get service istio-ingressgateway -o jsonpath='{.spec.ports[?(@.name=="http2")].nodePort}')



    让我们尝试一个实验



    在本实验中,我们将使用Zalando的Fashion-MNIST数据集显示使用Tensorflow进行的基本分类。


    关于数据集Fashion-MNIST是Zalando文章图像的数据集,包括6万个示例的训练集和10,000个示例的测试集。每个示例都是与10个类别的标签关联的28x28灰度图像。我们打算将Fashion-MNIST用作直接替代MNIST原始数据集的基准机器学习算法。它共享确切的图像大小以及训练和测试分割的结构。来源:https : //github.com/zalandoresearch/fashion-mnist


    整个实验均取材于笔记本电脑。kf-demo使用该nodebook创建一个Jupyter nodebook,并为其命名。


    您可以从仪表板运行笔记本并创建管道。请注意,在Kubeflow v1.2中,存在一个问题,导致RBAC: permission denied在连接到管道时出错。该问题将在v1.3中修复,您可以在此处阅读有关此问题的更多信息。解决方法是,您需要创建IstioServiceRoleBinding并EnvoyFilter在标头中添加一个标识。有关补丁,请参阅此要点。


    Kubeflow将协调各种组件以创建管道并运行ML实验。您可以通过仪表板访问结果。在幕后,创建了无需担心的Kubernetes Pod,argo工作流等。



    运行kf-demo笔记本和管道的Pod


    我还注意到,当以实物方式运行管道时,它将出现以下内容:


    MountVolume.SetUp failed for volume "docker-sock" : hostPath type check       failed: /var/run/docker.sock is not a socket file


    为了解决这个问题,我不得不更改Argo Workflow ConfigMap以pns代替docker容器运行时执行程序使用。



    更改后,请从信息中心重新运行实验,然后将其通过。



    实验流程


    预测结果



    结论



    如果您正在寻求通过企业级功能(如RBAC,多租户和隔离,安全性,可审核性,组织中用于机器学习操作的协作)带来敏捷性,改进的管理,则Kubeflow是一个绝佳的选择。它稳定,成熟并且使用一流的工具和框架进行管理,该工具和框架可以部署在任何Kubernetes发行版中。请参阅此处的Kubeflow路线图,以了解下一版本中的功能。


    希望这对您有所帮助。请尝试使用Kubeflow,并通过在Twitter上与我联系来分享您的经验。




    参考链接:

    https://www.gartner.com/smarterwithgartner/gartner-top-strategic-technology-trends-for-2021/

    https://www2.deloitte.com/content/dam/insights/articles/6730_TT-Landing-page/DI_2021-Tech-Trends.pdf

    https://www.crn.com/news/cloud/5-emerging-ai-and-machine-learning-trends-to-watch-in-2021?itc=刷新

    https://www.cncf.io/blog/2019/07/30/deploy-your-machine-learning-models-with-kubernetes/

    https://events19.linuxfoundation.org/wp-content/uploads/2018/02/OpenFinTech-MLonKube10112018-atin-and-sahdev.pdf

    https://thenewstack.io/how-kubernetes-could-orchestrate-machine-learning-pipelines/

    https://cloud.google.com/community/tutorials/kubernetes-ml-ops





    给TA打赏
    共{{data.count}}人
    人已打赏

    相关文章

    eBPF、sidecars 和服务网格的未来

    eBPF、sidecars 和服务网格的未来

    eBPF 最近很火热,因为可以为云原生世界提供很多东西。由于 Cilium 之类的项目,它一直是 Kubernetes 集群的 CNI 层的流行选择。Linkerd 等服务网格通常与 Cilium 等 CNI 层一起部署,将 Linkerd 强大的 L7 处理与 Cilium 超快的 L3/4 处理相结合。 但是,eBPF 的网络技术到底有多强大?例如,它能否让我们完全替换 Linkerd 的 sidecars 代理,而只在内核中做所有事情? 在本文中,我将尽我所能评估这种可能性——尤其是当它与对用户的影响有关时。

    Kalix:构建无服务器的云原生业务关键型应用程序,无需数据库

    Kalix:构建无服务器的云原生业务关键型应用程序,无需数据库

    Akka 背后的公司Lightbend最近推出了 Kalix,这是一种新的平台即服务产品,用于使用任何没有数据库的编程语言构建云原生、业务关键型应用程序。Kalix 是一个统一的应用层,它将编写软件所需的部分汇集在一起,并抽象出它们的实现细节。Lighbend 旨在为开发人员提供“创新的 NoOps 开发人员体验”。 Lightbend 的创始人兼首席执行官Jonas Bonér解释了 Kalix 的动机: 云生态系统的复杂性正在减缓工程和开发团队的速度。Kubernetes在管理、编排和确保容器的可用性和可扩展性

    英特尔进军比特币挖矿设备市场

    英特尔进军比特币挖矿设备市场

    本文由半导体产业纵横综合   英特尔总部位于加利福尼亚州圣克拉拉   英特尔公司的新比特币挖矿芯片可能会成为多年来主导市场的中国挖矿设备制造商的第一个主要挑战者。   这家总部位于加利福尼亚州圣克拉拉的芯片制造巨头本月早些时候公布了其加密挖矿计划,并于1月份推出了第一代Bonanza Mine芯片。Jack Dorsey 的数字支付公司Block Inc.以及两家矿业公司Griid Infrastructure 和Argo Blockchain将在今年晚些时候收到第一批芯片。 &nbs

    浅谈铁电存储器:如何实现下一代内存计算?

    浅谈铁电存储器:如何实现下一代内存计算?

    本文由半导体产业纵横编译自technews 因应人工智能、物联网、5G、车载等新兴科技所迎来的巨量资讯分析需求,近年来各国政府及国际知名大厂皆积极地投注大量资源,加速开发兼具提升运算速度以及降低耗能的下世代存储器。而新兴存储器技术选项中,当属铁电存储器最被看好,其原理、技术挑战与未来机会为何?(本文出自中国台湾清华大学工程与系统科学系巫勇贤教授,于闳康科技“科技新航道合作专栏”介绍《铁电存储器的原理、挑战与展望》文稿,经科技新报修编为上下两篇,此篇为上篇。)    Memory-Centric
    后端开发

    Gartner提名2021年主存储阵列客户之声的获奖者

    2021-5-20 15:22:50

    后端开发

    SK海力士收购英特尔NAND业务获得欧洲批准

    2021-5-21 15:36:48

    0 条回复 A文章作者 M管理员
      暂无讨论,说说你的看法吧
    个人中心
    购物车
    优惠劵
    今日签到
    有新私信 私信列表
    搜索