gpt4 book ai didi

r - 是否可以在多个内核上使用 JAGS 运行多个链(分割链)

转载 作者:行者123 更新时间:2023-12-04 12:32:38 24 4
gpt4 key购买 nike

例如,我想知道是否可以在 5 或 6 核上的 JAGS 中分割 3 个链。这是我的代码:

  library(parallel)
# There is no progression bar using parallel
jags.parallel(data = d$data,
inits = d$inits,
parameters.to.save = d$params,
model.file = model.jags,
n.chains = 3,
n.thin = 10,
n.iter = 9000,
n.burnin = 3000,
working.directory = NULL,
n.cluster = 3) ## the number of cluster it’s taking

如您所见,这是默认值,链数(这里是 nc,在我的情况下为 3)等于使用的核心数。
  • 这如何影响 MCMC 的采样方式?
  • 并行运行 MCMC 链时,是否存在与 R 一起使用的最佳内核数?
  • 我看到如果我有 3 个链,我就不能低于 3 个内核。它给了我这个 error :Error in res[[ch]] : subscript out of bounds .为什么?
  • 如果我增加内核数量,则需要更长的时间(作为比较,12 个内核比 3 个内核多花 7.2 倍的时间)!不应该反过来吗?
  • 如何在不删除迭代、老化或添加细化(更多内核?更改 RAM?)的情况下使脚本更快?

  • 我的计算机有 16 个内核,因此我可以灵活选择内核数量(还有 64 GB 内存和 3 GHz Intel Xeon E5 处理器)。

    最佳答案

    不可能将 3 个链拆分到多个核心上。当并行运行 JAGS 时,实际上会发生以下情况:

  • 对每条链进行指定的烧入。在您的示例中,三个链将模型运行 3000 步,而不存储该信息。
  • 一旦每个链都有适当的时间燃烧,您想要从后验分布中获得的样本数量就会在每个链上平均分配。在您的示例中,每个链将运行采样器 600 步 ( (n.iter -n.thin)/n.chains )。

  • 因此,让我们继续回答您的问题(上面解释了#1)。
  • 对此的答案将取决于您当时在该计算机上执行的其他操作。您永远不想在计算机的所有 K 个内核上运行它,因为它会占用您的大部分计算能力。对于较大的模型,我通常在 K-1 内核上运行 K-1 链。对于简单的模型,这并不重要。
  • 您可以在更少的内核上运行多个链,但是您会减慢速度,因为内核上的每个链都必须按顺序计算。相反,将更少的链分配到多个核心上是行不通的。如果您有 x链条,你不应该有 > x cores .
  • 这通过问题 2 和 3 来回答。更多的链应该增加计算,但没有更多链的更多内核不会。
  • 如果不查看您的模型,这真的无法回答。
  • 关于r - 是否可以在多个内核上使用 JAGS 运行多个链(分割链),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37418378/

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