anaconda安装支持mpi并行化的h5py
参考github上面的提问,可以用conda install -c conda-forge "h5py>=2.9=mpi*"
通过conda安装支持mpi并行的h5py,其中2.9是这个channel里面支持mpi的第一个版本。
利用以下代码测试,来源于h5py文档:
from mpi4py import MPI
import h5py
rank = MPI.COMM_WORLD.rank # The process ID (integer 0-3 for 4-process run)
f = h5py.File('parallel_test.hdf5', 'w', driver='mpio', comm=MPI.COMM_WORLD)
dset = f.create_dataset('test', (4,), dtype='i')
dset[rank] = rank
f.close()
可以用h5pcc -showconfig
查看版本以及是否并行安装(会发现没有官方文档里面给出的h5cc
指令,或者位置不对)。
但是,截止到作者测试时候(2021年11月份),这种方法安装的h5py
在并行写入的时候不支持超过2GB
的写入,会出现报错:
OSError: Can't write data (can't convert from size to size_i)
测试代码为:
from mpi4py import MPI
import h5py
import numpy as np
rank = MPI.COMM_WORLD.rank # The process ID (integer 0-3 for 4-process run)
f = h5py.File('parallel_test.hdf5', 'w', driver='mpio', comm=MPI.COMM_WORLD)
size = 500000000
dset = f.create_dataset('test', (2*size,), dtype='f8')
dset[rank*size:(rank+1)*size] = np.random.rand(size)
f.close()
根据HDF5帮助文档的一个问题,对于HDF5-1.10.2
之前的版本会有这个限制(虽然查看发现安装的版本是1.10.6
,已经比1.10.2
要高了,但是实测不行,之后实测的结果是1.12.1
可以),这和MPI的并行I/O操作工具 ROMIO 有关,详见这个博客,一种解决办法是多开一些进程保证每一个进程的单次写入小于2GB。更多关于hdf5的问答可参照并行HDF5帮助文档。作者认为这可能是因为与这个版本共同安装的mpi4py
版本过低导致的。
如果需要支持单次读写高于2GB的h5py,需要自己安装hdf5。作者在Python3.6.13
下进行测试。
使用conda install -c conda-forge hdf5=*=*mpich*
来安装(来自github的问答),也可以用conda install -c conda-forge hdf5=1.12.1=*mpich*
指定安装版本,可以用--force-reinstall
强制重装。
然后使用CC="mpicc" HDF5_MPI="ON" pip install --no-binary=h5py --no-cache-dir h5py
来安装支持并行的h5py
(见h5py文档)。
注意,以上安装需要gcc
,如果没有,使用conda install -c conda-forge gcc
来安装。