小编Hen*_*ikB的帖子

如何高效并行brms::brm?

问题总结

我正在将brms::brm_multiple()模型拟合到大型数据集,其中使用该包估算了缺失的数据mice。数据集的大小使得并行处理的使用非常可取。但是,我不清楚如何最好地使用计算资源,因为我不清楚如何brms在核心之间划分估算数据集的采样。

如何选择以下选项以最大限度地有效利用计算资源?

  • 插补数 ( m)
  • 链数 ( chains)
  • 核心数 ( cores)

概念示例

假设我天真地(或者为了举例而故意愚蠢地)选择m = 5, chains = 10, cores = 24。因此,需要在 HPC 上保留的 24 个核心之间分配 5 x 10 = 50 个链。如果没有并行处理,这将需要约 50 个时间单位(不包括编译时间)。

我可以想象 的三种并行化策略brms_multiple(),但可能还有其他策略:

场景 1:并行估算数据集,串行关联链

这里,5 个插补中的每一个都分配给它自己的处理器,该处理器串行运行 10 个链。处理时间为 10 个单位(与非并行处理相比,速度提高了 5 倍),但糟糕的规划浪费了 19 个核心 x 10 个时间单位 = 190 个核心时间单位(ctu;= 80% 的预留计算资源)。有效的解决方案是设置cores= m

场景 2:串行估算数据集,并行关联链

在这里,采样首先获取第一个估算数据集,并在 …

parallel-processing r rstan

5
推荐指数
0
解决办法
2080
查看次数

如何使用 R future 包在集群内进行并行计算?

我想for在集群的节点(几台机器)内分配作业(带有循环)。我尝试使用 R 包future来做到这一点。我不知道这是否是最好的方法;我尝试使用foreachdoParallel包,但没有成功。如何判断循环迭代次数何时大于集群节点数?

library(doParallel);
library(doFuture);
#library(future);

registerDoFuture();

workers <- c(rep("129.20.25.61",1), rep("129.20.25.217",1));
cl <- makeClusterPSOCK(workers, revtunnel = TRUE, outfile = "", verbose = FALSE);

plan(cluster, workers = cl)

mu <- 1.0
sigma <- 2.0

for(i in 1:3){
 res %<-%{ rnorm(i, mean = mu, sd = sigma)}
 print(i);
}
Run Code Online (Sandbox Code Playgroud)

parallel-processing r cluster-computing r-future

3
推荐指数
1
解决办法
2185
查看次数

在 R 中运行并行计算时如何在工作线程上设置 .libPaths(检查点)

我使用检查点包进行可重复的数据分析。有些计算需要很长时间才能计算,所以我想并行运行它们。然而,当并行运行时,检查点未在工作线程上设置,因此我收到一条错误消息“没有名为 xy 的包”(因为它没有安装在我的默认库目录中)。

我如何确保每个工作人员都使用检查点文件夹中的包版本?我尝试在 foreach 代码中设置 .libPaths 但这似乎不起作用。我还希望在全局范围内设置检查点/libPaths 一次,而不是在每个 foreach 调用中设置一次。

另一种选择可能是更改 .Rprofile 文件,但我不想这样做。

checkpoint::checkpoint("2018-06-01")

library(foreach)
library(doFuture)
library(future)

doFuture::registerDoFuture()
future::plan("multisession")

l <- .libPaths()

# Code to run in parallel does not make much sense of course but I wanted to keep it simple.
res <- foreach::foreach(
  x = unique(iris$Species),
  lib.path = l
) %dopar% {
  .libPaths(lib.path)
  stringr::str_c(x, "_")
}
Run Code Online (Sandbox Code Playgroud)

{ 中的错误:任务 2 失败 - “没有名为‘stringr’的包”

parallel-processing foreach r checkpoint r-future

3
推荐指数
1
解决办法
1171
查看次数

无法在 R 中并行化具有多个参数的函数

我尝试并行化一个简单的函数,该函数将两个数字相加并在库中R使用时打印结果。这是我的代码:mclapplyparallel

\n
library(doParallel)\nt = list(list(1,1),list(2,2),list(3,3))\nf <- function (a,b){\n    print(a + b)\n}\nmclapply(t,f)\n
Run Code Online (Sandbox Code Playgroud)\n

但它返回错误:

\n
Warning message in mclapply(t, f):\n\xe2\x80\x9call scheduled cores encountered errors in user code\xe2\x80\x9d\n
Run Code Online (Sandbox Code Playgroud)\n
[[1]]\n[1] "Error in print(a + b) : argument \\"b\\" is missing, with no default\\n"\nattr(,"class")\n[1] "try-error"\nattr(,"condition")\n<simpleError in print(a + b): argument "b" is missing, with no default>\n\n[[2]]\n[1] "Error in print(a + b) : argument \\"b\\" is missing, with no default\\n"\nattr(,"class")\n[1] "try-error"\nattr(,"condition")\n<simpleError in print(a + b): argument "b" is missing, with …
Run Code Online (Sandbox Code Playgroud)

parallel-processing r mclapply

1
推荐指数
1
解决办法
637
查看次数