DGL(0.8.x) 技术点分析

举报
Splendid2025 发表于 2025/02/10 11:25:19 2025/02/10
【摘要】 DGL为Amazon发布的图神经网络开源库(github)。支持tensorflow, pytorch, mxnet。如何初始化一个图:节点ID从0开始标号G = dgl.graph((us, vs))一系列点和边,us->vsadd_nodes(n)添加n个点add_edge(u, v)添加边u->vadd_edges(u[s], v[s])添加边u[s]->v[s]节点和边都可以具有特征...

DGL为Amazon发布的图神经网络开源库(github)。支持tensorflow, pytorch, mxnet。

如何初始化一个图:

  • 节点ID从0开始标号
  • G = dgl.graph((us, vs))一系列点和边,us->vs
  • add_nodes(n)添加n个点
  • add_edge(u, v)添加边u->v
  • add_edges(u[s], v[s])添加边u[s]->v[s]
  • 节点和边都可以具有特征数据,存储为键值对,键是可选的,值必须是张量
    • ndata['x'] = th.zeros((3, 5))对所有节点都设置特征数据,名称为x
    • ndata['y'] = th.randn(g.num_nodes(), 5)不同名称的特征数据可以有不同形状
    • nodes[[0, 2]].data['x'] = th.ones((2, 5))对节点0,2设置特征数据

消息传递范式

  • 边上计算:计算边信息(涉及消息函数)
    • 消息函数:接受edges,成员包括src, dst, data,得到发出的信息
  • 点上计算:汇总边信息,更新点信息(涉及聚合函数,更新函数
    • 聚合函数: 节点有属性mailbox访问节点收到的信息,并进行聚合操作(min, max, sum等)
    • 更新函数: 用聚合函数的结果对原特征进行更新
  • 高级API
    • update_all: 接受一个消息函数,一个聚合函数,一个更新函数
  • 高效的消息传递代码
    • 实现细节避免消耗大量内存: 大矩阵乘法分拆
  • 在图的一部分上进行消息传递:用想囊括的节点创建一个子图

图片1.png

顶层提供对不同业务抽象

Backend层: 实现多后端适配

Platform层:适配不同架构,支持高效计算

图片2.png

c++层提供性能敏感功能

python层基于c++能力拓展更多功能,同时算子多态适配不同后端

图网络算子基于python层提供的运算实现

图片3.png

图片4.png

图片5.png

【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。