Termux Ubuntu环境运行MPI程序报错:PMIx服务器监听线程启动失败求助
解决Termux Ubuntu环境中运行Python MPI程序的PMIx权限错误
问题场景
在Termux的Ubuntu环境中执行命令:
mpirun --allow-run-as-root -np 1 python3 index.py
出现权限相关错误导致PMIx服务启动失败,报错信息如下:
root@localhost:~/capstone/mpi# mpirun --allow-run-as-root -np 1 python3 index.py [localhost:18945] opal_ifinit: ioctl(SIOCGIFHWADDR) failed with errno=13 [localhost:18945] pmix_ifinit: ioctl(SIOCGIFHWADDR) failed with errno=13 [localhost:18945] ptl_tool: problems getting address for index 122 (kernel index -1) -------------------------------------------------------------------------- The PMIx server's listener thread failed to start. We cannot continue. --------------------------------------------------------------------------
Python代码本身无逻辑问题:
from mpi4py import MPI comm = MPI.COMM_WORLD worker = comm.Get_rank() size = comm.Get_size() print(f"Worker {worker} of Size {size}")
错误原因
Termux中的Ubuntu容器默认没有CAP_NET_RAW权限,导致MPI无法调用ioctl(SIOCGIFHWADDR)获取部分网络接口的硬件地址,进而引发PMIx初始化失败。
解决方案
方案1:指定PMIx仅使用回环接口
运行命令时添加环境变量,强制PMIx只使用回环接口(lo),避免检测无权限访问的网络接口:
PMIX_MCA_pmix_iface_include=lo mpirun --allow-run-as-root -np 1 python3 index.py
方案2:排除无权限的网络接口
创建或修改OpenMPI配置文件~/.openmpi/mca-params.conf,添加以下内容(替换成环境中实际无权限的接口名称,比如docker0、eth0等):
opal_if_exclude = docker0,eth0 pmix_if_exclude = docker0,eth0
保存后重新执行原命令即可。
方案3:强制使用TCP和本地通信组件
使用mpiexec替代mpirun,并指定通信组件为self(本地)和tcp:
mpiexec --allow-run-as-root --mca btl self,tcp -np 1 python3 index.py
内容的提问来源于stack exchange,提问作者user24471273
相关产品推荐
相关产品推荐

