intro

GCN,传统的 GCN 加速通过将图形特征矩阵 ( X ) 与密集的小权重矩阵 ( W ) 相乘,然后通过稀疏-密集矩阵矩阵乘法 (SpMM)将结果输出与高度稀疏的不规则邻接矩阵 ( A ) 相乘。

image-20240917175931809.png

Achievement

algorithmic optimization and hardware-level enhancement

challenges

Proposed Research

sidenote

max-k non-leanrity 是不是一个常见的深度学习术语...?

GCN

image-20240917190453714.png

GNN Acceleration

Introducing Sparsity in GNN Training

MaxK-GNN Dataflow

we introduce the MaxK nonlinearity

我悟了,这里是通过魔改激活函数,达到稀疏权重的效果,很神奇.....
(另外一个sidenote是,先多看看overview DL的八股文,等到IRL看到某个领域的时候作为思维的脚手架很有帮助...

definition

h(x)=maxkj[1,r](XW+b)j

这看起来理论背景很复杂,实现比较(?)简洁,这很符合我的审美...

sidenote:piece-wise linear (PWL) function

3.1

image-20240917200729348.png

应该就是figa的意思?激活函数换了,所以linear层的参数也不一样?

3.2

MLP with MaxK Serves as a Universal Approximator. A MaxK network g(X) with r hidden units can approximate any continuous functionf(X) on a compact domain Cs with an arbitrarily small approximation error ϵ. In particular, as ϵ→0, it follows that r→∞.

Universal Approximator

image-20240917201034409.png

MaxK-GNN Training Dataflow

!MaxK-GNN 2024-09-17.excalidraw

GPU System Support for MaxK-GNN

这里进行到实际的cuda kernel的部分了

forward: 特征提取 kenerl设计

!MaxK-GNN 2024-09-17_0.excalidraw

backward

!MaxK-GNN 2024-09-17_1.excalidraw

内存访问合并指什么?有点搞不明白
dimk好像是topk参数,origin是原来的稀疏结果!

memory system

image-20240917215028797.png

image-20240917215037610.png

Kernel Profiling

image-20240917215110017.png

eval

#TODO
image-20240917215226664.png

按warp提取信息的设计

此计算采用基于行积的 SpGEMM 方案 ( srivastava2020matraptor, ) ,其中 Xl[i,:]=j=0JA[i,j]h(Xl1)[j,:] 。假设密集输出可避免 SpGEMM 设计中通常会遇到的高昂 ESC 开销 ( dalton2015optimizing, ) 。在逐行乘积运算中,左侧行中的每个元素都会与右侧行中对应的元素相乘,然后将结果累加到输出行。此过程使得稀疏化的输出累加能够在片上缓存中进行,与基于全局内存的累加相比,延迟显著降低。

我们使用了一种 warp-level 分区方案 。结合片上缓冲机制,该方法可以实现 warp-level 平衡和合并全局内存访问,从而显著提高计算效率

怎么操作?

如图 6 (b) 所示,参与计算的每条边 ei,j 构成一个工作负载单元。在该单元中, ei,j 与稀疏行 s⁢p⁢_⁢d⁢a⁢t⁢aj 相乘,然后在缓冲区 B⁢u⁢fw 中进行累加,该缓冲区的索引为 s⁢p⁢_⁢i⁢n⁢d⁢e⁢xj 。随后,将每个邻接矩阵行 Ar⁢o⁢wi 的工作负载分割为多个边组 ( E⁢G⁢s )。每个 E⁢G 预留一块共享的 ( d⁢i⁢mo⁢r⁢i⁢g⁢i⁢n×4 字节) 空间,作为稀疏累加的中间缓冲区。

首先将每个邻接矩阵行 Ar⁢o⁢wi 的工作负载分割成边缘组 (EG)。为了在计算和累积阶段优化 EG 的执行,我们将隐藏维度集成到 Warp 映射策略中。

以图里为例,32/3 = 10,但似乎图里只用了6个,从何理解呢?

在下一阶段(图 6 中的第 2 阶段),来自每个共享内存缓冲区 B⁢u⁢fw 的数据将以原子方式累积到全局内存中其对应的 Xl 输出中。由于共享内存缓冲区和输出嵌入 ( d⁢i⁢mo⁢r⁢i⁢g⁢i⁢n ) 的维度相同,因此保留了自然 Warp 的线程组织方式,每个 Warp 循环处理单行数据,从而确保了高效且合并的计算结构。