构建 kubeflow 组件的最佳选择是啥?
Posted
技术标签:
【中文标题】构建 kubeflow 组件的最佳选择是啥?【英文标题】:What is the best option for build kubeflow components?构建 kubeflow 组件的最佳选择是什么? 【发布时间】:2021-08-01 18:50:24 【问题描述】:我听说过 Kubeflow,创建组件有两种方法。
基于容器 基于函数但是没有解释为什么我应该使用一个或另一个,例如加载一个基于容器的,我需要生成一个 docker 图像推送,并在管道中加载带有规范的 yaml,但是基于函数,我只需要导入函数。
并且为了将 ci-cd 与最新版本一起应用,如果我有一个基于容器的,我可以拥有一个包含所有 yml 的 repo 并使用 load_by_url 加载,但如果它们是一个函数,我可以拥有一个 repo全部并作为一个包加载。
那么您认为基于容器或基于函数的最佳方法是什么。
谢谢。
【问题讨论】:
【参考方案1】:简短的回答是视情况而定,但更细微的回答取决于您想对组件做什么。
作为基础知识,当 KFP 管道被编译时,它实际上是由 Argo Workflows 启动的一系列不同的 YAML。所有这些都需要基于容器才能在 Kubernetes 上运行,即使容器本身具有所有 python。
Python Container Op 的函数是开始使用 Kubeflow Pipelines 的快速方法。它旨在模仿 Airflow 的 python-native DSL。它将获取您的 python 函数并在定义的 Python 容器中运行它。没错,将所有工作封装在同一个 Git 文件夹中会更容易。这种设置非常适合刚开始使用 KFP 并且不介意一些样板快速上手的团队。
当您的团队需要共享工作,或者您拥有一个企业 ML 平台来创建如何在管道中运行特定作业的模板逻辑时,组件确实会变得强大。这些组件可以单独版本化并以相同的方式构建以在您的任何集群上使用(如果您在 AWS 上,基础容器应存储在 docker hub 或 ECR 中)。有输入/输出来规定如何使用组件执行运行。你可以想象 Uber 的一个团队可能会使用 KFP 来获取某个区域内司机数量的数据。组件的输入可以是地理坐标框,也可以是加载数据的时间。该组件将数据保存到 S3,然后将其加载到您的模型中进行训练。如果没有该组件,将会有相当多的样板文件需要跨多个管道和用户复制代码。
我是 AWS 的前任产品经理,负责 SageMaker 和开源 ML 集成,这是我在企业设置方面的经验分享。
【讨论】:
【参考方案2】:但是没有解释为什么我应该使用一个或另一个,例如加载一个基于容器的,我需要生成一个 docker 图像推送,并在管道中加载带有规范的 yaml,但是基于函数,我只需要导入函数。
这里有一些误解。
引擎盖下只有一种组件-基于容器的组件(也有图形组件,但这无关紧要)。
但是,我们的大多数用户喜欢 python,不喜欢构建容器。这就是为什么我开发了一个名为“轻量级 python 组件”的功能,它生成 ComponentSpec/component.yaml
从 python 函数源代码。生成的组件基本运行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_url
将component.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
。
【讨论】:
以上是关于构建 kubeflow 组件的最佳选择是啥?的主要内容,如果未能解决你的问题,请参考以下文章