Kubeflow 的组件
Kubeflow 是一个免费的开源 ML 平台,允许您使用 ML 管道来编排在 Kubernetes 上运行的复杂工作流。该方案基于谷歌部署 TensorFlow 模型的方法,即TensorFlow Extended。构成 Kubeflow 的逻辑组件包括:
- Kubeflow Pipelines:使您能够基于 Docker 容器构建和部署可移植、可扩展的机器学习工作流。它包括一个用于管理作业的用户界面、一个用于安排多步骤 ML 工作流的引擎、一个用于定义和操作管道的 SDK,以及用于通过 SDK 与系统交互的 Notebooks 。
- KFServing:在 Kubernetes 上启用无服务器推理。它还为 PyTorch、TensorFlow、scikit-learn 和 XGBoost 等 ML 框架提供高性能和高度抽象的接口。
- 多租户:简化用户操作以允许用户仅查看和编辑其配置中的 Kubeflow 组件和模型制品。这个 Kubeflow 的多用户隔离下的关键概念包括身份验证、授权、管理员、用户和配置文件。
- 训练算子(Operators):使您能够通过算子训练 ML 模型。例如,它提供了在 Kubernetes 上运行 TensorFlow 模型训练的 TensorFlow 训练(TFJob)、用于 Pytorch 模型训练的 PyTorchJob 等。
- Notebooks:Kubeflow 部署提供用于管理和生成 Jupyter notebooks 的服务。每个 Kubeflow 部署可以包含多个 notebook 服务,每个 notebook 服务可以包含多个 notebook 。
Argo 的组件
Argo 是一个开源的容器原生工作流引擎,用于在 Kubernetes 上编排并行作业。它是由 Intuit 的子公司 Applatex 创建的。 Argo 可以一次处理数以万计的工作流程,每个工作流程有 1,000 个步骤。这些逐步过程具有依赖性,被称为有向无环图。 Argo 工作流程的主要组成部分讨论如下:
- 工作流:这是 Argo 中最重要的组件。它有两个主要功能:第一个是定义要执行的工作流,第二个是存储工作流的状态。
- 模板:模板有两大类,即模板定义和模板调用器。模板定义定义了要完成的工作,通常在一个容器中。此类别下的模板类型包括 Script、Containers、Resource 和 Suspend。资源模板用于在集群上创建、应用、替换、删除或修补资源。暂停模板用于在特定的持续时间内停止执行。模板调用器用于调用或调用其他模板并提供执行控制。此类别下的模板类型包括 Step 模板,它允许您在一系列步骤中定义任务,以及 DAG 模板,它允许您将任务定义为依赖关系图。
- 工作流执行器:这是一种执行容器的方法。它符合特定的接口,使 Argo 能够执行某些操作,例如:收集制品、管理容器生命周期、监控 pod 日志等。
- 制品存储库:这是存储制品的地方。请记住,制品是由容器保存的文件。
Kubeflow 和 Argo 之间的相似之处
Kubeflow 和 Argo 有一些共同点,尽管它们是为不同的目的而构建的。在本节中,我们将看看这两个平台之间的相似之处。
- 这两个平台都具有管道编排功能,并且它们对管道采取了一些类似的方法。在这两个平台中,管道步骤本质上是运行的独立容器,并且数据流在管道配置中定义。
- 构建 CI/CD 系统的 DevOps 工程师将非常熟悉在两者中定义管道。通过这两者,您可以使用 YAML 定义管道。然而,Kubeflow 还允许您使用 Python 接口来定义除 YAML 之外的任务。
- Kubeflow 和 Argo 都是开源软件。因此,任何人都可以从任何地方轻松访问它们。
- 这两个平台都需要 Kubernetes,如果您已经精通 k8s,那么您将有更好的时间采用它们。
Kubeflow 和 Argo 的区别
这两个平台都起源于大型科技公司,Kubeflow 起源于 Google,Argo 起源于 Intuit。
Kubeflow 是 Kubernetes 的端到端 MLOps 平台,而 Argo 是 Kubernetes 的工作流引擎。 这意味着 Argo 纯粹是一个用于任何类型的 DAG(例如 CI/CD)的管道编排平台。 虽然它可用于编排 ML 管道,但它不提供其他特定于 ML 的功能,例如实验跟踪或超参数优化。 另一方面,Kubeflow 试图在单个平台下捕获整个模型生命周期,这意味着它具有上述功能和许多其他功能。
Kubeflow 管道构成 Kubeflow 的一部分,可以编排像 Argo 这样的任务。 换句话说,Argo 可以看作是 Kubeflow 的一部分。 从更好的角度来看,Argo 和 MLflow 的组合可以提供与 Kubeflow 更具可比性的功能集。 比较平台的功能,我们可以开始在脑海中进行一些特征数学运算(当然,这并不详尽):
MLflow + Argo = Kubeflow Kubeflow - Kubeflow Pipelines = MLflow Kubeflow Pipelines = Argo 复制代码
总结
更全面的功能集总是很诱人。 当这两种解决方案都是开源的时,采用具有更多功能的解决方案可能是合乎逻辑的,尤其是当它们共享 Kubernetes 作为核心依赖项时。 然而,功能也带来了复杂性。
假设您已经在使用 Argo(或任何其他工作流编排器),并且您正在寻求实现一两个机器学习管道。 在这种情况下,合乎逻辑的选择是继续使用您选择的协调器。 此外,如果您有其他一些您喜欢使用的 ML 工具,那么坚持使用这些工具并添加 Argo 可能是有意义的。
但是,如果您正在寻找一个能够集中所有内容并随着您的团队成长而产生收益的综合平台,那么 Kubeflow 可能是一个更好的选择。