是否可以使用多处理对一个 h5py 文件进行并行读取?
Is it possible to do parallel reads on one h5py file using multiprocessing?
我正在尝试加快从 h5py 数据集文件中读取块(将它们加载到 RAM 内存中)的过程。现在我尝试通过多处理库来做到这一点。
pool = mp.Pool(NUM_PROCESSES)
gen = pool.imap(loader, indices)
loader函数是这样的:
def loader(indices):
with h5py.File("location", 'r') as dataset:
x = dataset["name"][indices]
这有时确实有效(这意味着预期的加载时间除以进程数并因此并行化)。然而,大多数时候它不会,加载时间只是保持与顺序加载数据时一样高。我能做些什么来解决这个问题吗?我知道 h5py 通过 mpi4py 支持并行 read/writes,但我只想知道这对于只读是否也是绝对必要的。
并行读取h5py没问题,不需要MPI版本。但是为什么你期望这里有加速呢?您的工作几乎完全 I/O 受限,而不是 CPU 受限。并行进程无济于事,因为瓶颈是您的硬盘,而不是 CPU。如果这种情况下的并行化甚至减慢了整个读取操作,我也不会感到惊讶。
其他意见?
我正在尝试加快从 h5py 数据集文件中读取块(将它们加载到 RAM 内存中)的过程。现在我尝试通过多处理库来做到这一点。
pool = mp.Pool(NUM_PROCESSES)
gen = pool.imap(loader, indices)
loader函数是这样的:
def loader(indices):
with h5py.File("location", 'r') as dataset:
x = dataset["name"][indices]
这有时确实有效(这意味着预期的加载时间除以进程数并因此并行化)。然而,大多数时候它不会,加载时间只是保持与顺序加载数据时一样高。我能做些什么来解决这个问题吗?我知道 h5py 通过 mpi4py 支持并行 read/writes,但我只想知道这对于只读是否也是绝对必要的。
并行读取h5py没问题,不需要MPI版本。但是为什么你期望这里有加速呢?您的工作几乎完全 I/O 受限,而不是 CPU 受限。并行进程无济于事,因为瓶颈是您的硬盘,而不是 CPU。如果这种情况下的并行化甚至减慢了整个读取操作,我也不会感到惊讶。 其他意见?