【问题标题】:When running RStan jobs in R on a cluster, is it possible using too many cores will result in insufficient memory?在集群上运行 R 中的 RStan 作业时,使用过多的内核是否可能会导致内存不足?
【发布时间】:2019-10-22 00:34:58
【问题描述】:

我目前正在尝试在R 的计算集群上运行并行化的RStan 作业。我通过指定以下两个选项来做到这一点:

options(mc.cores = parallel::detectCores())
rstan_options(auto_write = TRUE)

上面分配了 48 个可用内核,我拥有的总 RAM 为 180 GB。我一直在理论上认为更多的内核和更多的 RAM 更好。我正在运行很长的作业,并且集群中出现内存不足错误。我想知道我是否可能没有为每个核心提供足够的内存。有没有可能48个核心各自拆分180GB,然后每个核心都被爆满?

如果我使用 180 GB 的 RAM 而不是 3 个内核,这会解决内存错误吗?还是无论我有多少个内核,如果工作时间长,总内存总会在某个时候用完?谢谢!

【问题讨论】:

    标签: r cluster-computing rstan


    【解决方案1】:

    RStan 只会使用与链一样多的内核(默认为 4)。如果你在 Linux 集群上使用 shell,它会分叉而不是复制数据。因此,如果您有空闲的内核,最好使用它们在 Stan 程序中使用 map_rect 函数并行计算,如果可能的话。

    但所有这些可能都与您的记忆问题无关。在大多数情况下,它甚至不需要 1 GB。

    【讨论】:

    • 谢谢,你所说的分叉与复制数据是什么意思?
    • R 会话的一个分支本质上保持相同的全局工作区(您的数据所在的位置)并启动多个线程,这些线程都可以访问该数据。这是从 shell 运行 R 时使用的机制。从 GUI 运行 R 时不建议这样做,因此在这种情况下,RStan 将通过套接字启动多个独立进程,这要求每个进程都获得一份数据副本。在具有大量数据和少量 RAM 的极少数情况下,这可能会限制您可以在不耗尽 RAM 的情况下使用的内核数量。但这与您在 OP 中描述的用例无关。
    猜你喜欢
    • 1970-01-01
    • 2014-06-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-02-18
    • 1970-01-01
    • 2012-10-06
    • 1970-01-01
    相关资源
    最近更新 更多