PyMC:在初始采样运行后,带有pickle数据库的MCMC采样速度非常慢

时间:2013-10-05 21:40:25

标签: python mcmc pymc

我厌倦了用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呼叫几乎立即完成,但第二个呼叫非常停止,需要几秒钟才能完成。同时我在第二次调用sample期间查看磁盘上的simple.pickle文件,并注意到它的大小在20到60兆字节之间快速波动。

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

我做错了什么?

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

1 个答案:

答案 0 :(得分:1)

您可以尝试使用GitHub上的master branch进行构建吗?那里有一个数据库后端修复可能是导致这种情况的原因。我们几乎已经发布了2.3版,但在此之前你可以从GitHub构建。