2

我试图弄清楚如何在本地和 S3 上存储中间 Kedro 管道对象。特别是,假设我在 S3 上有一个数据集:

my_big_dataset.hdf5:
  type: kedro.extras.datasets.pandas.HDFDataSet
  filepath: "s3://my_bucket/data/04_feature/my_big_dataset.hdf5"

我想通过它们的 S3 URI 在目录中引用这些对象,以便我的团队可以使用它们。但是,我想避免每次运行管道时都重新下载数据集、模型权重等,方法是在 S3 副本之外保留本地副本。如何使用 Kedro 镜像文件?

4

1 回答 1

4

这是一个很好的问题,KedroCachedDataSet用于在同一次运行中缓存数据集,当在同一次运行中多次使用/加载数据集时,它处理在内存中缓存数据集。在运行过程中并没有真正相同的东西,一般来说,Kedro 不会做太多持久的东西。

也就是说,在我的脑海中,我可以想到两个(大部分)复制或提供此功能的选项:

  1. catalog在相同的配置环境中使用相同的内容,但TemplatedConfigLoader目录数据集的文件路径如下所示:
my_dataset:
  filepath: ${base_data}/01_raw/blah.csv

并且您在“生产”模式和本地运行时设置base_data为。您可以决定如何在覆盖方法中执行此操作(是否使用(请参阅上面的链接文档)或环境变量或不使用什么。s3://bucket/blahlocal_filepath/datacontextlocal/globals.yml

  1. 使用单独的环境,可能local(这就是它的用途!)在其中您保留目录的单独副本,其中文件路径被替换为本地路径。

否则,您的下一个最佳选择是编写PersistentCachedDataSet类似的CachedDataSet代码,拦截包装数据集的加载/保存,并在第一次加载到您在后续加载时查找的确定位置时制作本地副本。

于 2020-08-09T22:03:18.253 回答