1
我厭倦了使用PyMC重新運行長MCMC鏈,因此使用鏈節省功能PyMC帶有聽起來像一個好主意。我正在使用pickle
數據庫後端來感受基於磁盤保存的MCMC工作流程,並且我發現如果我嘗試從連續兩次使用pickle數據庫的PyMC MCMC模型中進行抽樣,則會調用第二個sample
是非常慢。PyMC:初始採樣運行後,採用pickle數據庫的MCMC採樣速度令人難以置信
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兆之間迅速波動。
我希望第二個(以及所有後續的)調用在大約與第一個相同的時間完成,這樣我就可以手動監控鏈條的混合屬性(是的,我知道有各種各樣的fancier診斷,我可以使用,但除此之外)。
我在做什麼錯?
PyMC 2.2版,Python 2.7.3,Ubuntu 12.10 64位。
易於從源代碼構建,並且多個'sample'調用現在按預期完成。 'len(S.trace('early_mean',chain = None)[:])##> 20000' ---太棒了。 –