树莓派400上MPI执行结果不符预期,请求排查配置异常原因
MPI Scatter功能异常排查:多进程均显示Rank 0输出
环境与操作步骤
- 硬件:树莓派400
- 系统:64位树莓派系统
- 安装操作:
- 通过
sudo apt install mpich安装MPICH - 通过pip安装mpi4py
- 通过
测试代码:
from mpi4py import MPI comm = MPI.COMM_WORLD size = comm.Get_size() rank = comm.Get_rank() if rank == 0: data = [(x+1)**x for x in range(size)] print('we will be scattering:',data) else: data = None data = comm.scatter(data, root=0) print('rank',rank,'has data:',data)
执行命令:
mpiexec -n 3 python test.py
实际输出:
pi@raspberrypi:~/FYP $ mpiexec -n 3 python test.py we will be scattering: [1] rank 0 has data: 1 we will be scattering: [1] rank 0 has data: 1 we will be scattering: [1] rank 0 has data: 1
问题原因
核心问题是mpi4py与系统安装的MPICH版本不兼容/绑定不匹配:
- pip默认安装的mpi4py可能链接了系统自带的OpenMPI或其他MPI实现,而非你通过apt安装的MPICH
- 当mpiexec(来自MPICH)启动进程时,mpi4py加载的MPI库和启动器不匹配,导致每个进程无法形成统一的MPI通信域,每个进程都认为自己是rank 0,通信域大小size=1,因此scatter的数据源始终是
[1],且所有进程都输出rank 0的内容
解决方法
方法1:使用apt安装匹配版本的mpi4py
卸载pip安装的mpi4py后,直接用系统包管理器安装与MPICH匹配的版本:
pip uninstall -y mpi4py sudo apt install python3-mpi4py
方法2:重新编译mpi4py绑定MPICH
卸载现有mpi4py后,强制从源码编译,让mpi4py链接到系统的MPICH:
pip uninstall -y mpi4py pip install mpi4py --no-binary :all:
编译前确保MPICH的路径已加入环境变量(通常apt安装的MPICH会自动配置)。
内容的提问来源于stack exchange,提问作者Evan Christan123
相关产品推荐
相关产品推荐

