机器学习和生物信息学实验室联盟

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 2405|回复: 2
打印 上一主题 下一主题

MPI在linux(Ubuntu16.04)集群配置方法

[复制链接]
跳转到指定楼层
楼主
发表于 2017-9-25 23:03:07 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
[size=15.1111px]MPI在linux(Ubuntu16.04)集群配置方法
[size=15.1111px]Tech
MPI (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更新一下相关的依赖就&#128076;了。
  • 开始编译、链接、安装

[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]谢谢观看,本教程结束了。
Gang Lin (林钢),Postgraduate
School of Computer Science and Technology, Tianjin University, P.R. China
Email: lingang@nupter.org
Homepage: http://lab.malab.cn/~lg/



分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 转播转播 分享分享
回复

使用道具 举报

沙发
 楼主| 发表于 2017-9-25 23:05:05 | 只看该作者
富文本崩了。也可以访问下面的链接
http://boyof.danqian.wang/2017/09/22/title:%20MPI%E5%9C%A8linux(Ubuntu16.04)%E9%9B%86%E7%BE%A4%E9%85%8D%E7%BD%AE%E6%96%B9%E6%B3%95/
回复 支持 反对

使用道具 举报

板凳
发表于 2017-9-28 17:15:16 | 只看该作者
赞赞赞!有好的尝试,都可以记录在这里{:266:}
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

机器学习和生物信息学实验室联盟  

GMT+8, 2024-11-23 09:32 , Processed in 0.066166 second(s), 17 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表