2013-10-05 38 views
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位。

回答

1

你可以試試GitHub上的master branch?有一個數據庫後端修復那裏可能是這個原因。我們幾乎已經發布了2.3版本,但在此之前,您可以從GitHub構建。

+0

易於從源代碼構建,並且多個'sample'調用現在按預期完成。 'len(S.trace('early_mean',chain = None)[:])##> 20000' ---太棒了。 –