hdf5 - dask 和并行 hdf5 写入

在我的代码中,我使用 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 针对并行 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/

相关文章:

unity3d - 切换场景时网格会重新加载吗?

cherrypy - 更改 Content-Type 后返回的内容未自动编码

class - 为什么我不能定义 `delete` 方法?

Ansible - 使用用户输入选择变量

c - 这是什么意思,我该如何纠正它 *** 检测到堆栈粉碎 *** : ./array1outpu

android - 使用 DownloadManager.Request 从 url 下载文件时下载

compiler-construction - 这个产生式规则是否左递归?

haskell - 如何使 Pipe 与 Haskell 的 Pipe 库并发?

spring-mvc - 处理 org.thymeleaf.exceptions.TemplateI

haskell - Machines 和 Conduits(或其他类似库)之间的概念区别是什么?