dask与并行hdf5写入

dask与并行hdf5写入,hdf5,h5py,scikit-image,dask,mpi4py,Hdf5,H5py,Scikit Image,Dask,Mpi4py,在我的代码中,我使用mpi(mpi4py/h5py)将多个处理过的图像(numpy数组)并行保存在hdf5文件中。为此,需要使用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吗?如果是,有没有更好的方法来

在我的代码中,我使用mpi(mpi4py/h5py)将多个处理过的图像(numpy数组)并行保存在hdf5文件中。为此,需要使用
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吗?如果是,有没有更好的方法来存储数据?
谢谢

这是一个困难而复杂的问题

通常,HDF5针对并行MPI读写进行了高度优化。在MPI之外很难获得相同级别的支持

此外,这个问题很难回答,因为人们使用Dask和HDF5的方式不同,一些人在同一进程中使用多个线程(h5py不是线程安全的),而另一些人在同一硬盘上使用多个进程,或者通过网络文件系统使用多台计算机。此外,用户通常使用几个HDF5文件,例如,每天有一个文件的数据

Dask通常通过使用锁来处理对HDF5的并行读写。如果您处于单个进程中,则这是一个正常的
线程化.Lock
对象。通常这不会对性能产生太大影响,因为读取HDF5文件通常是I/O,而不是CPU限制。有一些争论,但没什么好担心的

在分布式设置中,我们使用可序列化锁,它可以防止任何特定进程中的多线程并发访问,但不会阻止两个进程相互冲突。通常这不是一个问题,因为只要您不在同一个过程中,并且人们通常编写与HDF5块对齐的内聚块,读冲突就可以了

人们每天都乐于将HDF5与Dask.array并行使用。然而,我不相信一切都是万无一失的。我怀疑设计一个破案是可能的

(此外,这一方面正在迅速发展。这个答案可能很快就会过时)