【问题标题】:Getting memory error for graph clustering even for 128 GB of memory. Why?即使对于 128 GB 的内存,图形聚类也会出现内存错误。为什么?
【发布时间】:2020-08-28 23:31:02
【问题描述】:

我在具有 128 GB 内存的 Linux 服务器上使用 python 语言。我正在使用 马尔可夫算法 进行图形聚类。具体流程如下:

Graphtype = nx.Graph()
G = nx.from_pandas_edgelist(df, 'source','target', edge_attr='weight', create_using=Graphtype)

图表详情:

Name: 
Type: Graph
Number of nodes: 4533801
Number of edges: 10548751
Average degree:   4.6534

图是连通的吗?

nx.is_connected(G)
False

连通分量数

print(nx.number_connected_components(G))
7254

马尔可夫聚类

import markov_clustering as mc
import networkx as nx

matrix = nx.to_scipy_sparse_matrix(Gc) # build the matrix
result = mc.run_mcl(matrix)            # run MCL with default parameters
clusters = mc.get_clusters(result)     # get clusters

MemoryError

为什么我在尝试提取集群时仍然收到 内存错误 消息? 问题是什么?我该如何解决这个问题?

更新:

考虑给定的 cmets 报告结果。

【问题讨论】:

  • 您有 两个 图表,GGcGc 长什么样子?
  • 你知道你实际可以使用多少内存吗?有时它小于系统内存。试试numpy.ndarray(2**32),大约需要 16GB。
  • 您运行的是 32 位还是 64 位版本的 Python?请与python -c 'import struct; print(struct.calcsize("P") * 8)' 联系。无论服务器有多少,32 位版本都会将您的 RAM 限制在 4 GB 以下。
  • .copy() 可能是问题的一部分。即使您可以表示完整图,也可能无法在没有内存问题的情况下表示完整图的两个副本。该行表示正在复制表示图形的完整稀疏矩阵。这个矩阵有多大?它是否低于您可用内存的一半?
  • 再往上看,有一个对inflate的调用。其来源最终导致了 scikit-learn 的 sklearn.preprocessing.normalize 方法。该文档说稀疏矩阵必须采用 CSR 格式“以避免不必要的复制”。您的矩阵格式是否正确?

标签: python pandas graph cluster-analysis networkx


【解决方案1】:

我从您的代码中假设您使用的是 32 位 Python,这意味着无论硬件如何,您都无法使用超过 4GB 的 RAM。

升级到 64 位 Python 将允许您使用多达 16EB 的 RAM,这将允许您使用服务器上的额外空间。

您可以通过不存储不必要的变量并让python清除丢弃的信息来节省一些内存。从我在这些代码行中可以看到:

matrix = nx.to_scipy_sparse_matrix(Gc) # build the matrix
result = mc.run_mcl(matrix)            # run MCL with default parameters
clusters = mc.get_clusters(result)     # get clusters

“矩阵”和“结果”变量仅用于到达“集群”,因此理论上不需要保存。这段代码应该允许 python 清理一些内存:

clusters = mc.get_clusters(mc.run_mcl(nx.to_scipy_sparse_matric(Gc)))

显然,您正在牺牲代码的易读性和优雅性,这不太可能腾出足够的空间来解决您的问题,但值得您注意以防万一。

【讨论】:

    猜你喜欢
    • 2013-10-05
    • 1970-01-01
    • 1970-01-01
    • 2018-06-02
    • 1970-01-01
    • 1970-01-01
    • 2019-11-06
    • 1970-01-01
    • 2018-02-10
    相关资源
    最近更新 更多