你好,我正在尝试在步骤之间共享文件,为了做到这一点,我有以下代码:
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
,下载并保存卷中的图片,但是当第二步开始时卷是空的。
那么我如何将数据从一个到另一个?
谢啦
请查看我对关于卷的类似问题的回答: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教程教用户应该通过卷传递数据?