我一直在努力建立一个5节点,200个CPU集群,主要是因为R显然将NCONNECTIONS设置为将最大值限制为128.根据我读过的here,我需要更改parm和重建R(可能在每个节点上?),但我找不到上面指定的目录或文件。
如何更改NCONNECTIONS并重建R?
我正在运行Linux版本2.6.32-279.el6.x86_64
答案 0 :(得分:2)
从你提供链接的帖子中,我们读到“在src / main / connections.c中增加NCONNECTIONS之后你必须重建R”。我想这是R源代码树中的一个文件,所以你首先必须下载该源代码树,例如在任何基于Debian的发行版下:
$ apt-get source r-base
然后进行更改并编译(./configure ; make ; make install
目录中已创建的r-base-3.1.1
目录。
答案 1 :(得分:0)
这是一个简短的功能
FUN <- function(i) { Sys.sleep(1); paste("job", i) }
加载snow库并生成与群集中每台计算机的连接
library(snow)
cl <- makeSOCKcluster(5)
然后为每台机器使用parallel :: mclapply,使用所有可用的核心进行工作。
parLapply(cl, seq_along(cl), function(i, FUN, n, ...) {
parallel::mclapply(seq_len(n), FUN, ...)
}, FUN, 8, mc.cores=parallel::detectCores())
完成后清理
stopCluster(cl)
这是相同的策略,更加隐秘,并使用snow::splitList
(或splitIndicies
)将任务划分为雪群集的每个成员完成的任务。
library(snow)
library(parallel)
tasks <- splitList(1:40, length(cl))
parLapply(cl, tasks, mclapply, FUN, mc.cores=detectCores())
遗憾的是,没有默认的方法可以做到这一点; BiocParallel包允许
library(BiocParallel)
register(MulticoreParam()) ## 'inner' worker
register(SnowParam(4)) ## outer worker; 'register' is a stack
bplapply(1:4, function(i, FUN, n) {
result <- BiocParallel::bplapply(seq_len(n), FUN)
sprintf("%d:%d", i, unlist(result))
}, FUN, 8)