【问题标题】:Is it possible to do parallel reads on one h5py file using multiprocessing?是否可以使用多处理对一个 h5py 文件进行并行读取?
【发布时间】:2015-03-25 09:29:01
【问题描述】:

我正在尝试加快从 h5py 数据集文件中读取块(将它们加载到 RAM 内存中)的过程。现在我尝试通过多处理库来做到这一点。

pool = mp.Pool(NUM_PROCESSES)
gen = pool.imap(loader, indices)

加载器函数是这样的:

def loader(indices):
    with h5py.File("location", 'r') as dataset:
        x = dataset["name"][indices]

这实际上有时会起作用(这意味着预期的加载时间除以进程数并因此并行化)。但是,大多数情况下它不会,加载时间与按顺序加载数据时一样长。我能做些什么来解决这个问题吗?我知道 h5py 支持通过 mpi4py 进行并行读/写,但我只想知道这对于仅读取是否也是绝对必要的。

【问题讨论】:

  • 我也使用 pool 和 pyspark 来启用 HDF5 的并行 I/O,我不明白为什么它需要多次调用 h5py.File。为什么不只在 loader 函数之外调用一次 h5py.File 然后并行化数据读取过程?

标签: python parallel-processing h5py


【解决方案1】:

h5py 可以并行读取,不需要 MPI 版本。但是为什么你期望在这里加速呢?您的工作几乎完全受 I/O 限制,而不是 CPU 限制。并行进程无济于事,因为瓶颈是您的硬盘,而不是 CPU。如果这种情况下的并行化甚至减慢了整个读取操作,我也不会感到惊讶。 其他意见?

【讨论】:

  • 谢谢,是的,情况似乎如此,但我只是对在某些时候(主要是在开始时)它似乎确实并行化这一事实感到困惑。一段时间后,虽然它确实需要比串行读取更长的时间。
  • 可能是缓存和/或分块起作用。但这只是猜测。
  • 我刚刚意识到我可能面临同样的问题here .. 这可能吗? ^^
  • 如前所述,您很可能受 IO 限制,偶尔的性能提升来自缓存。如果您启用压缩(例如 lzf),如果磁盘速度确实是限制因素,这可能会有所帮助。
猜你喜欢
  • 2012-01-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-06-10
  • 1970-01-01
相关资源
最近更新 更多