bash: /usr/bin/hydra_pmi_proxy: 没有这样的文件或目录
Posted
技术标签:
【中文标题】bash: /usr/bin/hydra_pmi_proxy: 没有这样的文件或目录【英文标题】:bash: /usr/bin/hydra_pmi_proxy: No such file or directory 【发布时间】:2015-08-16 19:04:06 【问题描述】:按照Setting Up an MPICH2 Cluster in Ubuntu 教程,我正在努力设置 MPI 集群。我有东西在运行,我的机器文件是这样的:
pythagoras:2 # this will spawn 2 processes on pythagoras
geomcomp # this will spawn 1 process on geomcomp
教程指出:
并运行它(-n 旁边的参数指定要在节点之间生成和分布的进程数): mpiu@ub0:~$ mpiexec -n 8 -f machinefile ./mpi_hello
使用 -n 1 和 -n 2 运行良好,但使用 -n 3 运行失败,如下所示:
gsamaras@pythagoras:/mirror$ mpiexec -n 1 -f machinefile ./mpi_hello
Hello from processor 0 of 1
gsamaras@pythagoras:/mirror$ mpiexec -n 2 -f machinefile ./mpi_hello
Hello from processor 0 of 2
Hello from processor 1 of 2
gsamaras@pythagoras:/mirror$ mpiexec -n 3 -f machinefile ./mpi_hello
bash: /usr/bin/hydra_pmi_proxy: No such file or directory
hungs up
也许-n 旁边的那个参数指定了机器的数量?我的意思是机器文件中说明了进程数,不是吗?另外,我为 MPI 集群使用了 2 台机器(希望是这种情况,我得到的输出不仅来自主节点(即 pythagoras),还来自从属节点(即 geomcomp))。
编辑_1
我认为 -n 旁边的参数实际上指定了进程数,因为在我链接到的教程中,它使用 4 台机器,机器文件意味着将运行 8 个进程。那么为什么我们需要 -n 旁边的参数呢?不管是什么原因,我仍然不明白为什么我的运行会因 -n 3 而失败。
Edit_2
在 Edit_1 之后,它 -n 3 是合乎逻辑的,因为我的机器文件意味着要生成 3 个进程。
Edit_3
我认为问题在于它试图在从节点(即 geomcomp)中生成一个进程。
Edit_4
pythagoras 在 Debian 8 上运行,而 geomcomp 在 Debian 6 上运行。这些机器具有相同的架构。问题在于 geomcomp,因为我在那里尝试了mpiexec -n 1 ./mpi_hello
并说没有守护程序运行。
所以,我得到了,毕达哥拉斯:
gsamaras@pythagoras:~$ mpichversion
MPICH Version: 3.1
MPICH Release date: Thu Feb 20 11:41:13 CST 2014
MPICH Device: ch3:nemesis
MPICH configure: --build=x86_64-linux-gnu --prefix=/usr --includedir=$prefix/include --mandir=$prefix/share/man --infodir=$prefix/share/info --sysconfdir=/etc --localstatedir=/var --libdir=$prefix/lib/x86_64-linux-gnu --libexecdir=$prefix/lib/x86_64-linux-gnu --disable-maintainer-mode --disable-dependency-tracking --enable-shared --prefix=/usr --enable-fc --disable-rpath --disable-wrapper-rpath --sysconfdir=/etc/mpich --libdir=/usr/lib/x86_64-linux-gnu --includedir=/usr/include/mpich --docdir=/usr/share/doc/mpich --with-hwloc-prefix=system --enable-checkpointing --with-hydra-ckpointlib=blcr
MPICH CC: gcc -g -O2 -fstack-protector-strong -Wformat -Werror=format-security -g -O2 -fstack-protector-strong -Wformat -Werror=format-security -O2
MPICH CXX: g++ -g -O2 -fstack-protector-strong -Wformat -Werror=format-security -g -O2 -fstack-protector-strong -Wformat -Werror=format-security
MPICH F77: gfortran -g -O2 -fstack-protector-strong -g -O2 -fstack-protector-strong -O2
MPICH FC: gfortran -g -O2 -fstack-protector-strong -g -O2 -fstack-protector-strong
gsamaras@pythagoras:~$ which mpiexec
/usr/bin/mpiexec
gsamaras@pythagoras:~$ which mpirun
/usr/bin/mpirun
在 geomcomp 我得到了:
gsamaras@geomcomp:~$ mpichversion
-bash: mpichversion: command not found
gsamaras@geomcomp:~$ which mpiexec
/usr/bin/mpiexec
gsamaras@geomcomp:~$ which mpirun
/usr/bin/mpirun
我已经按照教程中的说明安装了 MPICH2。我该怎么办?我正在主节点处理/mirror
。挂载在从节点上。
1. 这个相关的问题, mpiexec.hydra - how to run MPI process on machines where locations of hydra_pmi_proxy are different?, 与我的不同,但这里也可能是这种情况。 2.该死的,我唯一知道的九头蛇是一个希腊岛,我错过了什么? :/
【问题讨论】:
有可能(我认为)当您使用数字小于 3 的-n
选项时,mpiexec
正在使用机器文件中可用的第一个处理器并忽略其余处理器。因此,对于-n 1
和-n 2
,您只使用机器毕达哥拉斯。当您尝试运行-n 3
时,它也会尝试使用geomcomp。 geomcomp 是否设置为使用 MPI?远程进入那台机器并尝试mpiexec -n 1 ./mpi_hello
(没有-machinefile
选项)。如果这导致错误,那就是你的问题。
@R_Kapp 感谢您的回答。是的,这也是我现在的想法,geomcomp 没有运行任何东西(我检查了从 C 代码中获取 IP 地址)。当我尝试按照你说的做时,它说我没有运行守护进程,所以(在我读到这个wiki.lazarus.freepascal.org/MPICH#Test_MPD之后),我得到了这个:gsamaras@geomcomp:/mirror$ mpd & [1] 12036 gsamaras@geomcomp:/mirror$ configuration file /home/gsamaras/.mpd.conf not found A file named .mpd.conf file must be present in the user's home...
MPD 已在至少几个版本中贬值。坚持使用 hydra。
好的@RobLatham,我之所以这么说是因为这是我在终端中收到的消息。
【参考方案1】:
我想说你已经发现了 Hydra 的一个真正缺点:应该有一些方法可以告诉它其他节点上的路径不同。
mpich 安装在 pythagoras 的什么位置? mpich 在 geocomp 上安装在哪里?
在最简单的配置中,例如,您将拥有一个公共主目录,并且您会将 mpich 安装到 $HOME/soft/mpich。
Hydra 可能没有在远程机器上启动“登录 shell”。如果将 MPICH 安装路径添加到 PATH 环境变量中,则必须在 .bashrc 之类的文件中执行此操作(或任何与您的 shell 等效的文件)。
要对此进行测试,请尝试使用“ssh geocomp mpichversion”和“ssh pythagoras mpichversion”以及普通的“mpichversion”。这应该告诉你一些关于你的环境是如何设置的。
在你的情况下,你的环境真的很糟糕! debian 8 和 debian 6 看起来甚至不是相同的 MPICH 版本。我认为,由于 ABI 倡议,MPICH-3.1 和更新版本将与 MPICH-3.1 一起使用,但如果你有一个 MPICH 版本-日期“MPICH2 到 MPICH”转换,没有这样的保证。
除了 ABI 之外,您还有一个需要 hydra 启动器(debian 8 版本)的 MPICH 和一个需要 MPD 启动器的 MPICH。 (debian 6 版本)
即使您确实有足够新的软件包,唯一可行的方法是您在所有机器上都具有相同的架构。正如 Ken 指出的那样,ABI 并不意味着支持异构环境。
删除发行包并在两台机器上自己构建 MPICH。
【讨论】:
检查我的编辑,这应该可以帮助您提供答案! 其实,后续问题就在这里:***.com/questions/30666741/build-mpich2-from-source/… ABI 兼容性计划不允许跨进程混合和匹配 MPICH 版本。您必须确保在所有机器上使用相同的 MPICH 版本。 当然。我会编辑得更清楚。在这种环境中还有很多奇怪的地方。以上是关于bash: /usr/bin/hydra_pmi_proxy: 没有这样的文件或目录的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Windows 10 中从 bash 提示符运行 python '__main__' 程序文件?