多个小 h5 文件或一个大文件之间最好的选择是啥?

Posted

技术标签:

【中文标题】多个小 h5 文件或一个大文件之间最好的选择是啥?【英文标题】:What is the best beetween multiple small h5 files or one huge?多个小 h5 文件或一个大文件之间最好的选择是什么? 【发布时间】:2019-07-04 08:51:30 【问题描述】:

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

我找不到任何关于以下数据访问和存储的最佳答案:

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

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

【问题讨论】:

【参考方案1】:

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

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

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

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

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

【讨论】:

感谢您的建议!我已经找了多个文件,我会看到瓶颈在哪里,关键点在哪里

以上是关于多个小 h5 文件或一个大文件之间最好的选择是啥?的主要内容,如果未能解决你的问题,请参考以下文章

在hadoop中存储多个小文件的最佳位置是啥

如何在SSIS中将大型Excel文件拆分为多个小文件?

如何把一个压缩好的文件,拆分成几个压缩文件?

文件名的命名规则是啥

搭建fastdfs服务,及单机redis服务,springboot实现h5与fastdfs之间的断点续传,大文件上传,秒传文件和批量上传

从多个文件中读取大数据并在python中聚合数据的最快方法是啥?