MPI集群环境搭建

MPI集群环境搭建

系统

为了对系统进行统一管理,博主找到了四台相同配置的主机,并统一安装了ubuntu server 16.04.3 LTS系统。
安装过程中存在的问题:
在这里插入图片描述
经过调研,发现这个问题是选择语言的问题,目前发现简体中文和繁体中文会出错,其他语言良好,所以,选择语言时选择English就可以解决这个问题。
安装完系统之后,需要配置远程登录,毕竟是服务器,毕竟需要远程登录。

sudo passwd root # 设置root账户密码
sudo apt-get update # 更新
sudo apt-get install openssh-server # 安装ssh-server ssh-client 已经有了
sudo ps -e | grep ssh # 如果sshd服务已经启动,那么就可以远程登录了

配置免密登录

host设置

host文件配置可以让我们直接输入计算机名就可以访问主机,可以理解成一个IP和主机名的宏定义。在host文件中添加其他各个节点的IP信息:

sudo vim /etc/hosts # 在hosts文件中增加主机名和ip地址的映射关系

如下(s01, s02, s03, s04)取s01作为例子:
在这里插入图片描述

免密登录

ssh免秘钥登录即是利用公钥和私钥的匹配。先在各个节点生成公钥,然后复制到各个子节点,即可实现ssh的免密登录。

生成秘钥文件,一路回车即可。会在主文件夹下面生成一个.ssh的文件夹,里面有id_rsa和id_rsa.pub,一个公钥文件,一个私钥文件。

ssh-keygen -t rsa

想要各个节点之间都能互相免密登录,则需要将各个节点的公钥信息添加到对方的authorized_keys信息中。
博主采取将各个子节点的公钥信息复制到主节点,然后再将汇总的公钥信息复制回各个子节点。

u02@s02:~$ scp /home/u02/.ssh/id_rsa.pub u01@s01:~/.ssh/002.pub # s02节点操作
u03@s03:~$ scp /home/u03/.ssh/id_rsa.pub u01@s01:~/.ssh/003.pub # s03节点操作
u04@s04:~$ scp /home/u04/.ssh/id_rsa.pub u01@s01:~/.ssh/004.pub # s04节点操作

在s01节点上,将全部pub写入一个authorized_keys文件中

u01@s01:~$ cp id_rsa.pub 001.pub # 先将自己的pub复制一份取名001.pub
u01@s01:~$ cat 00* >> authorized_keys # 采用统一的形式写入authorized_keys文件,authorized_keys 文件包含4个主机的公钥
# 分发authorized_keys 
u01@s01:~$ scp authorized_keys u02@s02:~/.ssh/authorized_keys
u01@s01:~$ scp authorized_keys u03@s03:~/.ssh/authorized_keys
u01@s01:~$ scp authorized_keys u03@s03:~/.ssh/authorized_keys

免密登录配置完成,各节点可互相通过名称免密访问。
(这种方式免密登录,用户名不同,在MPI集群中,存在一定的问题,具体见后面的问题分析)

安装MPICH包

安装包为:mpich-3.3.tar.gz
首先,为了保证编译配置顺利,统一在home/u0x/apps/目录下进行安装,为保证编译环境正常,执行以下命令:

sudo apt-get update # 保证安装的源最新
sudo apt-get install gcc # 安装gcc编译器,用于编译C语言
sudo apt-get install g++ # 安装g++编译器,用于编译C++
sudo apt-get install gfortran # 安装gfortran编译器,用于编译fortran语言
sudo apt-get install make # 安装make
sudo apt-get install make-guile # 安装make-guile

然后进入对应目录,即/home/u0x/apps/mpich-3.3/执行以下命令:

./configure # 配置
make # 编译
sudo make install # 安装

安装结束后,用which mpiccwhich mpiexec检查安装是否成功,如果有这两个可执行程序的路径显示,则表示安装成功。

注意:如果自行选择安装路径的话,记得设置环境变量,具体README文档中有详细说明。这里希望大家注意一个问题,如果设置环境变量的话,~/.bashrc配置文件下的环境变量和切换sudo执行时的环境变量不同,sudo执行时会找不到命令。

在每个节点中安装MPICH,方法同上。
在这里插入图片描述

配置MPI分布式计算节点

创建一个文件夹用于存放数据和代码,保证在多个节点上路径一致。(为了方便可以使用NFS,我们采用统一路径的方式)

/home/mpi/ # 代码和数据都存储在这个下面

在home根目录(也可以是其他目录)下新建一个文件:mpi_config_file。mpi_config_file是在运行MPI程序时参考的配置文件,它显式注明每台机器各有几个CPU核。
在这里插入图片描述

测试MPI集群环境

编写MPI程序:
这里我们选取案例程序进行测试,在我们之前解压的mpich-3.3文件夹下的examples目录下就有现成的可执行程序cpi,我们运行它即可。

运行程序:
将可执行文件cpi复制到共享目录/home/mpi/中,保证每个节点都可以访问该可执行文件(如果不安装NFS服务的话,需要将可执行文件放到每台机器的相同目录下)
切换到目录:cd /home/mpi/
执行指令:mpiexec -n 8 -f /home/mpi/mpi_config_file ./cpi(mpiexec 表示执行该mpi程序,-n 8表示开8个进程,参数-f /home/mpi/mpi_config_file 表示运行过程参考配置文件mpi_config_file,./cpi是当前目录下的执行文件名)。

出现的问题

使用配置好的 mpi_config_file 文件以集群形式跑的时候:
在这里插入图片描述
为了检查错误,单机跑:
在这里插入图片描述
所以,问题肯定出在集群调度上了。经过分析,发现之前做的免密登录是,在s01机器上,u01使用命令ssh u02@s02登录到s02上,但是是以u02的用户身份。
(免密登录以用户为基本单位)
而我们的MPI集群需要免密登录,即在s01机器上,ssh s02就能登到s02机器。
在这里插入图片描述
但是,直接使用ssh s02命令,用户依然是u01,而s02上并没有u01账户,所以MPI集群需要一个统一的,名称相同的用户在各个机器上。

创建统一用户wj(为了兼容扩展)

mpi相关的文件也全部放置在wj用户目录下

创建用户wj
sudo useradd -m wj # (-m 相当于会创建对应的用户家目录)
sudo passwd wj
sudo adduser wj sudo # 将wj添加至sudo组
usermod -s /bin/bash wj # 指定shell

创建用户相关的信息见我的另一篇博客:ubuntu创建用户的注意事项

免密登录

方法同上,这一次将 t620 机器也加上,让5台机器全部互相免密登录
统一使用wj用户,互相之间可直接ssh 主机名即可免密登录

测试

1、保证所有的运行程序和数据都是不同主机上的相同路径下
2、不仅程序和数据路径要一致,mpicc和mpiexec路径也要一致
即:
在这里插入图片描述
但是,否则会出现错误:(s01,s02,s03,s04一致,t620不一致)
在这里插入图片描述

bash: /usr/local/bin/hydra_pmi_proxy: No such file or directory

t620重新安装mpich后问题解决:
在这里插入图片描述
该问题解决:
在这里插入图片描述运行节点按照mpi_config_file分配

解决之后,还存在问题:
在这里插入图片描述这个问题是hosts文件的配置问题,参考以下两篇博文
https://blog.csdn.net/u010657094/article/details/49871547
https://blog.csdn.net/yhsweetlife/article/details/46654181

解决方案:
在五个节点上
注释掉127.0.0.1 主机名
留着127.0.0.1 localhost

运行成功:
在这里插入图片描述按mpi_config_file配置的分配运行process!

如果IP发生变化

修改集群上每个节点的/etc/hosts文件

如果增加或者删除计算节点

1、修改集群上每个节点的/etc/hosts文件
2、配置新加入节点与其他节点直接的免密登录
3、配置MPI的mpi_config_file文件

进一步改进

1、可采用NFS避免大量的文件拷贝
2、写基本的传输文件脚本,加速开发过程

发布了164 篇原创文章 · 获赞 26 · 访问量 5万+

猜你喜欢

转载自blog.csdn.net/u013095333/article/details/103893861
今日推荐