You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

树莓派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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.03 17:56:05