dgl.metis_partition

dgl.metis_partition(g, k, extra_cached_hops=0, reshuffle=False, balance_ntypes=None, balance_edges=False, mode='k-way')[source]

这是使用Metis分区对图进行分区。

Metis 将顶点分配到分区。此 API 构建包含分配到分区的顶点及其入边的子图。子图可能包含 HALO 节点,这些节点不属于子图的分区,但在固定的跳数内连接到分区中的节点。

在执行Metis分区时,我们可以在分区上施加一些约束。 目前,它支持两种约束来平衡分区。默认情况下,Metis 总是尝试平衡每个分区中的节点数量。

  • balance_ntypes balances the number of nodes of different types in each partition.

  • balance_edges balances the number of edges in each partition.

为了平衡节点类型,用户需要传递一个包含N个元素的向量来指示每个节点的类型。N是输入图中节点的数量。

如果reshuffle开启,函数会在分区前重新洗牌输入图的节点ID和边ID。洗牌后,分区中的所有节点和边在输入图中都位于一个连续的ID范围内。分区后的子图具有节点数据‘orig_id’,它存储了原始输入图中的节点ID。

分区子图存储在DGLGraph中。DGLGraph具有part_id节点数据,该数据指示节点所属的分区。子图不包含输入图中的节点/边数据。

Parameters:
  • g (DGLGraph) – 要分区的图

  • k (int) – 分区数量。

  • extra_cached_hops (int) – HALO节点可以被访问的跳数。

  • reshuffle (bool) – 重新洗牌节点,使得同一分区中的节点位于相同的ID范围内。

  • balance_ntypes (tensor) – 每个节点的节点类型

  • balance_edges (bool) – 指示是否平衡边缘。

  • mode (str, "k-way""recursive") – 是否使用多级递归二分法或多级k路分区。

Returns:

键是分区ID,值是分区的DGLGraph。

Return type:

一个DGLGraphs的字典