MPICH4.1在Ubuntu下指定36核运行WRF却串行执行的问题求助
WRF并行运行异常及MPICH GPU初始化报错的可能原因
我在Ubuntu机器上使用GNU编译器安装了MPICH4.1,最初能成功用mpirun在36核上运行WRF作业,但现在执行相同作业时仅以单核心串行运行。
执行命令mpirun -np 36 ./wrf.exe的输出为:
starting wrf task 0 of 1 starting wrf task 0 of 1 starting wrf task 0 of 1 starting wrf task 0 of 1 starting wrf task 0 of 1 starting wrf task 0 of 1
执行mpivars时出现如下错误:
Abort(470406415): Fatal error in internal_Init_thread: Other MPI error, error stack: internal_Init_thread(67): MPI_Init_thread(argc=0x7fff8044f34c, argv=0x7fff8044f340, required=0, provided=0x7fff8044f350) failed MPII_Init_thread(222)...: gpu_init failed
机器并未配备GPU,mpi version输出为:
HYDRA build details: Version: 4.1 Release Date: Fri Jan 27 13:54:44 CST 2023 CC: gcc Configure options: '--disable-option-checking' '--prefix=/home/MODULES' '--cache-file=/dev/null' '--srcdir=.' 'CC=gcc' 'CFLAGS= -O2' 'LDFLAGS=' 'LIBS=' 'CPPFLAGS= -DNETMOD_INLINE=__netmod_inline_ofi__ -I/home/MODULES/mpich-4.1/src/mpl/include -I/home/MODULES/mpich-4.1/modules/json-c -D_REENTRANT -I/home/MODULES/mpich-4.1/src/mpi/romio/include -I/home/MODULES/mpich-4.1/src/pmi/include -I/home/MODULES/mpich-4.1/modules/yaksa/src/frontend/include -I/home/MODULES/mpich-4.1/modules/libfabric/include' Process Manager: pmi Launchers available: ssh rsh fork slurm ll lsf sge manual persist Topology libraries available: hwloc Resource management kernels available: user slurm ll lsf sge pbs cobalt Demux engines available: poll select
可能的原因分析
MPI环境变量触发不必要的GPU检测
尽管机器无GPU,MPICH仍可能因环境变量异常尝试初始化GPU:- 检查
CUDA_VISIBLE_DEVICES环境变量,若该变量被错误设置(比如有非空值),执行unset CUDA_VISIBLE_DEVICES清空后重试; - MPICH4.1默认会自动检测GPU硬件,可通过设置
export MPICH_GPU_SUPPORT_ENABLED=0禁用GPU支持,再运行WRF测试。
- 检查
WRF的MPI链接配置损坏
系统更新、环境变量变更可能导致WRF运行时无法正确关联MPICH的MPI库,每个进程独立以串行模式启动:- 检查WRF编译日志,确认编译阶段确实链接了MPICH的MPI库;
- 重新编译WRF,确保编译时的MPI环境(
PATH、LD_LIBRARY_PATH等)与当前运行时一致。
MPICH进程管理器配置异常
从版本信息看,MPICH使用pmi进程管理器,若该组件配置出错,会导致mpirun无法协调多进程:- 尝试指定fork进程管理器运行:
mpirun -np 36 --mca pmix_fork 1 ./wrf.exe; - 检查
PMI_RANK等pmi相关环境变量,若存在错误设置则清空。
- 尝试指定fork进程管理器运行:
系统资源限制或进程绑定错误
系统CPU核心限制、MPICH进程绑定配置异常,会导致多进程无法分配到不同核心,表现为串行运行:- 用
taskset -c -p <WRF进程PID>查看进程的CPU绑定情况; - 在
mpirun命令中添加--bind-to none参数禁用进程绑定,再测试运行。
- 用
MPICH安装文件损坏
磁盘问题、误操作可能导致MPICH安装文件损坏,引发运行时功能异常:- 重新安装MPICH,确保安装过程无报错;
- 安装后确认
PATH和LD_LIBRARY_PATH正确指向MPICH的bin和lib目录。
内容的提问来源于stack exchange,提问作者Ajay
相关产品推荐
相关产品推荐

