MPI hello world SSH 免密互联

目标:
我们想实现2台主机免密互联,将MPI Hello World跑起来
假设hostname是node01,node02,(Linux shell窗口一般是UserName@HostName,node1和node2一定要和HostName一样)
hostname是/etc/hosts中的配置,如下:
在这里插入图片描述

ssh node1
ssh node2

使用IP免密登录(用户名相同时,ssh+主机名;如果不同,登录方式就是 ssh+用户名@IP地址)
可以参考:https://help.ubuntu.com/community/MpichCluster

修改hosts文件

分别假如主机,修改/etc/hosts文件,保证两台主机的username一样,linux 窗口一般都会是UserName@HostName组成

sudo vi /etc/hosts
#然后添加
#注意一点是不要用127.0.0.1,自己本机还是用共IP如下
10.8.103.195 node1
10.8.100.30  node2

生成并拷贝密钥

cd 
cd .ssh
#生成密钥
ssh-keygen -t rsa

在.ssh/目录下,会新生成两个文件:id_rsa.pub和 id_rsa

互相上传公钥到目标机器

#机器node2
ssh-copy-id node1
#机器node1
ssh-copy-id node2

然后就可以互联啦。

然后,配置一个machinefile

node1:1
node2:2

如果出现下面错误

Host key verification failed.
[mpiexec@-d2004-20230516] ui_cmd_cb (mpiexec/pmiserv_pmci.c:51): Launch proxy failed.
[mpiexec@-d2004-20230516] HYDT_dmxu_poll_wait_for_event (lib/tools/demux/demux_poll.c:76): callback returned error status
[mpiexec@-d2004-20230516] HYD_pmci_wait_for_completion (mpiexec/pmiserv_pmci.c:173): error waiting for event
[mpiexec@-d2004-20230516] main (mpiexec/mpiexec.c:260): process manager error waiting for completion

大概率是上面node1/2和hostname没有一一对应起来导致的。

然后在两台机器创建相同的文件夹。并且挂载同一个sample

#命令行安装mpich
#或者源码安装到/usr,这样不会出现各种找不到文件的情况
#2台机器都要装
#或者可以一台机器装好,采用mount去挂载
sudo ./configure  --disable-fortran  --prefix=/usr/
sudo make 
sudo make install

$ sudo mount -t nfs 10.9.114.22:/workspace  /home/worspace
$ cd sample
$ mpirun  -n 2 -f /home/zhencheng.pace/eccl/mpich-4.2.1/build/bin/machinefile  ./mpi_hello_world

如果在单机上运行那么只要不加-f就可以了

#可以测试hostname是一个命令,可以用ls等
mpiexec -f machinefile  -n 2 hostname

$ mpiexec -n 4 ./mpi_hello_world
Hello world from processor enflame-d2004-20230516, rank 0 out of 4 processors
Hello world from processor enflame-d2004-20230516, rank 2 out of 4 processors
Hello world from processor enflame-d2004-20230516, rank 1 out of 4 processors
Hello world from processor enflame-d2004-20230516, rank 3 out of 4 processors

简化办法

如果mpi编译在自己文件夹下,那么可以通过下面的方式来

sudo ./configure  --disable-fortran  --prefix=/you/works/dir
sudo make -j12
sudo make install

export PATH=$PATH:/you/works/dir/bin
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/you/works/dir/lib
#核心保证2台机器上都要有mpi所有的bin和so,并且在同一个目录下
mpiexec -f machinefile  -n 2 hostname

slave机器上挂载

sudo mount -t nfs 10.9.114.22:/workspace/mpi   /workspace/mp

MPI的原理就是在多台机器上(相同目录,相同username)上同时启动,用户只要在一台机器上启动,MPI自动在其它机器上启动
在这里插入图片描述

可能会出现下面错误相关问题在这里插入图片描述
可以设置环境变量:

env | grep FI_

export FI_LOG_LEVEL=debug
export FI_PROVIDER=tcp
export FI_SOCKETS_IFACE=lo

netstat -lpunt |grep -i 34116
IP

下面是libfabric的介绍:
https://blog.csdn.net/ssbandjl/article/details/133248887
其实最后的结果猜测是服务器IP端口设置的缘故,在本机回环测试通过也行
在这里插入图片描述
后来反复测试发现,原来是服务器A的mpiexec默认打开的是服务器B上的docker0的虚拟网卡,导致两台服务器无法通过tcp/udp通信,把docker服务关闭,docker0虚拟网卡关掉就可以了。

#关闭docker0
sudo ifconfig docker0 down  #up是打开

#关闭服务,只要关闭对端的就可以了
sudo service docker stop  #start

![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/66715d8a10f141e9ad48415179939724.png

mpiexec -f hostfile  -iface eth0 -n 8 ./mpi_hello_world 

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值