kubeflow是什么?
“通过提供一种直接的方式将用于机器学习的同类最佳开源系统部署到各种基础设施,从而使机器学习工作流在 Kubernetes 上的部署变得简单、便携和可扩展”
kubeflow核心组件:
Kubeflow Pipelines用于构建和部署基于 Docker 容器的可移植、可扩展的机器学习工作流。它包含一个用于管理训练实验、作业和运行的 UI,以及一个用于调度多步骤 ML 工作流的引擎。还有两个 SDK,一个允许您定义和操作管道,而另一个则为 Notebooks 与系统交互提供了另一种方式。
Jupyter 笔记本在 Kubeflow 中运行良好,因为它们可以轻松地与您可能在企业中找到的典型身份验证和访问控制机制集成。解决安全问题后,用户可以自信地使用管理员提供的图像直接在 Kubeflow 集群中创建笔记本 pod/服务器,并轻松提交单节点或分布式训练作业,而不必在笔记本电脑上配置所有内容。
KFServing提供了一个 Kubernetes自定义资源定义,用于在各种框架上提供机器学习模型,包括 TensorFlow、XGBoost、sci-kit-learn、PyTorch 和 ONNX。除了提供 CRD 之外,它还有助于封装自动缩放、网络、健康检查和服务器配置带来的许多复杂挑战。
Katib(在阿拉伯语中意为“秘书”)在 Kubeflow 中提供自动化机器学习 (AutoML)。与 Kfserving 一样,Katib 与机器学习框架无关。它可以执行用多种语言编写的超参数调整、提前停止和神经架构搜索。
Training Operator
在 Kubeflow 中,您可以使用算子训练机器学习模型。目前支持五种运算符。
通过tf-operator 进行TensorFlow 训练
通过PyTorch-operator 进行PyTorch 训练
通过mpi-operator 进行MPI 培训
通过mxnet-operator 进行MXNet 培训
一般在AI训练过程中,单机无法解决的问题,就通过多机并行来解决,多机通信我们就可以考虑使用Open-MPI来进行,一般我们会给每一张卡分配一个进程,然后多机多线程做数据通信,典型的通信方式比如Ring-AllReduce,可以参考下图的样子:
展望:
首先是进一步提高 Kubeflow Training Operator 适配定制化需求 Job 时的灵活性。我们计划提出与深度学习训练框架解耦的一种 Job API 以支持更广泛的任务定义,并允许用户可以借助 kubeflow/common 中的 controller.v1 和 reconciler.v1 进行定制化开发,但其学习成本和开发成本依然过高。甚至在将来,初级开发者可以不修改 operator 而仅仅添加/修改一些 webhook 或是 decorator server 来实现定制化修改。
第二个方面是进一步增强 Kubeflow Training Operator 和其他第三方组件交互时的便利性。我们希望未来利用 Kubeflow Training Operator 来构建 AI 平台的开发者可以方便地将其与其他模块对接,实现诸如任务队列、流水线、超参数搜索等功能。
最后也是最关键的,我们依然希望可以进一步提升 Kubeflow Training Operator 的稳定性。
Kubeflow Pipelines:
Kubeflow Pipelines的架构图,主要分为八个部分:
Python SDK: 用于创建kubeflow Pipelines 组件的特定语言(DSL)。
DSL Compiler: 将Python代码转换成YAML静态配置文件(DSL编译器)。
Pipeline Web Server: Pipeline的前端服务,它收集各种数据以显示相关视图:当前正在运行的pipeline列表,pipeline执行的历史记录,有关各个pipeline运行的调试信息和执行状态等。
Pipeline Service: Pipeline的后端服务,调用K8S服务从YAML创建 pipeline运行。
Kubernetes Resources: 创建CRDs运行Pipeline。
Machine Learning Metadata Service: 用于监视由Pipeline Service创建的Kubernetes资源,并将这些资源的状态持久化在ML元数据服务中(存储任务流容器之间的input/output数据交互)。
Artifact Storage: 用于存储Metadata和Artifact。Kubeflow Pipelines将元数据存储在MySQL数据库中,将工件制品存储在Minio服务器或Cloud Storage等工件存储中。
Orchestration controllers:任务编排,比如Argo Workflow控制器,它可以协调任务驱动的工作流。