我已经开始使用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管道命名约定,因为这对我来说似乎是非常糟糕的做法。
谢谢!
答案 0 :(得分:2)
更新-请参阅ark-kun的评论,我原来的答案中的方法已被弃用,不应使用。最好让Kubeflow Pipelines指定应该在哪里存储管道的工件。
对于轻量级组件(例如示例中的组件),Kubeflow Pipelines为您的组件构建容器映像,并指定输入和输出的路径(基于您用来装饰组件函数的类型)。我建议直接使用这些路径,而不要写入一个位置,然后重命名文件。 Kubeflow Pipelines samples遵循此模式。
对于reusable components,您将管道输入和输出定义为YAML specification for the component的一部分。在这种情况下,您可以为输出文件指定首选位置。话虽如此,但由于需要在YAML中构建Docker容器映像和组件规范,因此可重复使用的组件需要花更多的精力来创建。