【问题标题】:Reading hdf5 file using h5py slows down over time使用 h5py 读取 hdf5 文件会随着时间的推移而变慢
【发布时间】:2018-03-14 01:14:02
【问题描述】:

我有一个形状为 80000 * 401408 的 hdf5 文件。我需要以 64 大小的批次从中读取数据,但索引可以是随机的,比如 (5, 0, 121, .., 2)。

问题在于,虽然最初的读取非常一致,并且一个批次需要 0.5 秒才能完成,但一段时间后,有些批次需要更长的时间长达 10 秒,而有些批次仍在快速读取。我观察到随着越来越多的读取发生,读取过程正在减慢。

hf = h5py.File( conv_file,'r')
conv_features = hf['conv_features']
while True:
    conv_batch = [None for i in range(64)]
    for i in range(0, 64):
        conv_batch[count] = np.reshape(conv_features[some_random_index], [14, 14, 2048] )
    # time for each of the above reads for conv_bacth is different.. varies from 0.5 to 5 seconds.. and slows down over time.

我没有使用块

【问题讨论】:

  • 确定您没有耗尽内存并开始使用您的交换设备或类似的东西吗?
  • 不,我没有内存不足。随着时间的推移,这个过程变得越来越慢。我正在重用相同的变量,并且只读取一次对 hdf5 文件的引用。
  • 不太确定是否可以从您展示的示例中确定问题。我也不确定你为什么在这里使用deep-learning 标签。也许发布您的实际代码,而不仅仅是这个小摘录。
  • displayname 是对的,如果我们没有足够的信息来重现它,就很难诊断出这个问题。
  • 我想知道 hdf5 是否通常具有可变时间读取(因为随机索引访问)读取 64 个向量的时间跨度从 0.5 到 5 秒,正如我所提到的,它变慢了随着时间的推移而下降。除了上述之外,几乎没有什么与 hdf5 有任何关系。

标签: python hdf5 h5py hdf


【解决方案1】:

您是否尝试过使用数据集控制块大小。将块大小设置为合理且经常访问的部分。

例如,如果您通常每行访问 80000 * 401408 数据, 如果块是 (1, 401408) 或者可能 (1, 200704)。

根据您的访问模式,块大小会极大地影响访问时间。您也可以考虑使用压缩。

【讨论】:

    猜你喜欢
    • 2014-02-04
    • 2018-06-25
    • 1970-01-01
    • 2021-07-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-07-28
    相关资源
    最近更新 更多