提问者:小点点

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


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

  • 基于容器的
  • 基于函数的

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

为了应用最新版本的ci-cd,如果我有一个基于容器的,我可以有一个包含所有yml的repo并加载load_by_url,但是如果它们是一个函数,我可以有一个包含所有的repo并加载为一个包。

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

谢谢。


共2个答案

匿名用户

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

作为基础知识,当KFP管道被编译时,它实际上是由Argo Workflow启动的一系列不同的YAML。所有这些都需要基于容器才能在库伯内特斯上运行,即使容器本身具有所有python。

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

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

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

匿名用户

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

这里有一些误解。

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

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

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

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

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

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

决定是否使用轻量级python组件功能创建组件非常简单:

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

否则,自己编写组件. yaml