
DGL & GNN
文章平均质量分 71
先云
这个作者很懒,什么都没留下…
展开
-
zero-copy加速GNN训练笔记
前言: 好久没更新博客了,添加一篇旧文。该文内容实际有点过时了,DGL最近把data pipeline重构了一下(https://github.com/dmlc/dgl/pull/3665),应该比文中内容更丰富一些了。导言: 最近工作需要调研一下DGL社区的一些动态,发现了这篇针对GNN训练的论文: Large Graph Convolutional Network Training with GPU-Oriented Data Communication Architecture,这里对此做一原创 2022-04-15 19:19:55 · 1302 阅读 · 6 评论 -
DGL中minibatch训练子图Prefetch到GPU中加速
导读: 这两天在研究怎么加速DGL上GNN的训练,使用line_profiler工具发现,除了forward和backward之外,最耗时的是CPU与GPU之间的数据传输(即mini batch训练时将当前batch的子图及对应的feature和label传输到GPU中)。因此尝试使用prefetch,希望在当前batch进行GPU计算的同时,将数据从CPU传到GPU。本文使用的例子是:https://github.com/dmlc/dgl/tree/master/examples/pytorch/ogb.原创 2021-04-20 19:06:43 · 1609 阅读 · 3 评论 -
DGL-kernel的变更(3)
导读: DGL kernel中针对Graph的计算几个版本有了不小的变动。 v0.3-0.4使用的是minigun, v0.3和v0.4源码中主要相关部分则是在对应分支dgl/src/kernel目录下。 v0.5中对kernel代码进行了重写,并不再继续使用minigun,可以参见pull 1644。此时DGL将GNN主要抽象为了SPMM和SDDMM两个接口,这里也可以参考DGL v0.5的论文。 后来AWS DGL团队又提出了一个新的基于tvm的kernel FeatGraph并发表在了S.原创 2021-03-30 15:35:16 · 398 阅读 · 0 评论 -
DGL-kernel的变更(2)
导读: DGL kernel中针对Graph的计算几个版本有了不小的变动。 v0.3-0.4使用的是minigun, v0.3和v0.4源码中主要相关部分则是在对应分支dgl/src/kernel目录下。 v0.5中对kernel代码进行了重写,并不再继续使用minigun,可以参见pull 1644。此时DGL将GNN主要抽象为了SPMM和SDDMM两个接口,这里也可以参考DGL v0.5的论文。 后来AWS DGL团队又提出了一个新的基于tvm的kernel FeatGraph并发表在了S.原创 2021-03-30 15:34:30 · 524 阅读 · 0 评论 -
DGL kernel的变更(1)
导读: DGL kernel中针对Graph的计算几个版本有了不小的变动。 v0.3-0.4使用的是minigun, v0.3和v0.4源码中主要相关部分则是在对应分支dgl/src/kernel目录下。 v0.5中对kernel代码进行了重写,并不再继续使用minigun,可以参见pull 1644。此时DGL将GNN主要抽象为了SPMM和SDDMM两个接口,这里也可以参考DGL v0.5的论文。 后来AWS DGL团队又提出了一个新的基于tvm的kernel FeatGraph并发表在了S.原创 2021-03-30 15:31:40 · 437 阅读 · 0 评论 -
edge_softmax时间和显存对比
接上一篇spmm之后针对edge_softmax的实验:三者的结果上实验注意:当两个结点之间有多条边时,dgl和torch.sparse中的softmax上是会有点区别的,torch构建的稀疏矩阵会直接累加两个结点之间的边上的值,dgl则会分别对待,可以参考:https://github.com/dmlc/dgl/issues/2311。import torchimport numpy as npimport torch_sparseimport dglimport torch_geometr原创 2021-03-30 15:27:59 · 839 阅读 · 0 评论 -
torch、torch_sparse、dgl三者spmm显存占用对比
简单比较一下torch原生,torch_sparse(pyG依赖模块)以及DGL中spmm的显存占用和时间torch原生,显存占用主要是对结点敏感(bakward的时候用的稠密张量)。# -*- coding: utf-8 -*-"""@Author: @Time: 2020/12/1@Description: """import torchimport numpy as npimport torch_sparseimport dglimport timen = 60000nn原创 2021-03-30 15:21:01 · 3736 阅读 · 1 评论 -
DGL0.5中的g-SpMM和g-SDDMM
DGL0.5中的g-SpMM和g-SDDMM导读:之前对DGL0.5论文中的g-SpMM和g-SDDMM做了个简单的笔记,这次去DGL源码中看一下其相关的使用。使用pytorch中的GATConv作为入口。 论文中提到说:users can invoke the g-SpMM and g-SDDMM kernels via theg.update_all($\phi$,$\rho$) and g.apply_edges($\phi$) calls on a DGLGraph. 正好GA原创 2021-03-30 15:17:09 · 1095 阅读 · 1 评论 -
DGL0.5中的g-SpMM和g-SDDMM
DGL0.5中的g-SpMM和g-SDDMM导读:DGL0.5版本发布时,其团队也对应发表了一篇论文(https://arxiv.org/abs/1909.01315),较为详细了介绍了DGL的设计、优化以及性能。其中的重要部分就是DGL认为GNN的计算可以归纳为两种,g-SpMM(generalized sparse-dense matrix multiplication)和g-SDDMM(generalized sampled dense-dense matrix mutiplication)。这里原创 2021-03-30 15:05:47 · 3400 阅读 · 0 评论