gpt4 book ai didi

kubeflow - 如何在python中的Kubeflow容器化组件之间传递数据或文件

转载 作者:行者123 更新时间:2023-12-04 00:24:09 26 4
gpt4 key购买 nike

我正在探索 Kubeflow 作为部署和连接典型 ML 管道的各种组件的选项。我使用 docker 容器作为 Kubeflow 组件,到目前为止我一直无法成功使用 ContainerOp.file_outputs对象在组件之间传递结果。

根据我对该功能的理解,创建并保存到声明为 file_outputs 之一的文件中。一个组件应该使其持久化并且可以被后续组件读取。

这就是我试图在我的管道 python 代码中声明它的方式:

import kfp.dsl as dsl 
import kfp.gcp as gcp

@dsl.pipeline(name='kubeflow demo')
def pipeline(project_id='kubeflow-demo-254012'):
data_collector = dsl.ContainerOp(
name='data collector',
image='eu.gcr.io/kubeflow-demo-254012/data-collector',
arguments=[ "--project_id", project_id ],
file_outputs={ "output": '/output.txt' }
)
data_preprocessor = dsl.ContainerOp(
name='data preprocessor',
image='eu.gcr.io/kubeflow-demo-254012/data-preprocessor',
arguments=[ "--project_id", project_id ]
)
data_preprocessor.after(data_collector)
#TODO: add other components
if __name__ == '__main__':
import kfp.compiler as compiler
compiler.Compiler().compile(pipeline, __file__ + '.tar.gz')

data-collector.py 的 python 代码中组件我获取数据集然后将其写入 output.txt .我可以从同一组件内的文件中读取,但不能在 data-preprocessor.py 内读取我在哪里得到一个 FileNotFoundError .

是使用 file_outputs对基于容器的 Kubeflow 组件无效,还是我在代码中错误地使用了它?如果在我的情况下这不是一个选项,是否可以在管道声明 python 代码中以编程方式创建 Kubernetes 卷并使用它们而不是 file_outputs ?

最佳答案

在一个 Kubeflow 管道组件中创建的文件是容器的本地文件。要在后续步骤中引用它,您需要将其传递为:

data_preprocessor = dsl.ContainerOp(
name='data preprocessor',
image='eu.gcr.io/kubeflow-demo-254012/data-preprocessor',
arguments=["--fetched_dataset", data_collector.outputs['output'],
"--project_id", project_id,
]

注: data_collector.outputs['output']将包含文件 /output.txt 的实际字符串内容(不是文件的路径)。如果您希望它包含文件的路径,您需要将数据集写入共享存储(如 s3 或已安装的 PVC 卷)并将共享存储的路径/链接写入 /output.txt . data_preprocessor然后可以根据路径读取数据集。

关于kubeflow - 如何在python中的Kubeflow容器化组件之间传递数据或文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58150368/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com