Centos55下MPI并行计算环境的建立.docx
《Centos55下MPI并行计算环境的建立.docx》由会员分享,可在线阅读,更多相关《Centos55下MPI并行计算环境的建立.docx(9页珍藏版)》请在冰豆网上搜索。
Centos55下MPI并行计算环境的建立
Centos下MPI2并行计算环境的建立
一、配置前的准备工作
假设机群是2个节点,分别为cnlabexpr1,cnlabexpr2。
1.安装Linux(CentOS)系统,并保证每个节点的sshd服务能正常启动。
笔者并没采用真实的2台机器,而是利用虚拟机(Hyper-v)在一台装有Windowsserver2008R2系统的机器上安装多个Linux系统进行模拟。
注意事项:
(1)因为笔者采用mpich2-1.3.2p1.tar.gz,此版本对gcc、autoconf等软件包版本要求较高,为避免出错,尽量安装最新的Linux系统。
(2)在使用Hyper-v安装Centos时,会发现进入Centos系统后,网卡无法识别的问题。
所以在刚创建完虚拟机时,要将原来默认创建的网卡移除,操作“设置硬件添加硬件旧版网络适配器”,这样才可以正常使用。
2.为每个节点分配IP地址
cnlabexpr1:
222.197.221.31cnlabexpr2:
222.192.221.35
3.配置/etc/hosts文件,该文件可以实现IP地址和机器的对应解析,所有节点的该文件均要按下面的内容修改:
222.197.221.31cnlabexpr1
222.192.221.35cnlabexpr2
这是cnlabexpr1
这是cnlabexpr2
同时一定要注销或者删除这一行:
127.0.0.1localhost,否则在用命令mpdboot-n2-f/root/mpd.hosts同时开启各节点mpd服务时,会出现“mpdboot_c1(handle_mpd_output412):
failedtohandshakewithmpdonc2;recvdoutput={}”的错误
通过以上配置后节点之间能够通过各节点的机器名称相互访问。
例如,可以通过pingc2进行测试。
注意事项:
该测试必须在关闭Linux防火墙的条件下进行,否则可能失败。
永久生效:
chkconfigiptableson/off(重启生效)
即时生效:
serviceiptablesstart/stop(重启失效)
二、挂载NFS文件系统
在所有的节点中都要安装yum-yinstallportmapnfs*(反正要保证系统已经安装了NFS)
由于MPICH的安装目录和用户可执行程序在并行计算时需要在所有节点保存副本,而且目录要相互对应,每次一个节点一个节点的复制非常麻烦,采用NFS文件系统后可以实现所有节点内容与主节点内容同步更新,并自动实现目录的对应。
NFS文件系统使得所有机器都能以同样的路径访问服务器上保存的文件,访问方法如同对本地文件的访问。
通常我们会将MPICH的安装目录及并行程序存放目录配置为NFS共享目录,这样可以省去将文件向各个节点复制的麻烦,大大提高工作效率。
NFS文件系统的配置方法示例如下(我们在c1上设置NFS服务器,配置需要在root用户下完成)。
1.服务器端配置方法(下面的配置只在主节点进行)
(1)/etc/exports文件配置
在文件/etc/exports中增加以下几行:
/root172.20.20.0/255.255.255.0(rw,sync,no_root_squash,no_subtree_check)
/usr/local172.20.20.0/255.255.255.0(rw,sync,no_root_squash,no_subtree_check)
(为什么共享这两个目录,mpich2需要安装在c1的/usr/local目录下,要使c2也直接使用,所以要把这个目录共享出来;/root目录下有.bashrc文件,是设置环境变量用的,如果c1修改了该文件,而又没有将/root目录共享出来给c2使用,c2就无法运行mpich2了)
这几行文字表明NFS服务器172.20.20.0网段的节点共享其/usr/cluster目录(目录必须存在),并使这些节点具有相应的权限(可查询相关的文档)。
如有更多的节点可按此方法填写。
如果期间有修改共享文件夹目录,则需要用以下命令刷新一下:
exportfs-rv
(2)启动NFS服务
启动NFS服务只需要以下两个命令:
serviceportmapstart(该服务在Centos中已经自动运行,可不是用)
注:
在最新的内核中,NFS守护进程改为rpcbind,如是新内核,启动NFS守护进程的命令是“servicerpcbindstart”。
servicenfsrestart
到此c1服务器已可以向其他两个节点提供/usr/local和/root目录的文件共享。
2.客户端c2配置方法(需要在所有子节点做同样的配置)。
(1)建立共享目录。
建立与服务器相同的共享目录用于共享服务器文件:
由于我NFS服务器共享的2个目录是已经存在的,所以这一步可以省略。
(2)查看服务器已有的共享目录(这步可省略)。
showmount-e172.20.20.169
通过这条命令我们可以查看IP地址为172.20.20.169服务器可以共享的目录情况。
(3)挂载共享目录。
mount-tnfsc1:
/usr/local/usr/local
mount-tnfsc1:
/root/root
这2条命令将NFS服务器c1上的共享目录挂载到本地/usr/local和/root目录下。
我们也可在所有子节点的/etc/fstab文件中输入以下的代码,使文件系统在启动时实现自动挂载NFS:
c1:
/usr/local/usr/localnfsdefaults00
c1:
/root/rootnfsdefaults00
至此我们已可以实现对NFS共享目录的本地访问,c2的/root和/usr/local文件夹都共享了NFS服务器的同名文件夹的内容,我们可以像访问本地文件一样访问共享文件。
MPICH的安装目录和用户存放并行程序的文件夹都需要实现NFS共享,从而避免了每次向各节点发送程序副本。
(4)查看c2挂载NFS目录情况
三、配置ssh实现MPI节点间用户的无密码访问
由于MPI并行程序需要在各节点间进行信息传递,所以必须实现所有节点两两之间能无密码访问。
节点间的无密码访问是通过配置ssh公钥认证来实现的。
例如,对新用户user配置ssh公钥认证,先在c1上做以下操作。
(1)生成了私钥id_dsa和公钥id_dsa.pub,具体操作方法如下。
ssh-keygen-trsa
系统显示一些信息,遇到系统询问直接回车即可。
(2)将该密钥用作认证,进行访问授权。
按如下命令在c1执行。
cp~/.ssh/id_dsa.pub~/.ssh/authorized_keys
由于我们使用的是root用户,所以~代表/root,
(3)将~/.ssh目录下的文件复制到所有节点。
scp-r~/.ssh/*c2:
/root/.ssh
(4)检查是否可以直接(不需要密码)登录其他节点。
sshc2
如能两两之间不需要密码登录其他节点,则表明配置成功。
四、安装MPICH2
前期准备:
MPICH2安装时,需要gcc的支持,否则会报错。
命令是:
yuminstallgcc*-y
1.下载并解压MPICH2压缩包。
tarzxvfmpich2-1.3.2p1.tar.gz
解压完成后将在当前目录生成一个MPICH文件目录。
2.进入MPICH解压后的目录,配置安装目录。
注意事项:
最新版本mpich2的进程管理默认使用hydra,而不是mpd。
如果你要使用mpd,使用./configure--with-pm=mpd:
hydra
./configure--prefix=/usr/local/mpich2--with-pm=mpd:
hydra
绿色这里注意目录名
根据以上配置MPICH将安装在目录/usr/local/mpich2,并确保所有节点已建立针对该目录的NFS共享。
3.编译安装MPICH2。
进入解压后的MPICH文件目录,分别执行make和makeinstall指令,这会花一段较长的时间。
4.在当前用户主目录/root下建立并编辑配置文件mpd.hosts。
(所有节点都要有)
将所有你允许访问本机进行并行计算的机器名填入,一行一个机器名,如果该机器上有两个CPU,就将它的名字加入两次,以此类型。
注意文件的权限,看命令行的ll
cnlabexpr1
cnlabexpr2
注意,文中包含自己的目的是为了在只有一个节点时也可以模拟并行计算环境。
5.配置环境变量。
编辑用户主目录下的~/.bashrc文件,增加一行:
#exportPATH="$PATH:
/usr/cluster/mpich2/bin"
#source.bashrc
PATH="$PATH:
/usr/local/mpich2/bin"
#vi/etc/profile
在末尾添加:
exportPATH=$PATH:
/usr/local/mpich/bin
exportMANPATH=$MANPATH:
/usr/local/mpich/share/man
#source/etc/profile(不用重启,使环境变量生效)
#whichmpd
这一行代码将MPI的安装路径加入用户的当前路径列表。
重新打开命令行窗口后生效。
6.启动mpd守护进程。
运行mpirun,首先要运行mpd。
在启动mpd守护进程前要在各个节点的安装目录(/usr/local//etc/mpd.conf)生成一个mpd.conf文件
,内容为:
secretword=123456
其中,“123456”为识别口令,在所有节点中都建立该文件并保持口令一致,口令可自己设定。
进入/usr/local/etc/目录执行以下命令
touchmpd.conf
chmod600mpd.conf
mpd&
mpd&为启动本地mpd的命令,我们也可以采用以下命令同时启动mpd.hosts中所列节点的mpd。
mpdboot-n<节点个数>-f/root/mpd.hosts
这一命令将同时在mpd.hosts文件中所指定的节点上启动mpd管理器。
mpd启动后执行“mpdtrace-l”可以查看各个节点机器名。
7.编译、运行一个简单的测试程序cpi,这是一个MPICH自带的计算圆周率的并行示例程序,该例程在MPICH解压后的examples目录下。
编译:
mpicccpi.c–ocpi
运行命令如下:
mpirun-n2./cpi
mpi的编译命令为mpicc,如编译test.c可用如下命令:
mpicctest.c-otest
mpirun–np3./test