前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【DGL系列】简单理解dgl.distributed.load_partition的返回参数

【DGL系列】简单理解dgl.distributed.load_partition的返回参数

原创
作者头像
小锋学长生活大爆炸
发布2024-08-17 14:19:04
1030
发布2024-08-17 14:19:04
举报
文章被收录于专栏:图神经网络

转载请注明出处:小锋学长生活大爆炸[xfxuezhagn.cn] 如果本文帮助到了你,欢迎[点赞、收藏、关注]哦~

目录

函数简介

返参说明

子图 g

节点特征 nodes_feats

边特征 efeats

分区信息 gpb

图名称 graph_name

节点类型 node_type

边类型 etype

进阶探索

g.ndata['part_id']

g.ndata['inner_node']

gpb.partid2nids(i)

dgl.NID

g.ndata['orig_id']


dgl.distributed.load_partition — DGL 2.3 documentation

函数简介

函数作用:

从数据路径加载分区数据。

  • 分区数据包括一个分区的图结构、一个node tensors字典、一个edge tensors字典和一些metadata。
  • 分区可能包含 HALO 节点,即从其他分区复制的节点。但是,node tensors字典只包含属于本地分区的节点数据。
  • 同样,edge tensors只包含属于本地分区的边数据。
  • metadata包括全局图(而非本地分区)的信息,其中包括节点数、边数以及全局图的节点分配。
代码语言:javascript
复制
g, nodes_feats, efeats, gpb, graph_name, node_type, etype = dgl.distributed.load_partition(part_config, rank)

入参参数:

  • part_config (str) – 分区配置文件的路径。
  • part_id (int) – 分区ID.
  • load_feats (bool, optional) – 是否加载节点/边的特征。如果为 False,返回的节点/边缘特征字典将为空。默认值为 True。
  • use_graphbolt (bool, optional) – 是否加载 GraphBolt 分区。默认值False。

返回参数:

  • DGLGraph – 图分区结构
  • Dict[str, Tensor] – 节点特征
  • Dict[(str, str, str), Tensor] – 边特征
  • GraphPartitionBook – 图分区信息
  • str – 图名称
  • List[str] – 节点类型
  • List[(str, str, str)] – 边类型

返参说明

子图 g

DGLGraph格式的子图,这个没啥好说的,非常常用。

节点特征 nodes_feats

包含训练集、验证集、测试集的mask,以及特征和标签。

当然,也可以自己往里面添加特征,比如:

代码语言:javascript
复制
nodes_feats['part_id'] = g.ndata.get['part_id']
nodes_feats['inner_node'] = g.ndata['inner_node'].bool()

边特征 efeats

如果没有边特征,就是空的

分区信息 gpb

dgl.distributed — DGL 2.3 documentation

这个就很重要了。它维护着当前分区的信息,可以定位节点和边所需的所有信息,包括:

  • 分区数量
  • 节点或边所属的分区ID
  • 分区具有的节点ID和边ID
  • 分区中节点和边的本地 ID。

实际的信息更多。需要注意的是:因为节点/边已被重新标记,因此同一分区中的ID位于连续的ID范围内。

我们会经常用到它,比如根据分区ID获取节点ID范围等等,比如:

代码语言:javascript
复制
node_ids = gpb.partid2nids(i)

图名称 graph_name

图的名称,是在dgl.distributed.partition_graph时候给的。

节点类型 node_type

节点类型是用于处理异构图heterogeneous graphs的概念。异构图是指包含不同类型节点和边的图。每种类型的节点和边可能具有不同的属性和特征。

边类型 etype

与节点类型一样的含义。

进阶探索

g.ndata['part_id']

包含了HALO节点。数组大小是当前子图的节点数,其中的值代表节点所对应的全局分区ID

g.ndata['inner_node']

包含了HALO节点。数组大小是当前子图的节点数,其中的0或1代表该节点是当前分区的节点还是HALO节点。可以使用torch.nonzero(g.ndata['inner_node'])来获取值为1所对应的索引。

gpb.partid2nids(i)

根据分区ID获取该分区内所有的全局节点ID范围

dgl.NID

dgl.NID 是一个保留的键,用于标识节点的全局ID

g.ndata['orig_id']

用于存储节点的原始 ID,因为在图进行分区时候会进行重新映射节点 ID。原始 ID可以用来追溯节点在原始图中的位置。注意,这个属性需要在dgl.distributed.partition_graph时候指定return_mapping=True才能生成。

  • 原始 ID(orig_id:这是节点在原始图中的 ID,未经过分区或重新映射。这些 ID 保持了节点在原始图中的位置。
  • 重新映射 ID(dgl.NID:在分区或其他处理过程中,节点 ID 可能会被重新映射以优化分区内的访问和计算效率。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 函数简介
  • 返参说明
    • 子图 g
      • 节点特征 nodes_feats
        • 边特征 efeats
          • 分区信息 gpb
            • 图名称 graph_name
              • 节点类型 node_type
                • 边类型 etype
                • 进阶探索
                  • g.ndata['part_id']
                    • g.ndata['inner_node']
                      • gpb.partid2nids(i)
                        • dgl.NID
                          • g.ndata['orig_id']
                          领券
                          问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档