问题标签 [dompi]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
477 浏览

r - doMPI 和集群

我第一次体验使用 R 和集群。在谷歌上搜索,我发现了包“doMPI”。这个包允许我自动创建流程。但是,我对功能有点困惑。

1 - startMPIcluster 和 registerDOMPI 有什么区别?

2 - 关于 startMPIcluster 的争论是什么?

3 - 当我使用命令mpirun -H n1,n2,n3 -n 1 R --slave -f sincMPI.R时,它是什么意思-n 1

4 - 最后,假设我有 4 个集群,每个集群有 60 个 CPU。我的代码会怎样?

0 投票
0 回答
211 浏览

r - R、foreach、doMPI 随着迭代次数的增加而降低速度

几年来,我已经在集群上使用了 R、doMPI 和 foreach 的组合,就所需的执行时间而言,通常增加模拟迭代次数是相当线性的。最近我一直在使用这个嵌套的 foreach 循环,当我增加模拟次数(NumSim)时,速度显着减慢,我不知道为什么。关于如何诊断或从哪里开始寻找的任何想法?

例如,作为一个测试示例,有 10 个核心,其他一切都保持不变,如果

NumSim = 10,完成时间为 678 秒

NumSim = 20,时间 = 1856 秒

NumSim = 30,时间 = 3560 秒

NumSim = 50,时间 = 7956 秒

在以前的工作中,我预计 NumSim =50 几乎需要 678 * 5 ~ 3390 秒。

0 投票
1 回答
470 浏览

r - doMPI 无法识别集群中 R 脚本的其他节点

  • 使用 RHEL7.3
  • 使用 R 3.3.2
  • 安装了 Rmpi​​_0.6-6.tar.gz 和 doMPI_0.2.1.tar.gz
  • 为 x86_64 安装了 mpich-3.0-3.0.4-10.el7 RPM

我创建了一个由三台机器组成的集群(aml1、2、3)。我可以从 mpich 安装中运行/examples/cpi示例,并且这些进程在所有三台机器上运行都没有问题。

我还可以运行需要多次运行的 R 脚本,这在 doMPI 文档中进行了讨论——因此该脚本可以在所有集群上运行。

我的问题是,当我的 R 脚本在 %dopar% 之前有代码需要在 master(aml1) 上运行一次,并且在集群 (aml2,aml3) 上运行 %dopar% 时。它只在主服务器上运行。并且 doMPI 说Size of MPI universe: 0并且不识别 aml2 或 aml3。

例如:

跑:mpirun -np 1 --hostfile ~/projects/hosts R --no-save -q < example6.R

(并且我的~/projects/hosts文件被定义为使用 8 个内核)

例子6.R:

example6.R 的输出:

如果我定义cl <- startMPIcluster(count=34, verbose=TRUE)我仍然得到以下但至少我可以运行 34 个从站:

我该如何解决这个问题?我想运行 R 脚本,以便它在主服务器上运行第一部分,然后在集群上执行 %dopar% 。

谢谢!!

更新 1

自上次更新以来,我尝试运行旧版本的 OpenMPI:

根据@SteveWeston,我创建了以下脚本并运行它:

使用以下输出:

在这里它只是挂起 - 没有任何反应。

0 投票
1 回答
1090 浏览

r - 让 mpirun 识别每个节点上的所有核心

我为 MPI 设置了两个节点,aml1(master)和 aml2(worker)。我正在尝试将 mpirun 与 R 脚本一起使用,并使用 Rmpi​​ 和 doMPI 库。两台机器的规格相同:

如果您想查看 hwloc lstopo 输出。

我正在使用 OpenMPI 1.10.5,我可以看到在 aml1 和 aml2 上运行的进程。但是,当我增加从 mpirun 生成的工作程序的数量时,我看不到我的测试脚本运行得更快,因此我看不到计算时间有任何减少。这让我假设 mpirun 没有正确检测有多少内核可用,或者我在主机文件或排名文件中错误地分配了它。

如果我将我的主机文件或排名文件更改为不同的插槽值:

然后我运行:

我仍然得到类似的系统运行时间:

我还尝试使用 tm 配置选项设置 Torque 和构建 openmpi,但我遇到了单独的问题。我相信我不需要使用 Torque 来完成我想做的事情,但请确认我是否不正确。

我想做的是用 Rmpi​​ 和 doMPI 运行一个 R 脚本。R 脚本本身应该只运行一次,并在集群中生成一段代码。我想最大化两个节点(aml,aml2)上可用的核心。

感谢社区的任何帮助!

更新 1

这里有更多细节:我运行以下命令,为每次运行更改主机文件:

我应该减少时间吗?或者这是最好的吗?我觉得我应该能够将每台主机的插槽增加到 30 个以获得最佳性能,但它的峰值约为每台主机 4 个插槽。

0 投票
1 回答
1626 浏览

r - doMPI 错误:系统中没有足够的可用插槽来满足应用程序请求的 2 个插槽

我试图让 doMPI 包在我的本地机器上运行,这样我就可以在将作业提交到集群之前对其进行测试。我正在使用 Mac OSX Yosemite 并通过 brew 安装了 open mpi 2.0.2。

mpirun -V

mpirun(开放 MPI)2.0.2

向http://www.open-mpi.org/community/help/报告错误

我已经阅读了 doMPI 的介绍,我正在尝试执行演示中的示例

mpirun -H localhost R --slave -f sincMPI.R

不幸的是,我不断收到以下错误。我用谷歌搜索,但似乎无法弄清楚可能出了什么问题。

已编辑:基于以下答案的测试结果

按规定工作:

我从 startMPIcluster() 中取出 count=2 ,它也有效。

如果取出count=2,就可以改变mpi run中的主机数。这里我指定了四个主机。

您甚至可以使用此方法指定多于可用内核的数量。我有 8 个(逻辑)核心,但我可以指定 9 个主机并且它运行。

但是,您不能将 count=9 放入 startMPIcluster()

那么,也许在 mac 上测试 mpi 的最佳方法是不在 startMPIcluster 中设置计数,而使用 -H 来控制任务数?

0 投票
1 回答
145 浏览

r - 使用 doMPI 写入日志文件

我在 HPC 上运行 doMPI,我想记录工作人员的输出。使用 doParallel,我能够使用makeCluster(outfile='myfile.log'). 使用 doMPI,任何方法中似乎都没有outfile参数。我尝试使用sinkWorkerOutput(). 这行得通,但只为其中一名工人写了日志。我怀疑每个工人都在覆盖另一个。是否有outfile用于 doMPI 的模拟?

一个相关的问题 - 在工人内部,我可以找到工人编号吗?

编辑:这是一个讨论如何使用 outfile 的答案的链接:How can I print when using %dopar%

谢谢您的帮助,

0 投票
1 回答
606 浏览

r - 包含 foreach 的 R 包将适用于 doParallel 但不适用于 doMPI,找不到对象

我正在尝试在 foreach 语句和 doMPI 后端编写一个包含多个嵌套函数的 R 包。它抛出“找不到”XXX“对象错误。奇怪的是,如果我使用 doParallel 作为后端,则不会发生此错误。这是问题的一个例子,但我可以使用一个可行的解决方案,与 doMPI更大的问题。

这是使用 RStudio、roxygen、devtools 等编译到 R-Package 中的代码。

然后我加载库并使用 emacs ESS(或从 RStudio 编辑器)和这些命令从 .R 文件调用顶级函数

当我使用 doParallel 作为并行后端运行它时,它工作正常,但是当我使用 doMPI 运行它时,我收到以下错误

它在 Ubuntu 16.04 Linux 上运行,使用 R 3.4.1、doMPI 0.2.2 和 doParallel。我已经把整个包放在 github 上https://github.com/jamaas/toymod.git

有人可以告诉我是否需要更改 doMPI 的代码吗?它似乎与生产 R 包有关。

0 投票
2 回答
41 浏览

r - 无法使用 doMPI 更改 foreach 函数内的布尔变量值

我构建了以下 mwe,它显示了一系列嵌套函数,这些函数在 foreach 语句中调用,并以 MPI 作为后端。所有这些都封装在一个 R 包中。问题是当我加载包,然后调用 fun3 时,我无法将 fun3on 的值从 TRUE 更改为 FALSE。有什么建议么?完整代码位于 https://github.com/jamaas/toymod3.git

期待那个呼唤

乐趣 1(乐趣 3 上 = 假)

改变输出值,但它没有?

0 投票
1 回答
613 浏览

r - 在 foreach 循环中找不到变量或环境的函数

我正在尝试构建一个在几个循环R package中包含顶级函数的函数。nested foreach这个顶级函数然后调用一组进一步的嵌套函数。我遇到的问题是词法范围,较低级别的函数找不到我放置变量的环境或变量。我尝试使用attach, 按照这个示例附加,但较低的函数仍然看不到必要的参数。我知道使用分叉方法的 doMPI 有一些特定的内容。这是在 Ubuntu Linux (16.04) 上,使用 doMPI (0.2.2) 和 foreach (1.4.3) 和 openmpi。这是我拥有的更大模型的mwe。该包和一个名为toymod4 包的运行/测试脚本可供下载。

0 投票
0 回答
2281 浏览

r - 使用 doMPI 打开 MPI 错误

doMPI在我们的 Linux 集群上运行时遇到问题。我正在尝试使用命令运行包sincMPI.R中的示例问题。我得到的错误是:doMPImpirun -n 1 Rscript sincMPI.R

Open MPI 不支持递归调用 mpiexec

我应该提到我能够加载doMPIRmpi库,所以我相信这意味着它们安装正确。也许这只是一个 OpenMPI 问题?