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)等于使用的核心数.
Error in res[[ch]] : subscript out of bounds.为什么?我的计算机有16个内核,所以我在内核数量上有灵活性(还有64 GB的RAM和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来回答.更多的链应该增加计算,但是没有更多链的更多核不会.
如果不看你的模型,这真的无法回答.