多个小 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 文件或一个大文件之间最好的选择是啥?的主要内容,如果未能解决你的问题,请参考以下文章
搭建fastdfs服务,及单机redis服务,springboot实现h5与fastdfs之间的断点续传,大文件上传,秒传文件和批量上传