2015-02-06 4 views
4

피클 백엔드를 사용하더라도 파이썬에서 MCMC 용으로 명백하게 간단한 코드는 거대한 메모리 사용량 (> 15GB)을 발생시킵니다. 이것은 pymc에서 관찰 된 변수의 배열을 사용할 때마다 발생합니다. 왜 이런 일이 벌어지고 있는지에 대한 아이디어가 있습니까?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() 
+0

비슷한 문제가 있습니다. Github에 게시했습니다 (지원을 요청하는 가장 좋은 장소 인 것처럼 보이지만) 행운이 없습니다. 이 문제를 해결할 수 있었습니까? – analystic

+0

기회가 없습니다. 죄송합니다 – ahmethungari

+0

그냥 발언, 귀하의 q를 함수에 당신은 매개 변수 _C라는 이름을 지정하지만 C –

답변

0
  1. , 피클은 큰 개체와 메모리에 매우 지방이 될 수 있으며, 일반적으로 팽창하고 내가 본으로 메모리를 해제하지 않고 성장한다.
  2. 은 메모리 증가가 발생하는 곳을 확인하기 위해 memory profiler을 사용하려고 시도 할 수 있습니다. 실행 중 메모리 증가 그래프가 표시되는 방식으로 함수를 장식 할 수 있습니다.