多个小的 h5 文件或一个巨大的文件之间最好的是什么?

Nan*_*anc 6 multithreading bigdata h5py

我正在处理巨大的卫星数据,我将这些数据分成小块以提供给深度学习模型。我正在使用 pytorch,这意味着数据加载器可以使用多线程。[设置:python,Ubuntu 18.04]

我找不到任何答案在以下之间的数据访问和存储方面是最好的:

  1. 将所有数据注册到一个巨大的 HDF5 文件中(超过 20Go)
  2. 将其拆分为多个(超过 16 000 个)小的 HDF5 文件(大约 1.4Mo)。

多线程多次访问一个文件有什么问题吗?在另一种情况下,拥有那么多文件会产生影响吗?

Szy*_*zke 6

如果我是你,我会选择多个文件(但要读到最后)。

直观地说,您可以将至少一些文件加载​​到内存中,从而稍微加快进程(如果使用 20GB,您不太可能这样做,因为 RAM 访问速度要快得多)。

您可以torch.utils.data.Dataset在第一次过去期间缓存这些示例(在自定义实例中)并检索缓存的示例(比如在list或其他内存效率更高的数据结构中,最好具有更好的缓存位置)而不是从磁盘读取(类似于 Tensorflowtf.data.Dataset对象中的方法)和它的cache方法)。

另一方面,这种方法更麻烦,更难正确实现,但如果您使用多个线程读取文件,则应该没问题,并且此操作不应该有任何锁定。

请记住使用 pytorch 的分析器 ( torch.utils.bottleneck)衡量您的方法,以查明确切的问题并验证解决方案。

  • 感谢这些建议!我已经查看了多个文件,我会看看瓶颈在哪里 (2认同)