构建 kubeflow 组件的最佳选择是什么?

What is the best option for build kubeflow components?

我了解了 Kubeflow,创建组件有两种方法。

但是没有解释为什么我应该使用一个或另一个,例如加载基于容器,我需要生成一个 docker 图像推送,并在管道中加载yaml,具有规范ci,但基于功能,我只需要导入功能。

为了应用最新版本的 ci-cd,如果我有一个基于容器的,我可以有一个包含所有 yml 的回购并加载 load_by_url,但是如果他们是一个函数,我可以有一个包含所有内容的回购协议,也可以作为一个包加载。

那么您认为基于容器或基于函数的最佳方法是什么。

谢谢。

简短的回答是视情况而定,但更细微的回答是取决于您要对组件做什么。

作为基础知识,编译 KFP 管道时,它实际上是由 Argo Workflows 启动的一系列不同的 YAML。所有这些都需要容器基于 Kubernetes 运行,即使容器本身拥有所有 python.

Python 容器操作的函数是开始使用 Kubeflow 管道的快速方法。它旨在模仿 Airflow 的 python-native DSL。它将在定义的 Python 容器中使用您的 python 函数和 运行 它。你是对的,将所有工作封装在同一个 Git 文件夹中会更容易。此设置非常适合刚开始使用 KFP 且不介意一些样板文件以快速上手的团队。

当您的团队需要共享工作时,或者您有一个企业 ML 平台正在创建如何在管道中 运行 特定作业的模板逻辑时,组件真正变得强大。这些组件可以单独版本化并构建为以相同的方式在您的任何集群上使用(如果您在 AWS 上,底层容器应存储在 docker 集线器或 ECR 中)。 inputs/outputs 规定了 运行 将如何使用该组件执行。你可以想象 Uber 的一个团队可能会使用 KFP 来提取特定区域中司机数量的数据。组件的输入可以是地理坐标框,也可以是加载数据的时间。该组件将数据保存到 S3,然后加载到您的模型进行训练。如果没有该组件,将会有相当多的样板需要跨多个管道和用户复制代码。

我是 AWS 的前 PM,负责 SageMaker 和开源 ML 集成,这是根据我在企业设置方面的经验分享的。

But there isn't an explication about why I should to use one or another, for example for load a Container-based, I need to generate a docker image push, and load in the pipeline the yaml, with the specification, but with function-based, I only need import the function.

这里有一些误解。

引擎盖下只有一种组件——基于容器的组件(也有图形组件,但这与这里无关)。

然而,我们的大多数用户都喜欢 python 并且不喜欢构建容器。这就是为什么我开发了一个名为“轻量级 python 组件”的功能,它 从 python 函数源代码生成 ComponentSpec/component.yaml。生成的组件基本运行python3 -u -c '<your function>; <command-line parsing>' arg1 arg2 ....

存在一种误解,认为“基于函数的组件不同于 component.yaml 文件”。

不,格式相同。您应该将生成的组件保存到文件中以供共享:create_component_from_func(my_func, output_component_file='component.yaml')。代码稳定后,您应该将代码和 component.yaml 上传到 GitHub 或其他地方,并使用 load_component_from_urlcomponent.yaml 加载到管道中。

检查 KFP 存储库中的 component.yaml 文件。超过一半的 component.yaml 文件是轻量级组件 - 它们是从 python 函数生成的。

component.yaml 用于共享组件。它们是声明性的、可移植的、可索引的、安全的、与语言无关的等等。您应该始终发布 component.yaml 个文件。如果 component.yaml 是从 python 函数生成的,那么最好将 component.py 放在旁边,以便在进行更改时可以轻松地重新生成组件。

是否使用轻量级 python 组件特性创建组件的决定很简单:

您是否在自包含的 python 函数中编写代码(还不是 CLI 程序)?您想避免构建、推送和维护容器吗?如果是,那么轻量级 python 组件功能 (create_component_from_func) 可以帮助您并为您生成 component.yaml

否则,自己写component.yaml