当开发者想要讲深度学习的分布式训练搬上 Kubernetes 集群时,首先想到的往往就是 Kubeflow 社区中形形色色的 operators,如 tf-operator、mpi-operator。
这些服务于各种深度学习训练(TensorFlow、PyTorch、PaddlePaddle 等)的 operators 主要的工作包括:
- 在 Kubernetes 集群上创建 Pod 以拉起各个训练进程
- 配置用作服务发现的信息(如
Master_Addr
)以及创建相关 Kubernetes 资源(如 Service) - 监控并更新整个任务的状态
事实上,Kubeflow 的训练 Operators 已经成为在 Kubernetes 上运行分布式训练任务的实际标准。
不仅各大公有云厂商都已经基本收录或集成了 Kubeflow 的训练 operators,比如批量计算的AI任务管理模块就是基于其扩展支持了云上弹性训练。社区上其他与深度学习训练相关的项目(如用以自动机器学习的 Katib,又如提供自动化编排功能的 Flyte)都对接了 Kubeflow 中的 operators 作为下发创建分布式训练任务的工具。
KubeFlow是什么
The Kubeflow project is dedicated to making deployments of machine learning (ML) workflows on Kubernetes simple, portable and scalable. Our goal is not to recreate other services, but to provide a straightforward way to deploy best-of-breed open-source systems for ML to diverse infrastructures. Anywhere you are running Kubernetes, you should be able to run Kubeflow.
KubeFlow是运行在K8S之上的一套技术栈,这套技术栈包含了很多组件,组件之间的关系比较松散,我们可以配合起来用,也可以单独用其中的一部分。比如Jupyter Notebook本身可以单机运行,但是和K8S结合之后就能组建一个分布式的Jupyter Notebook服务,供多个用户同时使用,类似于AWS SageMaker或Google Collab。
KubeFlow提供了很多的Operator,比如TFJob Operator或者XGBoost Operator等,这些Operator主要就是针对不同的机器学习框架提供资源调度和分布式训练的能力。我们接下来重点关注TFJob Operator。
另外,KubeFlow还提供了基于KFServing,TFServing技术的模型服务化部署(K8S的强项)、离线预测、机器学习Pipelines的构建管理、基于Katib的超参优化等功能,甚至提供了一个UI界面来管理。
由此可以看出,KubeFlow目标是基于K8S,构建一整套的统一的机器学习平台,覆盖最主要的机器学习流程(数据->特征->建模->服务→监控),同时兼顾机器学习的实验探索阶段和正式的生产环境。
KubeFlow不是什么
- KubeFlow不是机器学习框架,跟TensorFlow,PyTorch,PaddlePaddle不是一个层次的东西
- KubeFlow不负责调度,他还是要依赖K8S来调度,但是可以在KubeFlow这个层次上,使用K8S提供的机制针对机器学习来调整资源调度的策略和算法
- KubeFlow不是一个软件,他更像是一个技术栈,用户从这个技术栈中挑选符合需求的组件使用,各个组件是非常松耦合的
- KubeFlow不是机器学习算法