2

我已经开始使用 Kubeflow Pipelines 为机器学习项目运行数据处理、训练和预测,并且我正在使用 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 管道命名约定,因为这对我来说似乎是非常糟糕的做法。

谢谢!

4

1 回答 1

2

更新 - 请参阅 ark-kun 的评论,我原来的答案中的方法已被弃用,不应使用。最好让 Kubeflow Pipelines 指定应该存储管道工件的位置。


对于轻量级组件(例如您的示例中的组件),Kubeflow Pipelines 为您的组件构建容器映像并指定输入和输出的路径(基于您用于装饰组件功能的类型)。我建议直接使用这些路径,而不是写入一个位置然后重命名文件。Kubeflow Pipelines 示例遵循此模式。

对于可重用组件,您将管道输入和输出定义为组件的 YAML 规范的一部分。在这种情况下,您可以指定输出文件的首选位置。话虽如此,创建可重用组件需要更多努力,因为您需要在 YAML 中构建 Docker 容器映像和组件规范。

于 2020-04-03T21:41:47.170 回答