Как вы можете указать локальный путь InputPath или OutputPath в конвейерах Kubeflow - PullRequest
0 голосов
/ 03 апреля 2020

Я начал использовать конвейеры Kubeflow для запуска обработки данных, обучения и прогнозирования для проекта машинного обучения, и я использую InputPath и OutputhPath для передачи больших файлов между компонентами.

Я хотел бы знать, как, если это возможно, установить путь, по которому OutputPath будет искать файл в компоненте, и где InputPath будет загружать файл в компонент.

В настоящее время код хранит их в заранее определенном месте (например, data/my_data.csv), и было бы идеально, если бы я мог «сказать» InputPath / OutputPath, что это файл, который он должен копировать, вместо того, чтобы переименовать все файлы в соответствии с тем, что ожидает OutputPath, как показано ниже минимального примера.

@dsl.pipelines(name='test_pipeline')
def pipeline():
    pp = create_component_from_func(func=_pre_process_data)()
    # use pp['pre_processed']...

def pre_process_data(pre_processed_path: OutputPath('csv')):
    import os

    print('do some processing which saves file to data/pre_processed.csv')

    # want to avoid this:
    print('move files to OutputPath locations...')
    os.rename(f'data/pre_processed.csv', pre_processed_path)

Естественно, я бы предпочел не обновлять код в соответствии с соглашением об именах конвейера Kubeflow, так как это выглядит как очень плохая практика мне.

Спасибо!

1 Ответ

1 голос
/ 04 апреля 2020

Для облегченных компонентов (таких как в вашем примере) Kubeflow Pipelines создает образ контейнера для вашего компонента и указывает пути для входов и выходов (на основе типов, которые вы используете для украшения функции вашего компонента). Я бы рекомендовал использовать эти пути напрямую, вместо записи в одно место, а затем переименовать файл. Образцы конвейеров Kubeflow следуют этому шаблону.

Для повторно используемых компонентов вы задаете входы и выходы конвейера как часть спецификации YAML для компонента . В этом случае вы можете указать предпочитаемое местоположение для выходных файлов. При этом для создания повторно используемых компонентов требуется немного больше усилий, поскольку вам необходимо создать образ контейнера Docker и спецификацию компонента в YAML.

...