并行代码导致线程中内存使用量增加(RStudio 缺陷)

Parallelized code result in inflated memory usage in threads (RStudio deffect)

概览:

我的 B 对象是一个 100 000 * 5000 的 2 GB 大矩阵
我的 A 对象较小 1000 * 5000

analyse_with_glm <- function(Y) {
  cond1 = unlist(apply(B, 2, function(X) coef(summary(glm(Y~X)))[,4][2]))
  cond2 = unlist(apply(B, 2, function(X) coef(summary(glm(Y~X+cov2)))[,4][2]))
  cond3 = unlist(apply(B, 2, function(X) coef(summary(glm(Y~X+cov3)))[,4][2]))
  list(cond1, cond2, cond3)}

cl = makeCluster(nb_cpu, type = "FORK", outfile='outcluster.log')
res = parApply(cl, A, 2, analyse_with_glm)

最初我有一个 rsession 进程使用 2.1GB 的 mermoy。
调用 parApply 函数后,我有 nb_cpu 个 4.5GB 的线程。

两个问题:

我使用'top'命令来监控线程和内存使用情况,这不是垃圾收集器可以释放的表面使用情况。线程因内存不足而崩溃。它 运行 在具有 30 个线程的 128GB 内存计算机上(nb_cpu = 30 在我的代码中)。

注意: 我也试过相反,在 parApply 中使用 B(大矩阵)而不是 A 但它没有解决问题。

这个答案可能是片面的,因为我仍然认为 R 在并行化代码时的行为很奇怪。 如果您 运行 来自 RStudio 的代码,并行线程往往会膨胀 ~/.rstudio/suspended-session-data/

所以为了避免它,这里有一个虚拟的解决方法。
1. 清理你的环境
2.注销
3.登录
4. 加载您的数据
5.运行并行代码

信息:

  • Rstudio 0.99.892
  • R 版本 3.3.1