使用pymc在Python中的内存溢出

时间:2015-02-06 22:30:15

标签: python pymc mcmc

在Python中使用明显简单的MCMC代码会导致大量内存使用(> 15GB),即使我使用pickle后端。每当我在pymc中使用观察变量数组时就会发生这种情况。对于为什么会发生这种情况的任何想法?

import pymc as pymc
import numpy as np

N = 17
numC = 5

A = np.zeros([N,N])
A[0:numC, :] = 1
A[:, 0:numC] = 1

C = pymc.Beta('C', alpha=0.5, beta=0.5, size=N)

@pymc.deterministic(dtype=float)
def q(_C=C):
    Q = np.zeros([N,N])
    for i in range(0,N-1):
        for j in range(i+1, N):
            Q[i, j] = Q[j, i] = C[i] + C[j] - C[i]*C[j]

    return Q

obs = []
for i in range(0,N-1):
    for j in range(i+1, N):
        o = pymc.Bernoulli('A%d%d'%(i,j), p=q[i,j], value=A[i,j], observed=True)
        obs.append(o)

model = pymc.Model([C, q] + obs)

mcmc = pymc.MCMC(model, db='pickle', dbname='abc.pickle')
mcmc.sample(10000, burn=5000, thin=5)
mcmc.db.close()

1 个答案:

答案 0 :(得分:0)

  1. 从个人经验来看,泡菜在大型物体的记忆中可能非常胖,而且它通常会膨胀和生长,而不会像我所见的那样释放记忆。
  2. 可以尝试使用memory profiler来检查内存增长的位置,它允许使用装饰函数来查看执行期间内存增长的漂亮绘图。