Мы определяем несколько компонентов в конвейерах kubeflow, используя @dsl.containerop
.
Требование состоит из двух этапов.
Сначала нам нужно запустить задачу загрузки, которая принимает входные данные
url
и загружает файл внутри контейнера.Нам нужно использовать файл, сгенерированный на первом шаге, и запустить программу Python - это будет сделано за секунды containerop.
Пример кода приведен ниже.
@dsl.component
def download(url: str, output_file: OutputPath(str)):
return dsl.ContainerOp(
name='Download',
image='busybox:latest',
command=["sh", "-c"],
arguments=["wget %s " % url, output_file)],
)
И вышеупомянутый код будет вызываться с использованием
download_task = download(url=<URL>")
Согласно спецификации компонента https://www.kubeflow.org/docs/components/pipelines/reference/component-spec/ - выходной путь указывать не нужно.
https://github.com/kubeflow/pipelines/blob/d106a6533bf4e1cbda4364560bc7526cb67d4eb2/samples/tutorials/Data%20passing%20in%20python%20components/Data%20passing%2020inpy#L69 - @func_to_container_op
- Мы могли увидеть способ получить вывод с использованием типа OutputPath.
Есть ли способ добиться этого в dsl.containerop
. Мы не хотим жестко кодировать выходной путь с помощью file_outputs
.