问题标签 [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.
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(虽然我不知道怎么用)
另一个可以给一些建议我接下来可以做什么?
非常感谢
r - 使用 type = MPI 的“doParallel”包和直接使用 doMPI 有什么区别?
使用 type = MPI 的“doParallel”包和直接使用 doMPI 有什么区别?
VS
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正在使用可用的内核?
感谢您的帮助。
r - doMPI 和用户定义的包
我开始使用doMPI
,并且我使用了我自己定义的包。
首先,我的文件中有要执行的:
注意:我没有使用cl <- startMPIcluster(count)
,因为我认为最好指定函数“外部”的核心数量,但我不清楚这样做cl <- startMPIcluster()
是否正确。
然后,通过加载我的包裹后library(my_package)
使用mpirun
导致
评估错误:找不到函数“my_function”
但是该功能my_function
在集群中被识别:当我没有运行时my_function
,MPI
结果是正确的。
然后,我将调用更改为:
然后它开始运行,所以添加my_package::
允许mpirun
了解是什么my_function
。这很奇怪,因为我在 library(my_package) 之前运行过。
但是开始运行之后,又出现了一个错误:
“评估错误:找不到函数“my_function_2”。”
my_function_2
是我的包上定义的函数。
当然,一种可能性是转到我包中的所有函数,当调用另一个函数时,只需添加my_package::
.
但我相信这不是应该的,所以我猜有一个我看不到的潜在错误/错误使用的指令。
关于可能发生什么问题的任何想法?先感谢您。
r - R - 如何迭代 4D 矩阵的每个切片
我在 R 中使用 doMPI来并行保存netCDF气候数据。该数据以 4 维矩阵的形式存储在 R 中m
,其中包含 6 个变量的数据,在 20000 个时间点,在一个纬度和经度网格上。m
因此被索引为m[lon,lat,time,variable]
。根据 netCDF 将其数据存储在磁盘上的方式,将数据写入磁盘的最有效方式是按时间片。因此,我想m
为每个变量一次迭代一个时间片。目前,我的代码如下所示:
这不必要地将整个m
矩阵复制到每个工人。这占用了大量的内存,我需要减少复制的数据量。我从这个答案中想到的是我可以迭代矩阵的每个时间片,因此每次迭代时只有时间片的数据被复制到每个工作人员。该foreach
构造允许多个对象同时迭代,因此我什至可以将时间索引与矩阵时间片放在一起而不会出现问题。不幸的是,我不知道有任何方法可以按时间片迭代矩阵。有没有办法做到这一点,这样在变量循环的每次迭代t
中,我都可以有一个保存二维矩阵的变量?foreach
var
data
m[,,t,var]
我已经尝试过下面的直观方法,但它会遍历每个单独的元素,而不是一次遍历整个时间片。
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 做到这一点?
谢谢,
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 安装,这是失败的吗?
r - 如何通过 bsub 提交 doMPI 作业?
我正在尝试使用带有 doMPI 包的 foreach 循环提交 R 脚本。不幸的是,该过程在 50 个请求的节点中的每一个上启动。但我希望每个节点都用于执行其中一次 foreach 迭代。
这就是我提交 R 脚本的方式。
的内容sincMPI.R
是
这改编自 doMPI 包中的示例。
结果 in"out_dt.csv"
现在的行数比预期的多 50 倍,因为每个节点都在执行所有 foreach 迭代。
为什么会发生这种情况?如何将 50 个内核中的 49 个用作从属进程,而不是全部作为主进程?