是否可以在多个核心(细分链)上使用JAGS运行多个链

M. *_*eil 3 parallel-processing r bayesian mcmc jags

我想知道是否可以在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
Run Code Online (Sandbox Code Playgroud)

正如您所看到的,这是默认值,链的数量(nc在我的情况下为3)等于使用的核心数.

  1. 这对MCMC的采样方式有何影响?
  2. 在并行运行MCMC链时,是否有与R一起使用的最佳核心数?
  3. 我看到如果我有3个链条,我就不能进入3核心.它给了我这个错误: Error in res[[ch]] : subscript out of bounds.为什么?
  4. 如果我增加内核数量,则需要更长的时间(作为比较,12个内核需要比3个内核多7.2个时间)!不应该是相反的吗?
  5. 如何在不删除迭代,老化或添加细化(更多核心?,更改RAM?)的情况下更快地创建脚本?

我的计算机有16个内核,所以我在内核数量上有灵活性(还有64 GB的RAM和3 GHz的Intel Xeon E5处理器).

mfi*_*ino 7

将3条链分成多个核心是不可能的.在并行运行JAGS时,实际上会发生以下情况:

  1. 为每个链执行指定的刻录.在您的示例中,三个链将运行模型3000步而不存储该信息.

  2. 一旦每条链都有适当的燃烧时间,你想从后验分布中得到的样本数量在每条链上均分.在您的示例中,每个链将运行采样器600步((n.iter -n.thin)/n.chains).

那么,让我们继续你的问题(上面解释了#1).

  1. 答案取决于你当时在那台电脑上做了什么.您永远不想在计算机的所有K核上运行它,因为它将占用您的大部分计算能力.我通常在K-1核心上运行K-1链以获得更大的型号.对于简单的模型,它并不重要.

  2. 您可以在较少的核心上运行多个链,但随后您的速度会降低,因为核心上的每个链都必须按顺序计算.相反,将更少的链分配到多个核心上是行不通的.如果你有x链子,你不应该> x cores.

  3. 这可以通过问题2和3来回答.更多的链应该增加计算,但是没有更多链的更多核不会.

  4. 如果不看你的模型,这真的无法回答.