使用来自 Python 的 1 个进程使用 HDF5 和 MPI 写入/读取大文件
Posted
技术标签:
【中文标题】使用来自 Python 的 1 个进程使用 HDF5 和 MPI 写入/读取大文件【英文标题】:Writing/reading large files with HDF5 and MPI using 1 process, from Python 【发布时间】:2015-03-15 02:35:54 【问题描述】:当通过 h5py 和 mpi4py 使用并行 HDF5 将大型数据集写入文件时(在直接从 C 中使用 HDF5 和 MPI 时也很有可能),如果将 mpio 驱动程序与单个进程一起使用,我会收到以下错误:
OSError: Can't prepare for write data (Can't convert from size to size_i)
似乎允许的数据集的限制是 4GB,至少当内容是双数组时。如果使用更多进程来分担工作负载,或者如果在没有 mpio 驱动程序的单个 CPU 上完成,则更大的数据集可以正常工作。
这是为什么? size
和 size_i
是指针类型,前者不能保存大于对应于 4GB double[]
的地址吗?这个错误最终对我来说可能不会是一个严重的问题,因为我通常会使用多个进程,但我希望我的代码即使只使用一个进程也能工作。
【问题讨论】:
只是猜测.. MPI 的文件 IO 例程来自于 90 年代中期批准的 MPI-2。 MPI 标准要求count
参数的类型为int
。我认为 64 位 long int
直到 C99 才可用。
正如@eduffy 已经提到的,MPI 标准将 MPI-IO 调用中的数据项计数定义为int
类型。这并不是对原生 MPI 应用程序的真正限制,因为可以通过构造派生的 MPI 数据类型轻松绕过它(这是在 MPI-3 中保持 int
作为计数类型的基本原理)。
【参考方案1】:
我最近遇到了同样的问题,并且挖掘到了这一点:
https://www.hdfgroup.org/ftp/HDF5/releases/hdf5-1.8.1/src/unpacked/src/H5FDmpio.c
您将在哪里看到出现的错误。简而言之,当数组的大小(以字节为单位)大于 2GB 时,就会出现错误。
进一步挖掘后,将我带到了这里: https://www.hdfgroup.org/hdf5-quest.html#p2gb
描述了问题和解决方法的位置。
请看一下。
【讨论】:
以上链接无法访问。有人找到解决此问题的稳定方法吗?以上是关于使用来自 Python 的 1 个进程使用 HDF5 和 MPI 写入/读取大文件的主要内容,如果未能解决你的问题,请参考以下文章
将使用-v7.3(HDF5)保存的Matlab稀疏矩阵加载到Python中并对其进行操作