2023年Linux环境下编译构建支持MPI(基于并行HDF5)的h5py方法
2023年Linux环境下编译构建支持MPI(基于并行HDF5)的h5py方法
我之前也碰到过一模一样的报错,折腾了好一阵才搞定,2023年在Linux上编译支持MPI的h5py其实步骤挺清晰的,给你整理了详细流程:
一、先确认MPI环境已安装
并行HDF5和MPI版h5py都依赖MPI环境,先检查系统有没有装:
mpicc --version
如果没输出版本信息,就用系统包管理器安装:
- Ubuntu/Debian系:
sudo apt update && sudo apt install openmpi-bin libopenmpi-dev - CentOS/RHEL系:
sudo yum install openmpi-devel
安装后记得激活MPI环境,比如CentOS可能需要执行source /etc/profile.d/openmpi.sh。
二、编译安装并行版HDF5
默认系统自带的HDF5大多是串行版,必须自己编译并行版本:
- 下载HDF5源码(推荐2023年的稳定版,比如1.14.3),解压后进入源码目录:
wget https://support.hdfgroup.org/ftp/HDF5/releases/hdf5-1.14/hdf5-1.14.3/src/hdf5-1.14.3.tar.gz tar -xzf hdf5-1.14.3.tar.gz cd hdf5-1.14.3 - 配置编译参数,开启并行支持并指定安装路径:
这里./configure --enable-parallel --prefix=/usr/local/hdf5-parallel--prefix可以改成你自己想安装的路径,比如~/local/hdf5-parallel(如果用用户目录就不用sudo)。 - 编译并安装:
make -j$(nproc) # 用所有CPU核心加速编译 sudo make install # 如果prefix是系统目录需要sudo - 配置环境变量,让系统找到并行HDF5:
编辑~/.bashrc或者~/.zshrc,加入:
然后生效环境变量:export HDF5_DIR=/usr/local/hdf5-parallel export LD_LIBRARY_PATH=$HDF5_DIR/lib:$LD_LIBRARY_PATHsource ~/.bashrc
三、编译安装支持MPI的h5py
不能直接用pip install h5py(默认是串行版),必须从源码编译:
- 先卸载已有的串行版h5py:
pip uninstall -y h5py - 用pip从源码编译安装,指定MPI支持:
这里HDF5_MPI=1 pip install --no-binary=h5py h5pyHDF5_MPI=1是关键,告诉编译脚本要启用MPI支持;--no-binary=h5py强制从源码编译,不用预编译的二进制包。
如果是从GitHub克隆h5py源码安装,进入源码目录后执行:HDF5_MPI=1 python setup.py install
四、验证是否成功
写个简单的测试脚本test_h5py_mpi.py:
import h5py from mpi4py import MPI comm = MPI.COMM_WORLD rank = comm.Get_rank() # 用mpio驱动打开文件 with h5py.File("test_mpi.h5", "a", driver="mpio", comm=comm) as f: if rank == 0: # 进程0创建数据集 f.create_dataset("test_data", data=[1, 2, 3, 4]) comm.Barrier() # 等待所有进程同步 if rank == 1: # 进程1读取数据集 print(f"Process {rank} reads data: {f['test_data'][:]}")
然后用MPI启动2个进程运行:
mpiexec -n 2 python test_h5py_mpi.py
如果没有报错,并且进程1能正确输出数据集内容,就说明MPI版h5py已经成功安装啦!
一些注意事项
- 如果编译时提示找不到MPI或者HDF5,先检查环境变量
HDF5_DIR和LD_LIBRARY_PATH是否正确配置。 - 确保
mpi4py已经安装,执行pip install mpi4py即可,它会自动链接系统的MPI环境。 - 如果用conda环境,建议先激活conda环境再执行所有步骤,避免和系统包冲突。
备注:内容来源于stack exchange,提问作者JamesNULLiu




