在我的代码中,我使用 mpi (mpi4py/h5py) 在 hdf5 文件中并行保存多个处理过的图像(numpy 数组)。为此,需要使用 driver=mpio
打开文件。选项。
import h5py
from mpi4py import MPI
file_hdl=h5py.File(file_lath,'r+',driver='mpio', comm=MPI.COMM_WORLD)
最佳答案
这是一个困难而复杂的问题。
通常 HDF5 针对并行 MPI 读取和写入进行了高度优化。在 MPI 之外很难获得相同级别的支持。
此外,这个问题很难,因为人们使用 Dask 和 HDF5 的方式不同,有些人在同一进程中使用多个线程(h5py 不是线程安全的),而其他人则在同一硬盘驱动器上使用多个进程,或通过网络文件系统使用多台计算机。此外,用户经常使用多个 HDF5 文件,例如每天有一个文件的数据。
Dask 通常通过使用锁来处理对 HDF5 的并行读取和写入。如果您在单个进程中,那么这是正常的 threading.Lock
目的。通常这不会对性能产生太大影响,因为从 HDF5 文件读取通常是 I/O 而不是 CPU 限制。有一些争论,但不必担心。
在分布式设置中,我们使用可序列化锁,它可以防止任何特定进程中的多线程并发访问,但不会阻止两个进程相互冲突。通常这不是问题,因为只要您不在同一个进程中,读取冲突就可以了,而且人们通常会编写与 HDF5 块对齐的内聚块。
人们每天愉快地将 HDF5 与 Dask.array 并行使用。但是,我不相信一切都是万无一失的。我怀疑有可能设计一个破案。
(此外,这个特定方面正在迅速发展。这个答案可能很快就会过时)
https://github.com/pydata/xarray/issues/798
https://stackoverflow.com/questions/41367568/