Как передавать данные или файлы между контейнерными компонентами Kubeflow в python - PullRequest
0 голосов
/ 29 сентября 2019

Я рассматриваю 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')

В коде Python для компонента data-collector.py я выбираю набор данных, затем записываю его в output.txt.Я могу читать из файла в том же компоненте, но не внутри data-preprocessor.py, где я получаю FileNotFoundError.

Является ли использование file_outputs недопустимым для контейнерных компонентов Kubeflow или янеправильно использовать его в моем коде?Если это не вариант в моем случае, можно ли программно создавать тома Kubernetes внутри кода Python объявления конвейера и использовать их вместо file_outputs?

...