1. 背景
近些年来,人工智能技术在自然语言处理、视觉图像和自动驾驶方面都取得不小的成就,无论是工业界还是学术界大家都在惊叹一个又一个的模型设计。但是对于真正做过算法工程落地的同学,在惊叹这些模型的同时,更多的是在忧虑如果快速且有效的将这些模型落地到业务中,并产生商业价值。正如Google 《Hidden Technical Debt in Machine Learning Systems》中说的,ML code仅是Machine Learning systems中的一小部分,像数据收集、特征抽取、配置管理、资源管理、模型部署、模型监控等同样十分的重要。
当我们看到一个典型的机器学习系统由这么多组件或子系统构成时,我们会进而想到另一个问题:这么多子系统应该如何高效的配合起来?
答案是机器学习工作流。 通过机器学习工作流,可以有效的将各个子系统串联起,每一个业务场景可以通过一个端到端的机器学习工作流来描述,同时通过工作流也可以追溯每一次模型产出或模型上线的元信息(例如数据、配置、base model等)。
在工业界,比较成熟的机器学习工作流是Google 的Vertex AI Pipeline和Amazon的Sagemaker Pipeline,大家如果感兴趣可以自行去他们的官网体验。
本文将要介绍的是开源机器学习工作流的解决方案Kubeflow Pipelines(注:Vertex AI Pipeline是基于Kubeflow Pipelines进行改造而来的)。
2. Kubeflow Pipelines
Kubeflow是一个基于云原生的Machine Learning Platform,旨于快速在kubernetes环境中构建一套开箱即用的机器学习平台。Kubeflow由多个子系统构成,覆盖了机器学习声明周期的全流程。
- 在训练阶段:Kubeflow针对不同机器学习框架提供了对应operator,方便用户在kubernetes环境中提交分布式训练任务;
- 在部署阶段:Kubeflow同样提供了多种的部署框架让用户根据自己的业务需求来选择;
- 在监控阶段:Kubeflow提供了Metadata和TensorBoard来对模型的Artifact、血缘和性能进行分析;
针对于机器学习上述阶段,Kubeflow提供了Kubeflow Pipeline工作流平台,用于将机器学习的各个阶段进行串联,同时提供了下述能力:
- 任务编排:Kubeflow Pipeline通过argo提供workflow的能力,能够实现丰富多样的DAG 工作流,用户可以根据的业务需求定义、管理和复用自己工作流;
- 实验管理:Kubeflow Pipeline通过Experiments的能力,能够展示和对比不同实验参数(例如:模型超参)下Pipeline的运行结果,用户可以根据结果来对工作流任务进行调优;
- 模型追溯:Kubeflow Pipeline通过Tracking的能力,能够记录每一次Pipeline运行中每个step的输入和输出信息,用户可以根据记录的内容进行问题排查或模型调优;
3. 部署安装
Kubeflow Pipelines有两种安装模式:
- 模式一:安装全套Kubeflow Platform,此时会同时安装Kubeflow Pipelines
- 模式二:独立安装Kubeflow Pipelines,本文介绍此种情况比如使用
安装 kubeflow pipeline 1.8.0 版本
(K8S必须安装coreDNS服务)
https://github.com/kubeflow/pipelines/tree/1.8.0
https://github.com/kubeflow/pipelines/tree/1.8.0/manifests/kustomize
安装方法如下图:
Install:
KFP_ENV=platform-agnostic
kubectl apply -k cluster-scoped-resources/
kubectl wait crd/applications.app.k8s.io --for condition=established --timeout=60s
kubectl apply -k "env/${KFP_ENV}/"
kubectl wait pods -l application-crd-id=kubeflow-pipelines -n kubeflow --for condition=Ready --timeout=1800s
kubectl port-forward -n kubeflow svc/ml-pipeline-ui 8080:80
Now you can access Kubeflow Pipelines UI in your browser by http://localhost:8080.
要下载对应image
安装成功后:
(所有Pod都需要Running)
1. mysql与minio 因为依赖storage,要修改 对应的deployment里的volumn
4 服务卸载
4.1 namespace范围资源卸载 kubectl kustomize env/platform-agnostic | kubectl delete -f -
4.2 cluster范围资源卸载 kubectl delete -k cluster-scoped-resources/
二进制安装kubernetes 1.23.2_kubectl二进制安装_老段工作室的博客-CSDN博客
二进制安装 k8s v1.25.0_基于ubuntu 20.04 安装二进制k8s 1.25_给你对象一枪的博客-CSDN博客