在我的代码中,我使用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)
我想从mpi中移开,使用dask进行并行化。在dask中可以使用并行hdf5吗?我还需要依赖mpi吗?如果是这样的话,是否有更好的方法来存储数据?谢谢
发布于 2016-12-28 18:52:34
这是一个既棘手又复杂的问题。
通常,HDF5对并行MPI读写进行了高度优化。在MPI之外很难获得相同级别的支持。
此外,这个问题很难解决,因为人们使用Dask和HDF5的方式不同,有些人在同一个进程中使用多个线程(h5py不是线程安全),而另一些人则在同一个硬盘上使用多个进程,或者在一个网络文件系统上使用多台计算机。此外,用户通常使用多个HDF5文件,例如,每天有一个文件的数据。
Dask通常通过使用锁来处理并行读写HDF5。如果您在一个进程中,那么这是一个普通的threading.Lock
对象。通常,这对性能影响不大,因为读取HDF5文件通常是I/O,而不是CPU绑定。有一点争议,但没什么可担心的。
在分布式设置中,我们使用可串行化的锁,以防止在任何特定进程中多线程并发访问,但不要阻止两个进程之间的冲突。通常,这并不是一个问题,因为在读取时发生冲突是很好的,只要您不在同一个过程中,而且人们通常会编写与HDF5块一致的内聚块。
人们每天都愉快地使用HDF5与Dask.array并行使用。然而,我并不确信一切都是万无一失的。我怀疑这是有可能策划一个破案。
(此外,这一特定方面正在迅速演变。这个答案可能很快就过时了
https://stackoverflow.com/questions/41367568
复制相似问题