基于centos7的MPI高性能运算环境搭建
1、1系统采用CentOS-7-x86_64-DVD-1511.iso
系统安装参见引用
2、3 Intel® Parallel Studio XE 2015安装
参考2013的安装
http://www.bkjia.com/Linuxjc/913104.html
3、3 InfiniBand的驱动的安装
(使用普通网卡的请跳过本步骤)
Mellanox的网站下载InfiniBand的驱动如上图
http://www.mellanox.com/page/products_dyn?product_family=26&mtag=linux_sw_drivers
下载其中对应系统版本的驱动文件tgz或者iso,如果是iso就挂载
mount -o ro,loop MLNX_OFED_LINUX********.iso /mnt
如果是tgz就解压
tar –zxvf MLNX_OFED_LINUX********.tgz
并到相应的文件夹
执行./mlnxofedinstall –all
会报错,根据提示yum安装所需要依赖的文件包。
以上步骤在所有节点上都要进行。另外注意,主机选用—all选项,从机可以只选正常的basic,但是为了简单。我在这里都用了—all 安装了子网管理器 和HPC的所有内容。
4.启动openibd并设为开机启动:
service openibd start
chkconfig openibd on
5.启动子网管理器opensmd并设为开机启动:
service opensmd start
chkconfig opensmd on
6.查看HCA端口状态,若State为Active,则表示正常。
ibstat
7.还可以用如下命令查看HCA端口:
hca_self_test.ofed
8.重启系统
1、禁止防火墙和selinux
# systemctl disable firewalld
# systemctl stop firewalld
修改/etc/sysconfig/selinux确保SELINUX=disabled,然后执行setenforce 0或者reboot服务器以生效
2、各节点之间域名名互相解析(hosts)
分别修改2台主机名分别为node1和node2,在centos 7中直接修改/etc/hostname加入本机主机名和主机表,然后重启网络服务即可。
Node1如下
#vi /etc/hostname
node1
#systemctl restart network.service
Node2与之类似。
Hosts文件
配置两台台主机的主机表,在/etc/hosts中加入
192.168.1.11node1
192.168.1.12 node2
3、各节点之间时间同步
在node1和node2分别进行时间同步,可以使用ntp实现。
[root@node1 ~]# ntpdate 172.16.0.1
需要联网在时间正确情况下省去问题不大
4,各节点之间配置ssh的无密码密钥访问。
下面的操作需要在各个节点上操作。
# ssh-keygen -t rsa -p
!然后一路enter
# ssh-copy-id -i /root/.ssh/id_rsa.pub root@node2 #对方主机名
过程中要输入对方机器的密码。
两台主机都要互相可以通信,所以两台主机都得互相生成密钥和复制公钥,相互的节点上的hosts文件是都要解析对方的主机名
在node1上#ssh node2 测试是否无密码登陆node2;node2同样。
1、1,安装 NFS 服务器所需的软件包:
centos 5 :
#yum install nfs-utilsportmap
centos 6之后 :
#yum install nfs-utilsrpcbind
2,编辑exports文件,添加从机
#vim /etc/exports
/home 192.168.1.* (rw,no_root_squash,no_all_squash,sync)
这样192.168.1.12可以挂载NFS服务器上的/home目录到自己的文件系统中。
》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》
/home为共享的目录,使用绝对路径。
192.168.1.12/255.255.255.0(rw,no_root_squash,no_all_squash,sync)为客户端的地址及权限,地址可以是一个网段,一个IP地址例如192.168.1.2/49或者是一个域名,域名支持通配符,如:*.youxia.com,地址与权限中间没有空格,权限说明:
rw:read-write,可读写;
ro:read-only,只读;
sync:文件同时写入硬盘和内存;
async:文件暂存于内存,而不是直接写入内存;
no_root_squash:NFS客户端连接服务端时如果使用的是root的话,那么对服务端分享的目录来说,也拥有root权限。显然开启这项是不安全的。
root_squash:NFS客户端连接服务端时如果使用的是root的话,那么对服务端分享的目录来说,拥有匿名用户权限,通常他将使用nobody或nfsnobody身份;
all_squash:不论NFS客户端连接服务端时使用什么用户,对服务端分享的目录来说都是拥有匿名用户权限;
anonuid:匿名用户的UID值,通常是nobody或nfsnobody,可以在此处自行设定;
anongid:匿名用户的GID值。
》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》
3,启动nfs服务
先为rpcbind和nfs做开机启动:
Centos7:
#systemctl enable rpcbind.service
#systemctl enable nfs-server.service
然后分别启动rpcbind和nfs服务:
centos 5
# serviceportmap start
# servicenfs start
centos6:
# servicerpcbind start
#service nfs start
Centos7
#systemctl start rpcbind.service
#systemctl start nfs-server.service
确认NFS服务器启动成功:
#rpcinfo -p
检查 NFS 服务器是否挂载我们想共享的目录 /home
# exportfs
/home 192.168.1.12/255.255.255.0
4,在从机上安装NFS 客户端
首先是安裝nfs,同上
先为rpcbind做开机启动:
#systemctl enable rpcbind.service
然后启动rpcbind服务:
#systemctl start rpcbind.service
注意:客户端不需要启动nfs服务
检查 NFS 服务器端是否有目录共享:
# showmount -e node1
Export list for node1:
/home 192.168.1.12/255.255.255.0
在从机上使用 mount 挂载服务器端的目录/home(或者home下的某个目录)到客户端某个目录下:
例如:
#mkdir /home/share
#mount -t nfs4 node1:/home/share/home/share
#df -h 查看是否挂载成功
想在客户机上实现开机挂载,则需要编辑/etc/fstab:
#vi /etc/fstab
加上192.168.1.11:/home/share /home/share nfs defaults 0 0
例如我现在的fstab文件
# /etc/fstab
# Created by anaconda on Wed Jun 22 01:50:37 2016
#
# Accessible filesystems, by reference, are maintained under '/dev/disk'
# See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info
#
/dev/mapper/centos-root / xfs defaults 0 0
UUID=ae96b13e-1a14-4266-91ab-6a27bb543e27/boot xfs defaults 0 0
/dev/mapper/centos-home /home xfs defaults 0 0
/dev/mapper/centos-swap swap swap defaults 0 0
192.168.1.11:/home/share /home/share nfs defaults 0 0
1、MPI配置
首先设置环境变量
在/etc/profile.d下建立一个.sh文件例如:cat /etc/profile.d/mpi.sh
source /opt/intel/impi/5.0.1.035/intel64/bin/mpivars.sh mpi
PATH=$PATH:/opt/intel/impi/5.0.1.035/intel64/bin
在两台机器上都要进行
运行时用mpirun命令
例如mpirun –n4 –machinefile/machinefile ./ex
4进程数,命令选项–machinefile 后跟file的绝对路径
./ex 为进程
Machinefile可写成类似
# cat /machinefile
node1:2 #意为在结点1两个进程
node2:2 #意为在结点2两个进程