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