重庆分公司,新征程启航
为企业提供网站建设、域名注册、服务器等服务
虚拟机CentOS中配置MPI多节点并行计算完整版,这是一个新手教程,从一个空白的CentOS到能正常运行的基础环境,尽量详细写了每个步骤
目前创新互联建站已为数千家的企业提供了网站建设、域名、网络空间、网站托管、服务器租用、企业网站设计、自流井网站维护等服务,公司将坚持客户导向、应用为本的策略,正道将秉承"和谐、参与、激情"的文化,与客户和合作伙伴齐心协力一起成长,共同发展。
我的环境如下:
宿主机:Windows 10 Pro
虚拟机:VMware 12 + CentOS 6.6
一、 虚拟机网络配置实现多节点互访
硬件资源有限,所以我只开了两台虚拟机均为 Centos 6.6。
1.修改网卡配置文件
/etc/sysconfig/network-scripts/ifcfg-eth0 将其中内容修改如下:
DEVICE=eth0
HWADDR=00:0C:29:A0:3A:CA
TYPE=Ethernet
UUID=bf583745-f834-451c-890c-39821a590543
ONBOOT=yes
NM_CONTROLLED=yes
BOOTPROTO=static
IPADDR=192.168.207.128
NETMASK=255.255.255.0
DNS1=192.168.207.2
将每一台虚拟机都如此配置,IPADDR是ip地址,不要重复
2.修改网关及主机名
/etc/sysconfig/network
ETWORKING=yes
HOSTNAME=node1
NTPSERVERARGS=iburst
GATEWAY=192.168.207.2
一些文章中提到还需要修改VMware的设置(关闭本地DHCP服务),实际上,Centos 中设置好后就不需要动VMware的设置了
二、 在虚拟机中添加同名用户
在不同节点中需要有同名的用户以方便免密码SSH连接
node1和node2中以root用户执行下列命令
# useradd mpiuser
三、 实现免密码SSH登陆
当前节点为node1,用户为mpiuser,工作目录为 ~ 家目录
1.生成 SSH 私钥对
$ ssh-keygen -t rsa 一路回车就好
2.进入 .ssh 目录
$ cd ./.ssh
3.生成authorized_keys文件
$ cp id_rsa.pub authorized_keys
4.回到mpiuser的家目录
$ cd ~
5.建立本身的信任连接
$ ssh node1
6.设置 node2
$ ssh-keygen -t rsa 生成.ssh文件夹
$ scp node1:~/.ssh/* ./ 拷贝node1上的.ssh文件夹到node2
# scp node1:/etc/hosts /etc/hosts 拷贝node1上的hosts文件到node2,可能需要root权限
$ ssh node2
$ ssh node1
7.如果还有其他节点,设置方法同node2
设置成功后,在任意节点执行SSH连接其他节点都不需要密码,注意必需每个节点都有mpiuser这个用户,之所以使用一个普通用户,是为了避免root执行mpi程序时遇到风险。在一些mpi实现中,也不允许以root用户执行。
四、 配置MPI运行环境
1. 下载 mpich
官方网站 下载其中的mpich-3.2.tar.gz
2. 解压并进入目录
# tar xvf mpich-3.2.tar.gz
# cd mpich-3.2
# ./configure –prefix=/usr/local/mpich
# make
# make install
3. 设置环境变量,修改 /etc/profile ,加入下面几行代码
PATH=$PATH:/usr/local/mpich/bin
MANPATH=$MANPATH:/usr/local/mpich/man
export PATH MANPATH
4. 使刚刚的修改生效
# source /etc/profile
5. mpi多节点配置
新建一个配置文件
# touch /usr/local/mpich/servers
修改其中内容为:
node1:2 #在node1上运行两个进程
node2:2
如果有多个节点继续往下写
五、 单节点测试
将源码包中的 examples 拷贝到 mpich 的安装目录
# cp -r ./examples /usr/local/mpich/
用示例程序进行测试
$ mpirun -np 4 /usr/local/mpich/examples/cpi
Process 1 of 4 is on node1
Process 0 of 4 is on node1
Process 3 of 4 is on node1
Process 2 of 4 is on node1
pi is approximately 3.1415926544231239, Error is 0.0000000008333307
wall clock time = 0.081049
得到如图的回显结果证明mpich的运行环境正常
六、 多节点测试
$ mpiexec -np 4 -f /usr/local/mpich/servers /usr/local/mpich/examples/cpi
Process 1 of 4 is on node1
Process 0 of 4 is on node1
Process 3 of 4 is on node2
Process 2 of 4 is on node2
pi is approximately 3.1415926544231239, Error is 0.0000000008333307
wall clock time = 0.139722
如上,在两个节点上分别运行了两个进程,配置过程到此结束
linux mpi.h一般在哪?MPI(Message Passing Interface),是一种必须和其它程序语言一起使用的一个接口。mpi.h就是这个接口库的头文件,需要下载并安装这个第三方库,目前主要使用的就是Mpich。1.首先进行解压文件openmpi-1.6.2.tar.gz。 2.然后执行cd openmpi-1.6.2 3.接着执行./configure,一段时间之后发现缺少g++编译器,所以执行sudo apt-get install g++ 4.执行完之后再执行一次./configure就可以配置成功, 5.执行sudo make all in。Linux下MPI环境的安装配置及MPI程序的编译运行,step by step。
下载MPI安装包
去这里下载一个适合的安装包。
安装包的解压
安装包所在的目录下,运行tar xzvf mpich-x.x.x.tgz。
切换到解压出来的包目录下
cd mpich-x.x.x
configure配置编译环境,我这里为它选择了一个安装路径。
新手,纯纯搬运工【出处引用自: 】
1. Linux常用命令
最常用:
ls(英文全拼:list files):列出目录及文件名
ls -l:列出目录及文件名,可查看更多
ls -al:可以看到隐藏文件
cd(英文全拼:change directory):切换目录
cd .. :返回上一级
cd 文件夹名:进入目录
pwd(英文全拼:print work directory):显示目前的目录
mkdir 文件夹名(英文全拼:make directory):创建一个新的目录
rmdir 文件夹名(英文全拼:remove directory):删除一个空的目录
cp xxx xxx(英文全拼:copy file): 复制文件或目录
mv xxx xxx(英文全拼:move file): 移动文件或目录,或修改文件或目录的名称
rm(英文全拼:remove): 删除文件
rm -r 文件夹名:递归删除某目录
clear:清空terminal的所有内容(或者使用Ctrl+L)
tab按键:补充完整文件名或文件夹名
次常用:
vim/vi 某文件 (编辑文件)
nano 某文件 (编辑文件)
touch 文件 (新建空文件)
sudo -s (切换到root模式)
exit (退出root模式等)
sudo chmod -R 755 文件名/文件夹名 (获取文件/文件夹的755权限)
chown [用户] [文件或目录] (改变文件或目录的所有者)
chgrp [用户组] [文件或目录] (改变文件或目录的所属组)
make (编译成.exe)
解压/解包:
tar文件 (注:tar是打包,不是压缩!)
解包:tar xvf FileName.tar
打包:tar cvf FileName.tar DirName
.gz文件
解压1:gunzip FileName.gz
解压2:gzip -d FileName.gz
压缩:gzip FileName
.tar.gz 和 .tgz文件
解压:tar zxvf FileName.tar.gz
压缩:tar zcvf FileName.tar.gz DirName
安装和卸载deb软件包:
安装:sudo dpkg -i deb文件
查看:sudo dpkg -l
卸载:sudo dpkg -r 软件名
参考资料:
[1] Linux 教程
[2] Linux常用命令
[3] linux中tar命令的用法
[4] 全网最全Linux命令总结
2. vim/vi里的操作
:q 退出
:wq 保存并退出
:w 保存
:q! 强行退出(不保存退出)
:w! 强行保存
i 进入编辑,转为输入模式(光标前面)
a 进入编辑,转为输入模式(光标后面)
o 进入编辑,转为输入模式(光标下方新建一行)
Esc 退出i(插入)命令
3. 超算中PBS常用命令
pbsnodes (查看所有节点)
pbsnodes -l free (查看空闲节点)
pbsnodes 某节点 (查看某节点状态)
ssh 某节点 (转到某节点)
exit (离开节点)
qsub 文件名.pbs/sh (提交任务)
qstat (列出状态)
qstat -q (列出队列)
qstat -n (列出队列中使用的节点)
qstat -f jobid (查看jobid任务的详细信息)
qdel jobid (取消任务)
4. 其他
(1)Linux开机自启
sh文件中包含:
#!/bin/bash#chkconfig: 2345 80 90#description:auto_run
sh文件移动到/etc/init.d后,分别输入命令:
chkconfig --add xxx.sh
chkconfig --list
chkconfig xxx.sh on
service xxx.sh start
参考资料: linux 开机启动 .sh 文件 - 自己的太阳 - 博客园
(2)Linux环境变量
方法1:临时使用环境变量:export PATH="/home/www/anaconda3/bin:$PATH"
方法2:修改.bashrc文件
参考资料: Linux PATH 作用以及查看和修改方法_haozhepeng的专栏
(3)两个sh文件
a.sh文件(用于提交任务,执行a.py文件)
#!/bin/sh#PBS -N task#PBS -l nodes=1:ppn=1#PBS -q scorecd $PBS_O_WORKDIRexport OMP_NUM_THREADS=1python a.py
a.sh文件(用于提交任务,执行a.exe文件)
#!/bin/sh#PBS -N task#PBS -l nodes=1:ppn=1#PBS -q scorecd $PBS_O_WORKDIRexport OMP_NUM_THREADS=1./a.exe
(4)一个makefile文件
makefile文件(用于编译Fortran文件)
INC := -I/public/software/compiler/intel/composer_xe_2015.2.164/mkl/include/intel64/lp64
LIB := -L/public/software/compiler/intel/composer_xe_2015.2.164/mkl/lib/intel64
mpi:= -I/public/software/mpi/mpich/3.1.4/intel/include /public/software/mpi/mpich/3.1.4/intel/lib -lmpich -limf -lsvml -lintlc
src:=Console1exec:=a
all: $(src).f90
ifort $(src).f90 $(INC) $(LIB) -openmp -lmkl_intel_lp64 -Wl,--start-group -lmkl_intel_thread -lmkl_lapack95_lp64 -lmkl_core -lmkl_blas95_lp64 -Wl,--end-group -liomp5 -lpthread -O2 -o $(exec).exe