【问题标题】:dask and parallel hdf5 writingdask 和并行 hdf5 写作
【发布时间】:2017-05-13 01:30:05
【问题描述】:

在我的代码中,我使用 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吗?如果是这样,有没有更好的方法来存储数据? 谢谢

【问题讨论】:

    标签: hdf5 h5py scikit-image dask mpi4py


    【解决方案1】:

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

    通常,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

    【讨论】:

      猜你喜欢
      • 2022-07-07
      • 1970-01-01
      • 2017-07-20
      • 2020-11-23
      • 2017-02-21
      • 1970-01-01
      • 1970-01-01
      • 2018-03-19
      • 2020-04-14
      相关资源
      最近更新 更多