Ubuntu安装配置MPI集群

1. 下载

下载,请点击这里
Ubuntu安装配置MPI集群_第1张图片
Ubuntu安装配置MPI集群_第2张图片

2. MPI安装

在ubuntu终端中,先执行下面命令:

sudo apt-get update
sudo apt-get install gcc
sudo apt-get install g++
sudo apt-get install gfortran

2.1 将下载文件移动到ubuntu中

  • 在虚拟机/home/用户名下新建文件夹software
  • 将mpich-4.0a1.tar.gz移动到/home/用户名/software下

2.2 解压

cd ~/software
sudo tar -zxvf mpich-4.0a1.tar.gz
sudo chmod 777  mpich-4.0a1  #去除文件夹上面的锁

2.3 配置

/home/用户名/software/mpich 为自定义的配置文件夹

cd ~/software/mpich-4.0a1/
sudo ./configure --disable-fortran  --with-device=ch4:ofi  --prefix=/home/用户名/software/mpich-4.0a1/mpich-install 2>&1 | tee c.txt

配置成功,如下图所示:
Ubuntu安装配置MPI集群_第3张图片

然后进行安装

sudo apt install autoconf
autoconf
sudo apt install make
sudo make   # 漫长等待,不要急
sudo make install

2.3.1 添加环境变量

sudo gedit ~/.bashrc
  • 打开.bashrc 文件后,在末尾添加
export MPI_ROOT=/home/ming/software/mpich-4.0a1/mpich-install #这一步对应你自己的安装地址
export PATH=$MPI_ROOT/bin:$PATH
export MANPATH=$MPI_ROOT/man:$MANPATH
  • 激活
source ~/.bashrc

2.3.2 判断是否成功

  • which mpicc 查看位置信息
  • mpichversion 查看版本信息,出现版本号说明安装成功

Ubuntu安装配置MPI集群_第4张图片

运行一个实例:

mpirun -n 10 ./examples/cpi

Ubuntu安装配置MPI集群_第5张图片

3. SSH

3.1 安装

ps -e |grep ssh

在这里插入图片描述

若只发现了ssh-agent,那么说明只有客户端,需要安装服务端程序,执行下述命令安装

sudo apt-get install openssh-server

成功后结果:
在这里插入图片描述

# 开启
service sshd start
# 关闭
service sshd stop
# 重启
service sshd restart

3.2 配置config

sudo vim /etc/ssh/sshd_config
sudo apt install vim  #若提示sudo: vim:找不到命令,则运行该命令
  • 插入:Ins键
  • 保存退出:1.ESC键 2.输入:wq

需要将如下的三个配置取消注释,如果没有的话主动添加进去就行了

Ubuntu安装配置MPI集群_第6张图片

重启生效

service sshd restart

3.3 免密登录本机

  • 执行命令ssh localhost(127.0.0.1),然后输入系统登陆密码,不出问题的话应该就可以正确地登陆到本机了。
  • 但是mpich需要的是免密登陆,因此安装好之后需要生成密钥进行配置,执行以下命令(在第一步生成密钥的时候,我们选择不设置密码,直接回车即可)
#生成公钥和,使用rsa加密
ssh-keygen -t rsa 
#利用公钥生成授权文件
cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
#添加至信任
ssh-add

Ubuntu安装配置MPI集群_第7张图片

  • 免密登录测试
ssh 账户名@ip

Ubuntu安装配置MPI集群_第8张图片

4. 集群

4.1 保证所有主机用户名、密码相同

在所有用户名,密码相同的基础上,修改所有节点的主机名,比如第一个节点叫node1,第二个节点叫node2

sudo vim /etc/hostname

4.2 保证所有主机相互ping通

同一局域网下所有虚拟机,使用桥接,可以相互ping通。

Ubuntu安装配置MPI集群_第9张图片

  • 将集群中所有节点的ip,都配置到所有节点的hosts文件中
sudo vim /etc/hosts 
  • 在文件中添加(修改hosts,需要先Ins键,复制,ESC,:wq!),ip1为node1的ip地址
ip1  node1
ip2  node2

Ubuntu安装配置MPI集群_第10张图片

  • 测试

Ubuntu安装配置MPI集群_第11张图片

4.3 保证所有主机安装SSH

请参考本文3.1和3.2 SSH安装和配置

4.4 集群公钥和私钥

生成公钥和私钥,请参考本文3.3 免密登录本机

本文默认:node1为主节点。

  • 每个节点生成公钥和私钥后,将非主节点上的公钥文件,传到主节点上。例如:在node2上执行以下命令。将node2的公钥传到node1上,并重命名为id_rsa.pub.node2,重命名是为了不覆盖原来的node1的公钥。
scp ~/.ssh/id_rsa.pub node1用户名@node1:~/.ssh/id_rsa.pub.node2
  • 主节点通过别人传过来的公钥,制作完整的私钥文件(认证)。例如:在node1上执行以下命令。将node2的公钥加入到认证文件中,再将认证文件传回node2。
cat ~/.ssh/id_rsa.pub.node2 >> ~/.ssh/authorized_keys #公钥加入到认证文件 
scp ~/.ssh/authorized_keys node2用户名@node2:~/.ssh/authorized_keys #将认证文件传回每个子节点

4.5 共享文件(可选择)

这一步是为了在所有节点共享可执行文件。不是必须操作。

4.5.1 在所有的节点都建立相同的一个目录

mkdir /home/ming/mpi_share

4.5.2 安装NFS以及相关的依赖

sudo apt-get install nfs-kernel-server
sudo apt-get install rpcbind

4.5.3 配置NFS服务器

不妨选节点node1,其他节点为NFS客户端。修改主节点exports文件

sudo gedit /etc/exports
  • 打开文件后,在文件的最后附上所有同步的客户端的虚拟机的ip和权限,如下:

    /home/ming/mpi_share node1(rw,sync,no_root_squash,no_subtree_check) 
    /home/ming/mpi_share node2(rw,sync,no_root_squash,no_subtree_check) 
    
    • /home/ming/mpi_share是共享目录
    • ip地址是所有的客户端(其它节点)的地址,包括本机的
  • 重启NFS

    sudo /etc/init.d/nfs-kernel-server restart
    

4.5.4 配置NFS客户端

使其能共享NFS服务器的共享目录

sudo mount -t nfs node1:/home/ming/mpi_share /home/ming/mpi_share

ip为主节点地址,冒号后跟的是主节点共享目录,最后的路径是该节点的共享目录

每次节点启动时都需重新执行挂载命令,如果想开机自动挂载:将把上述指令写到 /etc/rc.local 文件中。

4.6 测试

cd ~/software/mpich-4.0a1
touch machinefile  # 新建文件

machinefile文件里,应该配置,主机名:线程数,可以通过命令 nproc ,查看CPU线程数

node1:4
node2:4

运行

mpiexec -n 8 -f machinefile examples/cpi

Ubuntu安装配置MPI集群_第12张图片
可以将自己编写的代码,放到共享文件夹中,然后经过编译,执行。
C文件

  • mpicc xxx.c -o xxx

  • mpirun -n 8 ./cpi

C++文件

  • mpicxx xxx.cpp(注意位置) -o xxx
  • mpirun -n 8 ./xxx

参考链接:

  • https://zhuanlan.zhihu.com/p/355850573
  • https://blog.csdn.net/qq_41037945/article/details/91347344
  • https://blog.csdn.net/lusongno1/article/details/82854669

你可能感兴趣的:(并行,ubuntu,ssh,并行计算)