|
[size=15.1111px]MPI在linux(Ubuntu16.04)集群配置方法
[size=15.1111px]TechMPI (Message Passing Interface) 是一个并行计算的应用程序接口,通常在超级计算机、计算机集群等非共享内存环境中使用。MPI是目前高性能计算主要模型,所以一般情况下可能不会用到MPI,如果你有幸需要为几台机器配置MPI计算环境,那么这篇文章可能会提供一些帮助。 目前针对MPI接口的实现有两种,需要区分一下MPICH和Open MPI,这两种实现实际上是为了满足不同的需要,在安装配置的过程中会遇到一些问题。
[size=15.1111px]这篇文章总结的是MPICH的安装方法
[size=15.1111px]MPICH安装起初查看网上教程,想要偷懒使用apt的方法安装MPICH,这里会有个陷阱。
sudo apt-get install mpich
按照apt的方法在终端(Terminal)直接输入这行指令,安装完成实际上是Open MPI。两者的使用方法有一些不同。
mpiexec --help
查看上述指令打印出的结果的最后一行域名,可以区分计算机上是安装的哪个版本。 既然无法使用apt自动安装,我还是很不情愿的从官网下载release的压缩文件进行安装。 官网链接,针对自己的操作系统和环境选择要下载的 stable release,复制下载链接。(这里我建议在linux下重新创建一个特定的账户用来安装和运行MPICH)
wget ***链接***
[size=15.1111px]tar xzf mpich-$VERSION.tar.gz$
cd mpich-$VERSION
- 解压完毕,你需要选择一个安装路径,我建议一个比如:/home//mpich-install,mpich-install是个文件夹,账户目录(/home/)下没有的话,那就mkdir创建一个这样的文件夹。
mkdir mpich-install - 开始configure
[size=15.1111px]pwd # 确认当前目录在mpi-$VERSION/文件夹下
ls -al # 可以看到该目录下有一个叫做configure的可执行文件
./configure --prefix=/home/<USERNAME>/mpich-install 2>&1 | tee c.txt # 先进行配置,并把配置过程中的日志重新写入c.txt文件当中,方便失败后可以检查
一般configure报错会出现fortran或者c++的compile找不到的情况,这个时候按照报错信息,google一下然后使用apt更新一下相关的依赖就👌了。
[size=15.1111px]make 2>&1 | tee m.txt
make install 2>&1 | tee mi.txt
如果你自信,那就直接如下操作
make; sudo make install - 安装完成后,配置绝对路径,写入~/.bashrc文件当中
[size=15.1111px]vim ~/.bashrc
export PATH=/home/<USERNAME>/mpich-install/bin:$PATH # 增加这一行内容
:wq
source ~/.bashrc
- MPICH安装完成,且环境变量配置好,这时测试一下mpi的指令是否能够正常输出
mpiexec --help
[size=15.1111px]集群配置,让机器协同工作
[size=15.1111px]设置hosts文件hosts的文件路径为/etc/hosts,我们需要修改该文件成如下格式。
[size=15.1111px]sudo vim /etc/hosts
127.0.0.1 localhost
172.16.13.21 master
172.16.13.22 slave01
172.16.13.23 slave02
172.16.13.24 slave03
这是在master这台机器上的配置的写法,master负责分发任务给其他的slave进行计算,各自分工,这是一个集群的工作方式,其他的slave的hosts文件都需要修改成以上的格式。
[size=15.1111px]设置SSH这是很重要的一步,我们需要设置SSH使得master和的slave集群之间可以实现无密码访问,SSH是一种安全的通信协议,我们通过SSH提供的命令行工具,生成RSA秘钥或者DSA秘钥。
简单介绍一下无密码访问的原理。秘钥有一对,分为公钥和私钥,master将自己的公钥发送给其他的机器,在使用SSH访问的时候,被访问的机器向master发送被公钥加密后的字符,master再用本机上的私钥解开再发往被访问的机器,即完成一次验证的过程。
[size=15.1111px]sudo apt-get install openssh-server # 如果机器上已经安装ssh可以跳过这一步骤。
ssh-keygen -t dsa # -t选项后可以选择生成DSA或者RSA秘钥,如果你对秘钥有要求请自行选择如 -t rsa, rsa可以生成长度4096(-b 4096)的秘钥,更加的安全。
ssh-copy-id slave01@172.16.13.22 # username@remote-server
... # 对每个slave重复以上的步骤,将公钥拷贝至其他机器的~/.ssh目录下
... # 这时,你可以发现其他机器的~/.ssh目录下有一个authorized_keys
接下来需要验证一下是否能直接访问了。这里注意,我们从master能够无密码访问slave,需要互相无密码访问,可以直接吧~/.ssh文件夹全部拷贝至slave的用户目录下,使用scp指令就行。
ssh slave01
验证一下,如果失败了,就全部删除重来,中间可能会遇到一些蛋疼的问题。
[size=15.1111px]设置NFS- 设置master
SSH将几台机器连接成一个集群,可以方便的、安全的进行“无密码”通信,再继续配置NFS环境,在master主机上设置一个共享的文件夹,该文件夹存放之后需要运行的MPI的代码和数据们。
sudo apt-get install nfs-kernel-server
在master上使用apt安装这个东西先。
mkdir cloud
在用户目录下面创建该文件夹,共享该文件夹,cloud这个名字也是非常不错的,意味着主机通过这个“云”进行工作。
[size=15.1111px]sudo vim /etc/exports
/home/<USERNAME>/cloud *(rw,sync,no_root_squash,no_subtree_check) # 把这一行写入exports文件当中
前半部分是cloud文件夹的路径,后半部分有特定的意思。 - rw:可读可写
- sync:文件确定有改变才能被改变
- no_subtree_check:防止子树检查
- no_root_squash:允许root用户连接这个文件夹
[size=15.1111px]which exportfs # 找一下这个指令在什么地方,因为我第一次使的时候失败了
exportfs -a #这样每次以后改变/etc/exports就需要重新运行以下指令
sudo service nfs-kernel-server restart
- 设置slave
在slave上安装这个,并重复以下的步骤
sudo apt-get install nfs-common
也同样创建一个文件夹叫做cloud
mkdir cloud
然后把这个文件夹连上主机的cloud文件夹
sudo mount -t nfs master:/home/<USERNAME>/cloud ~/cloud
这个时候检查一下是否成功的mount上
df -h
打印出来的内容会告诉你会看到这个文件夹是否成功挂载到master机器上,这很关键,当然这只是暂时的,如果想要永久的挂载,那就修改/etc/fstab文件。
[size=15.1111px]sudo vim /etc/fstab
master:/home/<USERNAME>/cloud /home/<USERNAME>/cloud nfs # 增加这一行你就OK了
至此,所有的配置工作已经完毕,你已经可以在这个集群上使用mpi进行高性能,多机器,多核心并行计算了。
[size=15.1111px]检验运行是否正常在master,原来解压的源码的目录里边,你能找到一个叫做examples的文件夹,里面都有一些能给你进行测试的小程序,我们使用cpi这个程序,把它拷贝至cloud文件夹进行测试。
mpiexec -np 100 ./cpi
这是一个算pi的程序,这个时候,我们能看到具体的打印信息。想要使用集群,我们在cloud文件夹里再增加一个配置文件就行叫做::machinefile::
[size=15.1111px]master
slave01
slave02
slave03:24 # 冒号后面可以写上机器的核心数,其实也可以不用谢
接下来我们再测试
mpiexec -np 100 -f machinefile ./cpi
[size=15.1111px]谢谢观看,本教程结束了。
|
|