使用Kubeflow在Kubernetes上进行机器学习编排

本文将介绍如何在人工智能AI内引入K8s

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

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组件

  • 中央仪表板(Central Dashboard):用于管理所有Kubeflow管道并与各种组件进行交互的用户界面。
  • Jupyter Notebooks:它允许与其他团队成员合作并开发模型。
  • 元数据(Metadata)-通过跟踪和管理人工制品中的元数据,它有助于组织工作流程。在这种情况下,元数据表示有关执行(运行),模型,数据集和其他人工制品的信息。人工制品是构成ML工作流程中组件输入和输出的文件和对象。
  • 改进(Fairing):通过将其嵌入到Notebook或本地python代码中并部署预测端点,可以远程运行培训作业。
  • 功能存储(Feature Store):它有助于功能共享和重用,大规模提供功能,提供培训和服务之间的一致性,时间点正确性,保持数据质量和验证。
  • ML框架(ML Frameworks):这是一系列框架的集合,其中包括Chainer(已弃用),MPI,MXNet,PyTorch,TensorFlow,提供
  • Katib:用于通过Hyperparameters(用于控制模型训练过程的变量),神经体系结构搜索(NAS)来提高模型的预测准确性和性能,以及用于与Katib交互的Web UI来实现自动化机器学习。
  • 管道(Pipelines):提供端到端的编排和易于重用的解决方案,以简化实验。
  • 服务工具(Tools for Serving):有两个支持多框架模型服务的模型服务系统:KFServing和Seldon Core。

有哪些Kubeflow用例?

  • 大规模混合多云ML平台(Hybrid multi-cloud ML Platform at scale):由于Kubeflow基于Kubernetes,因此它利用了Kubernetes提供的所有功能和强大功能。 这使您可以设计可移植的ML平台,并利用相同的API等在本地和公共云上运行。
  • 实验(Experimentation):简单的用户界面和抽象有助于快速进行实验和协作。 通过提供有指导的用户旅程来加快开发速度。
  • 用于ML平台的DevOps(DevOps for ML platform):Kubeflow管道可帮助创建可重复的工作流,这些工作流可提供一致性,节省迭代时间,并有助于调试,可审核性和合规性要求。
  • 在训练过程中调整模型超参数(Tuning the model hyperparameters during training):在模型开发期间,超参数调整通常难以调整且耗时。 这对于模型的性能和准确性也至关重要。 Katib可以通过自动执行超参数调整来减少测试时间并提高交付速度。

Kubeflow 示例

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

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

# kind cluster configuration - kind.yaml

kind: Cluster
apiVersion: kind.x-k8s.io/v1alpha4
featureGates:
  "TokenRequest": true
  "TokenRequestProjection": true
kubeadmConfigPatches:
  - |
    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 cluster
kind create cluster --config kind.yaml

# Deploy Kubeflow on Kind. 

mkdir -p /root/kubeflow/v1.0
cd /root/kubeflow/v1.0
wget https://github.com/kubeflow/kfctl/releases/download/v1.0/kfctl_v1.0-0-g94c35cf_linux.tar.gz

tar -xvf kfctl_v1.0-0-g94c35cf_linux.tar.gz            
export PATH=$PATH:/root/kubeflow/v1.0
export KF_NAME=my-kubeflow
export BASE_DIR=/root/kubeflow/v1.0
export 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 kubeflow
NAME                                                     READY   STATUS    RESTARTS   AGE
admission-webhook-bootstrap-stateful-set-0               1/1     Running   0          19m
admission-webhook-deployment-5cd7dc96f5-4hsqr            1/1     Running   0          18m
application-controller-stateful-set-0                    1/1     Running   0          21m
argo-ui-65df8c7c84-dcm6m                                 1/1     Running   0          18m
cache-deployer-deployment-5f4979f45-6fvg2                2/2     Running   1          3m21s
cache-server-7859fd67f5-982mg                            2/2     Running   0          102s
centraldashboard-67767584dc-f5zhh                        1/1     Running   0          18m
jupyter-web-app-deployment-8486d5ffff-4cb8n              1/1     Running   0          18m
katib-controller-7fcc95676b-brk2q                        1/1     Running   0          18m
katib-db-manager-85db457c64-bb7dp                        1/1     Running   3          18m
katib-mysql-6c7f7fb869-c4qqx                             1/1     Running   0          18m
katib-ui-65dc4cf6f5-qrjpm                                1/1     Running   0          18m
kfserving-controller-manager-0                           2/2     Running   0          18m
kubeflow-pipelines-profile-controller-797fb44db9-hdnxc   1/1     Running   0          18m
metacontroller-0                                         1/1     Running   0          19m
metadata-db-6dd978c5b-wtglv                              1/1     Running   0          18m
metadata-envoy-deployment-67bd5954c-z8qrv                1/1     Running   0          18m
metadata-grpc-deployment-577c67c96f-ts9v6                1/1     Running   6          18m
metadata-writer-756dbdd478-7cbgj                         2/2     Running   0          18m
minio-54d995c97b-85xl6                                   1/1     Running   0          18m
ml-pipeline-7c56db5db9-9mswf                             2/2     Running   0          18s
ml-pipeline-persistenceagent-d984c9585-82qvs             2/2     Running   0          18m
ml-pipeline-scheduledworkflow-5ccf4c9fcc-mjrwz           2/2     Running   0          18m
ml-pipeline-ui-7ddcd74489-jw8gj                          2/2     Running   0          18m
ml-pipeline-viewer-crd-56c68f6c85-tszc4                  2/2     Running   1          18m
ml-pipeline-visualizationserver-5b9bd8f6bf-dj2r6         2/2     Running   0          18m
mpi-operator-d5bfb8489-9jzsf                             1/1     Running   0          4m27s
mxnet-operator-7576d697d6-7wj52                          1/1     Running   0          18m
mysql-74f8f99bc8-fddww                                   2/2     Running   0          18m
notebook-controller-deployment-5bb6bdbd6d-vx8tv          1/1     Running   0          18m
profiles-deployment-56bc5d7dcb-8x7vr                     2/2     Running   0          18m
pytorch-operator-847c8d55d8-zgh2x                        1/1     Running   0          18m
seldon-controller-manager-6bf8b45656-6k8r7               1/1     Running   0          18m
spark-operatorsparkoperator-fdfbfd99-5drsc               1/1     Running   0          19m
spartakus-volunteer-558f8bfd47-h2w62                     1/1     Running   0          18m
tf-job-operator-58477797f8-86z42                         1/1     Running   0          18m
workflow-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的商品图片的数据集-包含60,000个示例的训练集和10,000个示例的测试集。 每个示例都是与10个类别的标签关联的28x28灰度图像。 我们打算将Fashion-MNIST用作直接替代MNIST原始数据集的基准机器学习算法。 它共享确切的图像大小以及训练和测试分割的结构。 来源:https://github.com/zalandoresearch/fashion-mnist

整个实验均取材于笔记本电脑。 使用此笔记本创建一个名为kf-demo的Jupyter笔记本。

您可以从仪表板运行笔记本并创建管道。 请注意,在Kubeflow v1.2中,存在导致RBAC的问题:连接到管道时权限被拒绝错误。 该问题将在v1.3中修复,您可以在此处阅读有关此问题的更多信息。 解决方法是,您需要创建Istio ServiceRoleBinding和EnvoyFilter以在标头中添加身份。 有关补丁,请参见此要点。

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

Pods
Pods

运行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上与我联系来分享您的经验。

SO资源郑重声明:
1. 本站所有资源来源于用户上传和网络,因此不包含技术服务请大家谅解!如有侵权请邮件联系客服!3187589@qq.com
2. 本站不保证所提供下载的资源的准确性、安全性和完整性,资源仅供下载学习之用!如有链接无法下载、失效或广告,请联系客服处理,有奖励!
3. 您必须在下载后的24个小时之内,从您的电脑中彻底删除上述内容资源!如用于商业或者非法用途,与本站无关,一切后果请用户自负!

SO资源 » 使用Kubeflow在Kubernetes上进行机器学习编排