data文件夹
图划分算法,没有采用Louvain算法(Blondel et al., 2008),在Zhang et al. (2021),使用到。而是使用的METIS graph partitioning algorithm(Karypis,1997)
disjoint.py
parser.py
parser.py解析参数
multiprocs.py
multiprocs.py分布式训练的进程管理,
整体流程图:
ParentProcess
├── __init__()
│ ├── 解析 GPU 设置
│ ├── 创建共享字典 sd
│ ├── 创建工作进程 (create_workers)
│ └── 初始化 Server 实例
└── start()
├── 设置初始状态
├── 创建路径 (检查点和日志)
├── 多轮训练循环
│ ├── 调用 on_round_begin()
│ ├── 选择客户端并分配给工作进程
│ ├── 等待客户端更新 (wait)
│ └── 调用 on_round_complete()
├── 更新 sd 状态以通知工作进程结束
└── 进程清理
layers.py
定义单层的MaskedGCNConv等
net.py
构建MaskedGCN
server.py
库
metispy
metispy 是一个用于图划分(graph partitioning)的Python库,它是METIS库的Python接口。METIS 是一个用于将图划分成若干个子图的工具,广泛应用于并行计算、网络分析等领域。
安装:pip install metispy
安装建议参考:https://github.com/james77777778/metis_python?tab=readme-ov-file,适用unix.
应用示例:
import metispy as metis
import networkx as nx
# 创建一个示例图
G = nx.karate_club_graph()
# 获取节点和边列表
nodes = list(G.nodes)
edges = list(G.edges)
# 将 NetworkX 图转换为 METIS 所需的格式
node_mapping = {node: idx for idx, node in enumerate(nodes)}
edges_mapped = [(node_mapping[u], node_mapping[v]) for u, v in edges]
# 创建 METIS 图
metis_graph = metis.MetisGraph(len(nodes), edges_mapped)
# 设置划分成的子图数量
num_parts = 4
# 执行图划分
objval, parts = metis.part_graph(metis_graph, nparts=num_parts)
# 打印结果
print(f'Objective value: {objval}')
print(f'Partition labels: {parts}')
# 将划分结果映射回原始节点
partition_mapping = {node: parts[node_mapping[node]] for node in nodes}
print(f'Partition mapping: {partition_mapping}')

1648

被折叠的 条评论
为什么被折叠?



