1

我厌倦了不得不用 PyMC 重新运行长 MCMC 链,因此使用 PyMC 附带的链保存功能听起来是个好主意。我正在使用pickle数据库后端来体验基于磁盘保存的 MCMC 工作流,我发现如果我尝试连续两次从带有 pickle 数据库的 PyMC MCMC 模型中采样,第二次sample调用非常减缓。

from pymc import MCMC
from pymc.examples import disaster_model

dbname = 'simple.pickle'

S = MCMC(disaster_model, db='pickle', dbname=dbname)

S.sample(1e4) # <-- Runs very fast
if True:
    S.sample(1e4) # <-- *very slow*

S.db.close()

第一个sample调用几乎立即完成,但第二个调用非常缓慢,需要几秒钟才能完成。与此同时,我在第二次调用时查看了磁盘上的 simple.pickle 文件,sample并注意到它的大小在 20 到 60 兆字节之间快速波动。

我希望第二次(以及所有后续)sample调用在与第一次大致相同的时间内完成,以便我可以手动监控链的混合属性(是的,我知道我可以使用各种更高级的诊断,但除此之外问题)。

我究竟做错了什么?

PyMC 版本 2.2、Python 2.7.3、Ubuntu 12.10 64 位。

4

1 回答 1

1

您可以尝试从GitHub 上的主分支构建吗?那里有一个数据库后端修复程序,这可能是造成这种情况的原因。我们几乎发布了 2.3 版,但在那之前您可以从 GitHub 构建。

于 2013-10-06T15:28:19.893 回答