MPICH2在两台Ubuntu上安装(用mpd做进程管理)
本文在经过大量的实验终于不负众望成功的在两台Ubuntu 12.04上部署MPI的一个小型集群,MPICH2所用版本为mpich2-1.4.1,下载地址:http://www.mcs.anl.gov/research/projects/mpich2staging/goodell/downloads/index.php?s=downloads
1.安装准备
1.1 首先肯定是需要安装GCC和G++编译器,这个直接apt-get就OK了;
sudo apt-get g++ gfortran
1.2 设置主机名
先在/etc/hosts中删除原来的hostname,然后 vi /etc/hostname改成你想要的,注意必须顶行写。然后使用hostname命令来重新得到hostname, logout一下再login就会改掉。
这里我用的是node1-ubuntu和node2-ubuntu。
1.3 修改hosts文件,修改如下:
192.168.1.133 node1-ubuntu server
192.168.1.135 node2-ubuntu
1.4 配置自动ssh登录
这里主要是要各个机器之间能无密码访问,主要用到的就是SSH,因此需要一些设置。
首先,我们需要导出各个节点的公钥和私钥:
$ ssh-keygen -t rsa
在运行过程中,会提示你输入这个输入那个,不用管那么多,直接回车就完了。等运行结束后,进入.ssh目录,你会看到公钥和私钥文件;
$ cd ~/.ssh
$ ls
id_rsa id_rsa.pub
其中id_rsa就是私钥,id_rsa.pub就是公钥,现在我们需要把各个节点上的公钥都集中发送到一个节点上,来制作授权文件(authorized_keys).
注意:在两台机器必须安装ssh(sudo apt-get install ssh openssh-server)而且必须设置root密码(sudo passwd root),才能远程登录
$ scp ~/.ssh/id_rsa.pub node1-ubuntu:~/.ssh/1.pub
在将node2-ubuntu拷贝到node1-ubuntu后,在node1-ubuntu进行如下处理:
$ cp ~/.ssh/id_rsa.pub authorized_keys
$ cat ~/.ssh/1.pub >> authorized_keys
在node1-ubuntu上制作好的authorized_keys拷贝到node2-ubuntu上:(node1-ubuntu使用scp)
$ scp ~/.ssh/authorized_keys node2-ubuntu:~/.ssh/
要想让这两台机器无密码登录,所以我们需要更改一下必要的文件的权限(所有节点都要更改):其实只要保证authorized_keys的文件权限为600或者644
$ chmod 755 ~
$ chmod 755 ~/.ssh
$ chmod 600 ~/.ssh/authorized_keys
$ chmod 600 ~/.ssh/id_rsa
$ chmod 644 ~/.ssh/id_rsa.pub
至此,SSH配置就完成了。下面检验一下:
在一个主机上面SSH另一个主机:
$ ssh node1-ubuntu
2.安装MPICH2
2.1 首先将下载的文件解压,下载的文件在当前用户目录里面的“下载”目录里面,我直接解压到当前目录:
$ tar xvfz mpich2-1.4.1.tar.gz
2.2 安装官方文档配置的,可以查看解压后的README文档参考:由于是bash,因此选择以下命令,prefix指示安装路径,USERNAME就是当前用户的用户名,由于这里我不用fortran,因此加上参数(--disable-f77 and --disable-fc),
在此之前当然要建立安装MPICH的路径,也就是:
$ mkdir mpich2
运行shell程序configure对mpich进行一些配置,使用hydra作为pm
$ ./configure --prefix=/home/<USERNAME>/mpich2 --with-pm=mpd:hydra --disable-f77 --disable-fc 2>&1 | tee c.txt
而且在之前的安装过程中,我发现如果不禁止fortran,安装会出问题,会导致MPICH2安装不完全而出错,是因为没有安装fortran编译器,如果使用C/C++的话,这里建议禁用fortran。
接下来,编译和安装:
$ make 2>&1 | tee m.txt
$ make install 2>&1 | tee mi.txt
安装完成后,会有如下情况:
至此,MPICH2安装完成。
2.3 设置进程的配置环境
这里所说的配置文件主要是进程管理的配置文件,hydra是默认的进程管理,smpd只支持MPICH2的windows版本,这里我们使用mpd。这段配置的详细情况见官方安装文档(章节:Installing and Managing Process Managers):http://www.mcs.anl.gov/research/projects/mpich2staging/goodell/documentation/files/mpich2-1.5-installguide.pdf
MPI应用一个管理器来管理运行MPI程序,这个管理器就是mpd,但是在正式开始运行mpd前还需要一个基于安全考虑的配置文件,.mpd.conf,而这个文件只能由用户读写,创建文件如下:(在每个结点上)
cd $HOME
touch .mpd.conf
chmod 600 .mpd.conf
注意:$HOME是看你处于那个用户下还是root权限下,取决于你运行的权限问题。
然后在文件中写入secretword=***,***在参与的计算机上必须完全一致。
建立hosts文件:(在每个参与计算的计算机上都要有mpd.hosts)
$ sudo vim ~/mpd.hosts
文件的结构如下:
# Some Comments
MainNode:8 # other comments
Node1:2
Node2:2
每行中由冒号(:)分隔的前半部分表示节点,可以使用节点名也可以使用IP地址,貌似不区分大小写;后半部分表示可用的CPU数量。注释用“#”前导。根据你的实际情况撰写hosts文件。
编辑如下:
node1-ubuntu #192.168.1.133
node2-ubuntu #192.168.1.135
至此,设置完毕进程环境。
2.4 设置环境变量
这里设置环境变量主要是将MPICH的安装目录加到系统环境变量中,这里我在/etc/environment中加入对应的路径:
用vim编辑器打开/etc/environment:
$ sudo vim /etc/environment
输入密码之后,将下面语句添加到最后一行:
PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/home/awy/mpich2/bin"
3.验证是否成功:
$ which mpd
/home/awy/mpich2/bin/mpd
$ which mpicc
/home/awy/mpich2/bin/mpicc
$ which mpiexec
/home/awy/mpich2/bin/mpiexec
$ which mpirun
/home/awy/mpich2/bin/mpirun
这样就说明mpich已经安装成功了。
4.测试:
启动运算集群:
/home/awy# mpdboot -n 2 -f mpd.hosts
-n表示要启动的机器个数,一般是不大于mpd.hosts文件中的机器数,比如本文中的例子就是两台机器。这样,列表中的机器就会启动其本机上的mpd管理器。
测试MPICH源码包里example下的cpi,然后在主节点下运行:
# mpiexec -np 2 ./Download/mpich2-1.4.1/example/cpi
mpd在运行过程中,可以通过mpdtrace显示参与计算的机器名,mpdtrace –l则是显示机器名以及其端口.
5.问题解决
5.1 通过mpdcheck获得一些帮助信息
$ mpdcheck -pc
5.2 查错
$ mpdcheck -l
5.3 通过mpd.hosts文件查错
$ mpdcheck -f mpd.hosts //如果无错误
$ mpdcheck -f mpd.hosts -ssh
5.4 如果上述无错误,可略过此步
对任意两台机器进行查错
node1-ubuntu: $ mpdcheck -s //输出主机名host和端口port
node2-ubuntu: $ mdpcheck -c host port
以上四步都是在没有运行mpd的情况下进行的。
5.5 mpd查错
node1-ubuntu: $ mpd -e & //返回使用的端口
node2-ubuntu: $ mpd -h node1-ubuntu -p echoed_port_node1-ubuntu &
以上测试通过,集群系统就建成了。
MPICH2在两台Ubuntu上安装(用mpd做进程管理)的更多相关文章
- MPICH2在两台Ubuntu上安装
本文在经过大量的实验终于不负众望成功的在两台Ubuntu 12.04上部署MPI的一个小型集群,MPICH2所用版本为mpich2-1.4.1,下载地址:http://www.mcs.anl.gov/ ...
- 如何在一台服务器上安装两个mysql或者更多
如何在一台服务器上安装两个mysql 1 前言 上篇写了在一台机器上源码编译安装一个mysql,那么如何在一台机器上源码编译安装两个mysql或者更多呢? 2 环境 mysql ...
- (windows)一台电脑上安装两个Mysql服务
原文:https://my.oschina.net/u/1472917/blog/410732 最近需要在一台电脑上安装两个Mysql服务,需求稍微有些奇怪,但确实很必要.本人原本为了本机测试Word ...
- 如何在一台机器上安装两个MYSQL数据库
1.正常安装第一个mysql(安装步骤省略) 2.在控制面板里停止第一个mysql服务 3.将C:\Program Files\MySQL目录下的所有目录和文件copy到另外一个路径,我这里是copy ...
- [异常解决] ubuntu上安装JLink驱动遇到的坑及给后来者的建议
一.前言 最近将整个电脑格式化,改成了linux操作系统 希望这样能让自己在一个新的世界探索技术.提升自己吧- win上的工具用多了,就不想变化了- 继上一篇<ubuntu上安装虚拟机遇到的问题 ...
- Ubuntu上安装MongoDB(译)
add by zhj:直接从第四步开始就可以了,而且安装好MongoDB后会自动启动的,不必自己去执行启动命令 原文:https://docs.mongodb.com/manual/tutorial/ ...
- ubuntu上安装mysql 编译安装
为什么要折腾?首先说明的是ubuntu上安装mysql等软件是非常容易简单的,其简单的程度盖过windows上的安装,一句sudo apt-get install就可以搞定.如果想用最简便的方法安装m ...
- Ubuntu上安装和使用SSH,Xming+PuTTY在Windows下远程Linux主机使用图形界面的程序
自:http://blog.csdn.net/neofung/article/details/6574002 Ubuntu上安装和使用SSH 网上有很多介绍在Ubuntu下开启SSH服务的文章,但大 ...
- 关于同一台机器上安装多个sql实例的连接方法
由于客户需要在一台服务器上安装了两个sql服务器(一个sql2000,一个是sql2005,其实例名不同),默认的端口1433被先安装的sql2000使用,后来安装的的随机启用了一个3045端口.其中 ...
随机推荐
- QTP关于AOM的Javascript启动方式
序 QTP的AOM模型想必大家都很熟悉了,平时常用的就是通过VBS脚本的方式编写启动程序(也是我现在用的方法).其实,还有很多其他的方式,如Java,C#,JS,这些语言都是通过调用QTObjectM ...
- 【Android Studio】No JVM installation found
如果没有配置好JDK的环境变量,启动Android Studio的时候会报错: 请参考我整理的博客文章<JDK的下载.安装和配置>,链接:http://www.cnblogs.com/du ...
- Cyclic Nacklace - HDU 3746(next求循环节)
题目大意:给你一些串,问如果想让这个串里面的循环节至少循环两次,需要添加几个字符(只能在最前面或者最后面添加).比如ababc 需要添加5个就是添加ababc. 分析:其实字符串的长度len-next ...
- Java线程面试题 Top 50【转载】
不管你是新程序员还是老手,你一定在面试中遇到过有关线程的问题.Java语言一个重要的特点就是内置了对并发的支持,让Java大受企业和程序员的欢迎.大多数待遇丰厚的Java开发职位都要求开发者精通多线程 ...
- Git push本地代码到新建远程仓库
快速搞定 1.git init #初始化本地仓库 2.git remote add origin https://git.oschina.net/redArmy/springboot-swagger ...
- 全面剖析XML和JSON
1.定义介绍 (1).XML定义扩展标记语言 (Extensible Markup Language, XML) ,用于标记电子文件使其具有结构性的标记语言,可以用来标记数据.定义数据类型,是一种允许 ...
- 技术型创业者easy遇到的三大问题
关于创业这事儿.由于经历的事情实在是太多了,所以真是想到哪儿写到哪儿. 这一篇算是<杂记>的番外篇.我今天想说的东西太多了,实在是非常想和很多其它人讨论讨论关于创业的事情. 这样的感觉就像 ...
- 算法9-5:最大流算法的Java代码
残留网络 在介绍最大流算法之前先介绍一下什么是残留网络.残余网络的概念有点类似于集合中的补集概念. 下图是残余网络的样例. 上面的网络是原始网络.以下的网络是计算出的残留网络.残留网络的作用就是用来描 ...
- [PWA] 9. Service worker registerion && service work's props, methods and listeners
In some rare cases, you need to ask user to refresh the browsser to update the version. Maybe becaus ...
- jboss7 Java API for RESTful Web Services (JAX-RS) 官方文档
原文:https://docs.jboss.org/author/display/AS7/Java+API+for+RESTful+Web+Services+(JAX-RS) Content Tuto ...