When partitioning the train subgraph of FraudAmazonDataset (g_train below), dgl.transform.metis_partition terminates abnormally and prompts “*** Error in `python’: free(): corrupted unsorted chunks: 0x000055d7ef0ebf20 ***”.
Other datasets are successfully partitioned with metis_paritition(). Then I use metis to partition the same graph (g_train), it works well.
It seems the program aborted in metis_partition_assignment (line 270: converting the graph to biparted graph)
The testing code is listed as follow:
import dgl
import torch
from dgl.data.fraud import FraudDataset
from dgl.transform import metis_partition
import metis
import networkx as nx
def dgl_metis():
# load dataset: FraudAmazon
data = FraudDataset('amazon', raw_dir='./data')
g_raw = data[0]
train_nid = torch.nonzero(g_raw.ndata['train_mask'], as_tuple=True)[0]
# convert to homogeneous graph
g_homo = dgl.to_homogeneous(g_raw)
# build train graph
g_train = g_homo.subgraph(train_nid)
parts = metis_partition(g_train, 10) # "free(): corrupted unsorted chunks"
print(parts)
def metis_lib_test():
# load dataset: FraudAmazon
data = FraudDataset('amazon', raw_dir='./data')
g_raw = data[0]
train_nid = torch.nonzero(g_raw.ndata['train_mask'], as_tuple=True)[0]
# convert to homogeneous graph
g_homo = dgl.to_homogeneous(g_raw)
# build train graph
g_train = g_homo.subgraph(train_nid)
adj_mat = g_train.adj(scipy_fmt='csr')
G = nx.from_scipy_sparse_matrix(adj_mat)
edge_cuts, parts = metis.part_graph(G, 10)
print(edge_cuts) # 1178265
dgl_metis()
metis_lib_test()