我厌倦了不得不用 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 位。