没有足够的内存来执行分解expm scipy.sparse.linalg.splu

时间:2017-11-27 17:59:43

标签: python memory scipy sparse-matrix

我一直在尝试使用TieDIE。简而言之,该软件包含一种算法,当您传递一些查询节点和网络时,该算法可以找到重要的子网。使用较小的网络它运行得很好,但我感兴趣的网络非常大,它有 21988个节点和360474个边缘。 TieDIE使用 scipy 生成初始网络内核(尽管Matlab也是生成此内核的选项,我没有许可证)。在生成此内核期间,我收到以下错误:

Not enough memory to perform factorization. Traceback (most recent call last):   
File "Trials.py", 
line 44, in <module> diffuser = SciPYKernel(network_path)   
File "lib/kernel_scipy.py", 
line 83, in __init__ self.kernel = expm(time_T*L)   
File "/home/agmoreno/TieDIE-trials/TieDIE/local/lib/python2.7/site-packages/scipy/sparse/linalg/matfuncs.py",
line 602, in expm return _expm(A, use_exact_onenorm='auto')   
File "/home/agmoreno/TieDIE-trials/TieDIE/local/lib/python2.7/site-packages/scipy/sparse/linalg/matfuncs.py",
line 665, in _expm X = _solve_P_Q(U, V, structure=structure)   
File "/home/agmoreno/TieDIE-trials/TieDIE/local/lib/python2.7/site-packages/scipy/sparse/linalg/matfuncs.py",
line 699, in _solve_P_Q return spsolve(Q, P)   
File "/home/agmoreno/TieDIE-trials/TieDIE/local/lib/python2.7/site-packages/scipy/sparse/linalg/dsolve/linsolve.py",
line 198, in spsolve Afactsolve = factorized(A)   
File "/home/agmoreno/TieDIE-trials/TieDIE/local/lib/python2.7/site-packages/scipy/sparse/linalg/dsolve/linsolve.py",
line 440, in factorized return splu(A).solve   
File "/home/agmoreno/TieDIE-trials/TieDIE/local/lib/python2.7/site-packages/scipy/sparse/linalg/dsolve/linsolve.py", 
line 309, in splu ilu=False, options=_options) 
MemoryError

最令人感兴趣的是,我使用的是具有64 cpus,700GB或RAM的群集计算机,软件峰值占内存使用量的1.3%(~10GB),根据 ps 监控,在执行的某个时刻和以后破碎。我被告知RAM的使用没有限制......所以我真的不知道会发生什么,软件开发人员没有太多帮助......

也许有人可以帮我找到scipy或解决它的替代方案。

由于只使用了一个节点,是否可能出现内存错误?在这种情况下,我如何跨节点分发工作?

提前致谢。

1 个答案:

答案 0 :(得分:0)

没错,对于像你这样的大型网络,你需要在一个节点上拥有高内存。最简单的解决方案当然是一种解决方法:

(1)有没有什么方法可以减少输入网络的大小,同时仍然捕获相关的生物学?也许只是寻找离输入节点2步的所有节点?

(2)使用新的Cytoscape API为您做传播:http://journals.plos.org/ploscompbiol/article?id=10.1371/journal.pcbi.1005598https://github.com/idekerlab/heat-diffusion

(3)使用PageRank而不是计算热核(不理想,因为我们已经证明Diffusion往往在生物网络上更好地工作)。

希望这有帮助! -Evan Paull(TieDIE开发人员/主要作者)