提问者:小点点

kuveflow增加丢失的数据


你好,我正在尝试在步骤之间共享文件,为了做到这一点,我有以下代码:

VOLUME_NAME_PATH = 'pictures'
VOLUME_PATH = f'/{VOLUME_NAME_PATH}'
V1_VOLUME = k8s_client.V1Volume(name=VOLUME_NAME_PATH)
V1_VOLUME_MOUNT = k8s_client.V1VolumeMount(
                    mount_path=VOLUME_PATH,
                    name=VOLUME_NAME_PATH
                )

def pictures_pipeline():
    download_images_op_step = download_images_op(volume_path=VOLUME_PATH) \
        .add_volume(V1_VOLUME) \
        .add_volume_mount(V1_VOLUME_MOUNT)
    compress_images_op_step = compress_images_op(volume_path=VOLUME_PATH) \
        .add_volume(V1_VOLUME) \
        .add_volume_mount(V1_VOLUME_MOUNT)

    compress_images_op_step.after(download_images_op_step)

正如你所看到的,我正在创建一个V1_VOLUMNE,并为管道中的所有步骤挂载相同的内容。

第一步download_images_op_step,下载并保存卷中的图片,但是当第二步开始时卷是空的。

那么我如何将数据从一个到另一个?

谢啦


共1个答案

匿名用户

请查看我对关于卷的类似问题的回答:https://stackoverflow.com/a/67898164/1497385

简而言之,卷的使用不是KFP中组件之间传递数据的支持方式。我不是说它不能工作,但是如果开发人员放弃了官方支持的数据传递方法,他们就只能靠自己了。

在没有KFP数据传递的情况下使用KFP非常接近于根本不使用KFP…

以下是如何正确传递数据:

from kfp.components import InputPath, OutputPath, create_component_from_func

def download_images(
    url: str,
    output_path: OutputPath(),
):
    ...
    # Create directory at output_path
    # Put all images into it

download_images_op = create_component_from_func(download_images)

def compress_images(
    input_path: InputPath(),
    output_path: OutputPath(),
):
    # read images from input_path
    # write results to output_path

compress_images_op = create_component_from_func(compress_images)

def my_pipeline():
    images = download_images_op(
        url=...,
    ).outputs["output"]

    compressed_images = compress_images_op (
        input=images,
    ).outputs["output"]

您还可以在此repo中找到许多真实世界组件的示例:https://github.com/Ark-kun/pipeline_components/tree/master/components

附言:作为一个小团队,我们花了很多时间回答用户关于卷不起作用的问题,尽管官方留档和所有示例和教程都显示了如何使用正确的方法,并且从不建议使用卷。我想知道这是从哪里来的。互联网上是否有一些非官方的KFP教程教用户应该通过卷传递数据?