并行使用numpy linalg进行内存泄漏

时间:2018-12-09 06:32:53

标签: python-2.7 numpy parallel-processing least-squares joblib

我有下面的代码在矩阵U的每一行上运行最小二乘。

import numpy as np
from numpy.linalg import norm,lstsq
from sklearn.externals.joblib import Parallel,delayed
k = 25
max_iter = 50
lmbda = 1e-3
R = np.random.randint(0,2,(1500,2500))
W = np.sign(R,dtype=np.int8)
rows, columns = R.shape
random = np.random.RandomState(seed=4)
U = np.zeros((rows,k),dtype=np.float32)
V = random.rand(columns,k).astype(np.float32)
D = random.rand(columns,k).astype(np.float32)
S = random.rand(columns,columns).astype(np.float32)
S = (S + S.T)/2
Ir = np.eye(k,dtype=np.int8)
for i in xrange(1,max_iter+1):
    U = Parallel(n_jobs=5)(delayed(lstsq)(np.dot(V.T,np.dot(np.diag(Wu),V))+lmbda*Ir, np.dot(R[u],np.dot(np.diag(Wu),V)),rcond=None) for u,Wu in enumerate(W))
    U = np.vstack([u[0] for u in U])
    V = Parallel(n_jobs=5)(delayed(lstsq)(np.dot(U.T,np.dot(np.diag(Wv),U))+np.dot(D.T,D), np.dot(S[v],D)+np.dot(R.T[v],np.dot(np.diag(Wv),U)),rcond=None) for v,Wv in enumerate(W.T))
    V = np.vstack([v[0] for v in V])

但是无论我设置的n_jobs值为多少,我都会收到以下错误消息

  

local / lib / python2.7 / site-packages / sklearn / externals / joblib / externals / loky / process_executor.py:700:   UserWarning:工人停下来,同时给他们一些工作   执行者。这可能是由于工人超时时间太短或   内存泄漏。 “超时或内存泄漏。”,UserWarning

似乎确切的错误是由vstack函数试图在并行操作完成之前运行引起的。但是对于较大的n_jobs(= 15),即使lstsq函数也发出内存泄漏警告。我已经坚持了一个星期。

0 个答案:

没有答案