首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >是否有可能在多个核(细分链)上运行带有JAGS的多个链

是否有可能在多个核(细分链)上运行带有JAGS的多个链
EN

Stack Overflow用户
提问于 2016-05-24 15:50:42
回答 1查看 2.4K关注 0票数 7

例如,我想知道是否有可能将JAGS中的3条链细分到5或6个核上。这是我的代码:

代码语言:javascript
复制
  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

正如您所看到的,这是默认的,链的数量(在我的例子中是3)等于使用的核心数量。

  1. 这如何影响MCMC取样的方式?
  2. 在并行运行MCMC链时,是否存在与R一起使用的最佳核数?
  3. 我发现,如果我有三条铁链,我就不能在三根铁芯下面。它给了我一个errorError in res[[ch]] : subscript out of bounds。为什么?
  4. 如果我增加核的数量,它需要更长的时间(作为一个比较,12核比3个核多7.2个时间)!不应该是相反的吗?
  5. 如何在不删除迭代、刻录或添加细化(更多内核?更改RAM?)的情况下使脚本更快?

我的电脑有16个核,所以我在核数量上有灵活性(还有64 GB内存和3千兆赫英特尔Xeon E5处理器)。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-05-24 19:55:40

不可能将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. 如果不看你的模型,这真的是无法回答的。
票数 9
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37418378

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档