搭建mpi高性能集群
1 virtualBox 6.1
2 ubuntu16 server版虚拟机两台
3 gcc 5 mpich 3.2
确保两台虚拟机连同一个局域网,最好是一个手机热点。
mpi基于gcc,先查看是否有gcc
gcc -v
如果没有
sudo apt install gcc
假设出现以下现象:安装过程卡住不动
0% [Connecting to us.archive.ubuntu.com (2001:67c:1562::14)] - Install not happening
这是虚拟机没有适配ipv6的地址,做如下修改:
sudo vim /etc/gai.conf
找到 这一行,然后取消注释。
#precedence ::ffff:0:0/96 100
:wq! --强制保存退出
:q! --不保存退出
使用指令查看主机的ip地址
ip add
两台机器都要修改:
sudo vim /etc/hosts
两台机器的文件中像这样写上彼此的ip地址和用户名。
下面的指令很多都是基于用户名,记得看着修改。
两台主机分别使用
sudo adduser mpiuser
修改mpiuserd权限:
sudo vim /etc/sudoers
下载shh(一般都带的)
sudo apt-get install openssh-server
进入新用户(两台都进)
su – mpiuser
进入之后注意查看当前目录下是不是当前用户文件夹
cd ~
创建密钥(两台都创建)
ssh-keygen -t rsa
一直按回车,执行命令后,主目录下会有该文件夹
拷贝密钥到其他主机:(改自己的用户名,自己对自己也要)(两台机器一共执行四遍)
ssh-copy-id -i /home/mpiuser/.ssh/id_rsa.pub slave1
执行完之后,可以打开查看对应的ssh文件夹,里面的这个文件保存了对应的密钥。
防止终端窗口关闭了ssh-agent也被关闭,设置无密码登录。
eval `ssh-agent`
ssh-add ~/.ssh/id_dsa
最后验证是否可以通过以下指令直接不用密码登录另一台机器:
ssh slave1
注意:看清自己目前电脑登录的用户,如果是其他主机,进行之后操作时记得logout退出,否则可能死机
(1)如果你的主机是manager:
sudo apt-get install nfs-kernel-server
在mpiuser的主文件夹下,(也就是/home/mpiuser/下)
mkdir cloud
修改配置文件
sudo vim /etc/exports
添加一行:
/home/mpiuser/cloud *(rw,sync,no_root_squash,no_subtree_check)
生效:
sudo exportfs -a
(2)如果你的主机是worker:
sudo apt-get install nfs-common
在mpiuser下建立新文件夹:
mkdir cloud
挂载mpiuser的cloud文件夹(注意修改名字):
sudo mount -t nfs manager:/home/mpiuser/cloud ~/cloud
查看是否成功:
df –h
在设置为manager的主机下的cloud的目录中,添加hello.c文件:
#include
#include
int main(int argc, char** argv) {
// Initialize the MPI environment
MPI_Init(NULL, NULL);
// Get the number of processes
int world_size;
MPI_Comm_size(MPI_COMM_WORLD, &world_size);
// Get the rank of the process
int world_rank;
MPI_Comm_rank(MPI_COMM_WORLD, &world_rank);
// Get the name of the processor
char processor_name[MPI_MAX_PROCESSOR_NAME];
int name_len;
MPI_Get_processor_name(processor_name, &name_len);
// Print off a hello world message
printf("Hello world from processor %s, rank %d out of %d processors\n",
processor_name, world_rank, world_size);
// Finalize the MPI environment.
MPI_Finalize();
}
编译:
mpicc -o hello hello.c
执行:(修改用户名)
mpirun -np 6 -hosts manager,worker ./hello
结果:
问题一:
两台虚拟机不是同时间安装的,有一台不小心安装了ubuntu18.04的阿里源,另一台是16.04的阿里云,导致了mpich和gcc版本不相同,被坑惨了之后,才发现,更换回来就正确了。
而且16.04的ubuntu软件源好像默认不开启ipv6,导致下下载是会卡住,
修改以下配置:
sudo vim /etc/gai.conf
找到这一行,取消注释。
#precedence ::ffff:0:0/96 100
问题二:
ssh生成的dsa级别的密钥及时双方的authorized_keys文件中都存在了对方的密钥,而且免密登录已经打开,但是使用
ssh manager
时还是不能免密,还是需要登录密码。
之后改成rsa级别的密钥就可以了,具体也不知道什么原因。