【发布时间】:2018-05-11 01:20:48
【问题描述】:
我一直在尝试使用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 个 cpu、700GB 或 RAM,并且软件在内存使用量的 1.3% (~10GB) 时达到峰值,根据 ps 监控,在某个时刻执行和稍后粉碎。有人告诉我,RAM 的使用没有限制……所以我真的不知道会发生什么……
也许这里有人可以帮助我找到 scipy 的替代方案或解决它。
内存错误是否可能是因为只使用了一个节点?在这种情况下,如何在节点之间分配工作?
提前致谢。
【问题讨论】:
-
您使用集群这一事实并不意味着 SciPy 知道如何跨集群分配工作。这东西可能在一个节点上运行。
-
我也认为它只使用了一个节点,因为在监控中,%cpu 使用率始终接近 99%(每多出一百是另一个正在使用的节点),但我认为这不是极限问题。在这种情况下,我如何在节点之间分配工作?
-
分发这个?这是非常复杂的。在稀疏的情况下更是如此!我知道的唯一一个库,为这样的东西构建:libelemental,它也有 python 包装器。
-
@sascha 我应该向 scipy 开发人员报告这个吗?还是这只是我的场景中预期会发生的事情?
-
@AdrianGarciaMoreno 不。这不是 scipy 的范围(我认为这甚至是一个明确命名的示例,用于不实现的东西)。他们不会执行此操作。这或多或少是一项可能只有研究软件或定制构建付费软件的任务。要么检查 libelemental,要么远离这个话题。稀疏矩阵代数很难做对。分布式稀疏矩阵代数更糟糕。
标签: python memory scipy sparse-matrix