【发布时间】:2012-12-06 04:53:58
【问题描述】:
我试图通过并行化在大约 1000 个项目的列表上执行的昂贵操作来利用四核机器。
我目前正在使用 R 的 parallel::mclapply 函数:
res = rbind.fill(parallel::mclapply(lst, fun, mc.cores=3, mc.preschedule=T))
哪个有效。问题是,任何额外的子进程都必须分配一大块内存:
理想情况下,我希望每个核心都能从父 R 进程访问共享内存,这样当我增加 mclapply 中使用的核心数量时,我不会在核心限制之前遇到 RAM 限制。
我目前不知道如何调试此问题。每个进程访问的所有大型数据结构都是全局的(当前)。是不是这个问题?
我确实将操作系统的共享内存最大设置增加到 20 GB(可用 RAM):
$ cat /etc/sysctl.conf
kern.sysv.shmmax=21474836480
kern.sysv.shmall=5242880
kern.sysv.shmmin=1
kern.sysv.shmmni=32
kern.sysv.shmseg=8
kern.maxprocperuid=512
kern.maxproc=2048
我以为这样可以解决问题,但问题仍然存在。
还有其他想法吗?
【问题讨论】:
-
总有办法投入更多的计算能力。就个人而言,我会尝试在EBI R-cloud 的一个免费集群实例上运行该作业。他们有很好的服务器,而且是免费的。看看你可以花时间修改并行函数,我认为值得一试。否则,启动具有大量 RAM 和 BioConductor AMI 的 Amazon 实例。
-
任何运气整理或进一步理解它?我正在处理类似的事情,stackoverflow.com/q/20430773/210673
-
@Aaron 还没有进展,因为我最近不需要多核来进行计算。我可能不得不在几个月后重新审视这个问题。如果我发现任何新内容,我会确保更新帖子。
-
谢谢!如果我取得任何进展,将在我链接到的帖子上注明。
-
@Aaron 这次是全新的数据集,我没有对大型全局变量做任何奇怪的事情,比如复制或修改,使用最新的 R 二进制文件并包含“Parallel”包,以及 mclapply,以及同样的行为仍然发生。
标签: macos r shared-memory