问题标签 [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 回答
127 浏览

r - 在 R 中利用多个多核 linux 服务器进行计算

我有四个 32 核 linux 服务器(CentOS 7),我想用它们在 R 中进行并行计算

到目前为止,我一直只使用 doMC 包和 registerDoMC(cores=32) 来利用单个服务器的多核功能。我想将此扩展到所有四台服务器(即 128=32x4,如果可能的话)

我在网上做了一些搜索,似乎有很多选择:PSOCK、MPI、SNOW、SparkR 等。尽管如此,我无法在网上找到任何建议。

我知道有一些先决条件,这是我到目前为止所做的:1)所有服务器都是“连接的”,即。可以通过无密码登录相互 SSH 2) NFS 已安装,因此所有服务器都可以访问(读取、写入和执行访问)3) 所有服务器在相同的 R 二进制文件上运行(在 anaconda 下构建在所有服务器的共享位置上可以执行) 4)安装了openmpi、Rmpi、snow、doSNOW、Spark、SparkR(虽然我不知道怎么用)

另一个可以给一些建议我接下来可以做什么?

非常感谢

0 投票
1 回答
849 浏览

r - 使用 type = MPI 的“doParallel”包和直接使用 doMPI 有什么区别?

使用 type = MPI 的“doParallel”包和直接使用 doMPI 有什么区别?

VS

0 投票
1 回答
229 浏览

r - doMPI 和节点、处理器和内核

我想使用我可以访问的集群进行分布式并行计算:5 个节点(“计算机”);每个节点有两个处理器(“CPU”),每个处理器有 18 个内核。

因此,在令人尴尬的并行计算中,我可以使用的线程数是 180 (5*2*18)。

我发现我不能对集群使用标准的并行 R 函数。相反,我需要使用 MPI。doMPI 似乎非常适合这项任务,因为它为 MPI 实现了一个 foreach,如小插图中所述:

https://cran.r-project.org/web/packages/doMPI/vignettes/doMPI.pdf

我有一个关于 MPI 的问题:当一个人写作时,例如:

cl <- startMPIcluster(count=2)

这2是什么意思?集群中要使用的节点数?要使用的核心数?

如果 2 代表要使用的节点数,doMPI 是否能够使用每个节点中的 2 个处理器和 2*18 个内核?还是我必须告诉 doMPI 其他事情,这样我才能使用这 36 个内核?

如果 2 代表核心数,那么一切似乎都更容易了。但是这个选择会很奇怪,因为如果集群实际上大于 5 个节点(并且我已经按比例分配了 5 个节点),那么如果 doMPI 应该使用尽可能少的节点(并且该节点内的所有内核)或使用尽可能多的节点(以及该节点内尽可能少的内核)。

所以,我的问题是:

如果我想执行 180 个令人尴尬的并行任务(或 360 或 1800)的循环,我应该使用 cl <- startMPIcluster(count=5) 还是 cl <- startMPIcluster(count=180) 或其他东西,例如 180正在使用可用的内核?

感谢您的帮助。

0 投票
1 回答
69 浏览

r - doMPI 和用户定义的包

我开始使用doMPI,并且我使用了我自己定义的包。

首先,我的文件中有要执行的:

注意:我没有使用cl <- startMPIcluster(count),因为我认为最好指定函数“外部”的核心数量,但我不清楚这样做cl <- startMPIcluster()是否正确。

然后,通过加载我的包裹后library(my_package)

使用mpirun导致

评估错误:找不到函数“my_function”

但是该功能my_function在集群中被识别:当我没有运行时my_functionMPI结果是正确的。

然后,我将调用更改为:

然后它开始运行,所以添加my_package::允许mpirun了解是什么my_function。这很奇怪,因为我在 library(my_package) 之前运行过。

但是开始运行之后,又出现了一个错误:

“评估错误:找不到函数“my_function_2”。”

my_function_2是我的包上定义的函数。

当然,一种可能性是转到我包中的所有函数,当调用另一个函数时,只需添加my_package::.

但我相信这不是应该的,所以我猜有一个我看不到的潜在错误/错误使用的指令。

关于可能发生什么问题的任何想法?先感谢您。

0 投票
1 回答
151 浏览

r - R - 如何迭代 4D 矩阵的每个切片

我在 R 中使用 doMPI来并行保存netCDF气候数据。该数据以 4 维矩阵的形式存储在 R 中m,其中包含 6 个变量的数据,在 20000 个时间点,在一个纬度和经度网格上。m因此被索引为m[lon,lat,time,variable]。根据 netCDF 将其数据存储在磁盘上的方式,将数据写入磁盘的最有效方式是按时间片。因此,我想m为每个变量一次迭代一个时间片。目前,我的代码如下所示:

这不必要地将整个m矩阵复制到每个工人。这占用了大量的内存,我需要减少复制的数据量。我从这个答案中想到的是我可以迭代矩阵的每个时间片,因此每次迭代时只有时间片的数据被复制到每个工作人员。该foreach构造允许多个对象同时迭代,因此我什至可以将时间索引与矩阵时间片放在一起而不会出现问题。不幸的是,我不知道有任何方法可以按时间片迭代矩阵。有没有办法做到这一点,这样在变量循环的每次迭代t中,我都可以有一个保存二维矩阵的变量?foreachvardatam[,,t,var]

我已经尝试过下面的直观方法,但它会遍历每个单独的元素,而不是一次遍历整个时间片。

0 投票
0 回答
29 浏览

r - R - 我们可以从奴隶创建一个新的 doMPI 集群吗

我正在“生成”模式下使用 doMPI 创建一个 MPI 集群:

cl <- startMPIcluster(20,verbose = TRUE)

是否可以将集群对象传递给从属,以便我可以在从属上启动另一个集群?每个从站运行一个优化器(genoud),大约需要 20 分钟,但如果我可以将集群对象传递给它,优化器会更快。因此,理想情况下,我想从从属服务器创建一个新集群,并使用从属服务器的环境设置其环境。我尝试从奴隶调用 startMPIcluster (9个节点),但它只是挂起这个错误:

error executing task: count must be either unspecified, or set to 9

有没有办法用 doMPI 做到这一点?

谢谢,

0 投票
1 回答
28 浏览

r - 带有 MPICH Virgin Build DoMPI 的 Ubuntu 21.04 桌面上的 Rmpi

我在 Z820 Intel Xeon(R) CPU E5-2643 v2 @ 3.50GHz × 24 上构建了 64 位 Ubuntu 21.04 的原始构建。操作系统是使用默认设置安装的。

MPICH 安装:

对于特定系统 mpich 版本 3.4.2 通过以下步骤。

R安装:

结果:

这就像我可以想象的那样简单的 mpi 安装,这是失败的吗?

0 投票
0 回答
16 浏览

r - 如何通过 bsub 提交 doMPI 作业?

我正在尝试使用带有 doMPI 包的 foreach 循环提交 R 脚本。不幸的是,该过程在 50 个请求的节点中的每一个上启动。但我希望每个节点都用于执行其中一次 foreach 迭代。

这就是我提交 R 脚本的方式。

的内容sincMPI.R

这改编自 doMPI 包中的示例。

结果 in"out_dt.csv"现在的行数比预期的多 50 倍,因为每个节点都在执行所有 foreach 迭代。

为什么会发生这种情况?如何将 50 个内核中的 49 个用作从属进程,而不是全部作为主进程?