OpenMPI 集群配置
现在有2台机器,希望可以尝试一下在多台机器上跑MPI的感觉,所以跑之前就得配置,先参考网址:
https://www.cnblogs.com/awy-blog/p/3402949.html:
1. 配置自动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:~/.ssh/1.pub
在将 node2 的公钥文件拷贝到 node1 后,在node1-ubuntu进行如下处理,制作好文件 authorized_keys :
$ cp ~/.ssh/id_rsa.pub authorized_keys
$ cat ~/.ssh/1.pub >> authorized_keys
在node1 上制作好的authorized_keys拷贝到node2上:(node1使用scp)
$ scp ~/.ssh/authorized_keys node2:~/.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
现在2台机器已经可以自由的SSH登陆了!
2. MPI运行环境配置
执行了configure命令之后,
./configure --prefix=/home/<USERNAME>/openmpi >& | tee install1.log
提示:
Open MPI configuration:
-----------------------
Version: 3.0.
Build MPI C bindings: yes
Build MPI C++ bindings (deprecated): no
Build MPI Fortran bindings: no
MPI Build Java bindings (experimental): no
Build Open SHMEM support: yes
Debug build: no
Platform file: (none) Miscellaneous
-----------------------
CUDA support: no Transports
-----------------------
Cray uGNI (Gemini/Aries): no
Intel Omnipath (PSM2): no
Intel SCIF: no
Intel TrueScale (PSM): no
Mellanox MXM: no
Open UCX: no
OpenFabrics Libfabric: no
OpenFabrics Verbs: no
Portals4: no
Shared memory/copy in+copy out: yes
Shared memory/Linux CMA: yes
Shared memory/Linux KNEM: no
Shared memory/XPMEM: no
TCP: yes Resource Managers
-----------------------
Cray Alps: no
Grid Engine: no
LSF: no
Moab: no
Slurm: yes
ssh/rsh: yes
Torque: no
这里可以看到我们支持的通信协议和资源管理器支持只ssh
编译和安装的命令:
make all >& | tee make.log
make install >& | tee install2.log
出来一堆乱七八糟的,没眼看,然后找到安装目录下的 bin, 里面有很多编译器和可执行程序:

使用 mpicc 编译出可执行程序, 再使用 mpirun 去运行,就可以看到对应的输出。
正常运行后,这步骤就完成了!
3. 并行运行:
用vim编辑一个文件命名为hosts:如果你想在一个节点上运行多个进程,那么hostfile 可以使用 "slots" 属性。如果没有指定"slots",那么将假设其数目为1.
node1
node2
或者
node1-ubuntu slots=4
node2-ubuntu slots=2
让两个节点并行运行例子程序,如下所示:
$ mpiexec -hostfile hosts -np 8 ./Test
如果运行正常,就会在运行该命令的机器上有一些显示,如果host列表中的机器的 相同路径下 没有这个文件的话,会报错:
$ ~/OpenMpi/bin/mpiexec -hostfile hosts -np ~/TestA
--------------------------------------------------------------------------
mpiexec was unable to launch the specified application as it could not access
or execute an executable: Executable: /home/xxxxx/TestA
Node: localhost while attempting to start process rank .
--------------------------------------------------------------------------
就是:
1. 多台主机下 相同路径 下的 可执行程序命名相同
2. 开启进程数不要太多,以免超出上限,可参考 OpenMPI运行问题:enough slots available in the system
接下来,我发现,2台机器上的每个进程,但是 printf 输出的信息都只在一台机器上,这是为什么呢?——按照每台机器分别运行一个进程的话,应该打印在自身的控制台上才对呀?
后来通过测试,发现标准输出确实是只打印在运行命令的那台机器的控制台上。
而且只要可执行程序名称相同就可以,源代码是可以不一样的。(当然,最好还是一样啦,我这里弄成不一样是为了测试确实在2台机器上跑了)
机器一执行程序A: 输出固定数字 11
机器二执行程序B(生成源代码仅仅只有一个 printf 语句是不同的): 输出固定数字 22
给机器一划分一个进程,机器二也是一个进程,果然每次会输出11,22 或者 22,11 ——说明确实在2台机器上分别跑了。
也就是说,我们这个 MPI 集群其实已经搭建好了,接下来更深入的机理我后续会尽力去理清楚。
OpenMPI 集群配置的更多相关文章
- Ubuntu 14.04中Elasticsearch集群配置
Ubuntu 14.04中Elasticsearch集群配置 前言:本文可用于elasticsearch集群搭建参考.细分为elasticsearch.yml配置和系统配置 达到的目的:各台机器配置成 ...
- Redis 3.0 Cluster集群配置
Redis 3.0 Cluster集群配置 安装环境依赖 安装gcc:yum install gcc 安装zlib:yum install zib 安装ruby:yum install ruby 安装 ...
- MongoDB高可用集群配置的方案
>>高可用集群的解决方案 高可用性即HA(High Availability)指的是通过尽量缩短因日常维护操作(计划)和突发的系统崩溃(非计划)所导致的停机时间,以提高系统和应用的可用性. ...
- MySQL Cluster 7.3.5 集群配置实例(入门篇)
一.环境说明: CentOS6.3(32位) + MySQL Cluster 7.3.5,规划5台机器,资料如下: 节点分布情况: MGM:192.168.137. NDBD1:192.168.137 ...
- MySQL Cluster 7.3.5 集群配置参数优化(优化篇)
按照前面的教程:MySQL Cluster 7.3.5 集群配置实例(入门篇),可快速搭建起基础版的MySQL Cluster集群,但是在生成环境中,还是有很多问题的,即配置参数需要优化下, 当前生产 ...
- 关于ActiveMQ的几种集群配置
ActiveMQ的几种集群配置. Queue consumer clusters 此集群让多个消费者同时消费一个队列,若某个消费者出问题无法消费信息,则未消费掉的消息将被发给其他正常的消费者,结构图如 ...
- solrCloud+tomcat+zookeeper集群配置
solrcolud安装solrCloud+tomcat+zookeeper部署 转载请出自出处:http://eksliang.iteye.com/blog/2107002 http://eksli ...
- RabbitMq 集群配置
1. RabbitMQ 所需的附属安装包 1.1 openGL安装 执行命令: [root@localhost local]# yum install mesa-libGL-devel mesa-l ...
- Spring+quartz 实现定时任务job集群配置
为什么要有集群定时任务? 因为如果多server都触发相同任务,又同时执行,那在99%的场景都是不适合的.比如银行每晚24:00都要汇总营业额.像下面3台server同时进行汇总,最终计算结果可能是真 ...
随机推荐
- HTML&CSS笔记001
lesson1 <!DOCTYPE html><html lang="en,zh"><!-- 告诉搜索引擎爬虫,我们的网站是关于什么内容的 --> ...
- Oracle创建聚簇表
创建聚簇表过程: 创建簇(cluster)----创建簇表(基本类似创建一般表但有区别)----创建簇索引(index)----数据管理 创建簇: create cluster stu_ach(sid ...
- 极光推送能获取 registrationId,但是接收不到通知 - iOS
集成极光推送进行调试的时候,运行 App 可以正常获取 registrationId,但是却迟迟无法收到推送消息,而Android 端是可以正常收到消息; 检查了证书配置和极光的配置一切正常,便开始返 ...
- js取一个对象中的另一个对象
最开始的截图 原本是想取到其中的foodName 先是用一个for循环循环了下 for (var i=0;i<res.data.length;i++) { this.goodsList.res. ...
- chromium之compiler_specific
直接上代码,将一些编译警告定义成宏 #if defined(COMPILER_MSVC) // Macros for suppressing and disabling warnings on MSV ...
- 关于document.write()加载JS等静态资源 和 异步async加载JS
现流行浏览器对于静态资源的预加载 传统的浏览器,对于静态资源加载,会阻塞 HTML 解析器的线程进行,无论内联还是外链. 例如: <script src="test1.js" ...
- 常见IE8兼容性问题及解决
1.css3媒体查询 IE8不支持媒体查询 解决:respond.js,在页面中所有css文件的引用位置之后引用Respond.js 2.HTML5新标签 IE8不支持H5新标签 解决:html5sh ...
- Java常用容器对比
ArrayList与Vector ArrayList和Vector内部都是由数组实现的,数组实现的优点就是支持元素的随机访问(O(1)),但是在对元素进行插入和删除操作时,需要向后或向前移动数组,这样 ...
- 树莓派安装samba
(1) sudo apt-get install samba samba-common (2)mkdir /home/lin/share #(文件路径自己添加) (3)sudo chmod 777 / ...
- C#/STM32 WAV转byte WAV数据格式
最近在做STM32音乐播放器,选取了最容易做的WAV格式. 为了更方便开发自己做了一个WAV转Byte的小上位机 附软件下载链接 链接:https://pan.baidu.com/s/1Zz7bczZ ...