gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 20:03:04 26 4
gpt4 key购买 nike

概述:

我的 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 函数后,我有 4.5GB 的 nb_cpu 线程。

两个问题:

  • 虽然 B 仅供读取,但它可以在线程之间从单个内存槽共享。如何进行?
  • 尽管如此,为什么每个线程 4.5 GB 而不是 ~2.1GB?

我使用“top”命令来监控线程和内存使用情况,这不是垃圾收集器可以释放的表面使用情况。线程因内存不足而崩溃。它运行在一台 128GB 内存的计算机上,有 30 个线程(在我的代码中 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

关于r - 并行代码导致线程中内存使用量增加(RStudio 缺陷),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36550859/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com