![大规模图神经网络应用和最新范式的探索](http://img.jiangsulong.com/230706/1G3163X1-0.jpg)
文章插图
一、解决大图内存/计算问题的三个范式
![大规模图神经网络应用和最新范式的探索](http://img.jiangsulong.com/230706/1G3161Z2-1.jpg)
文章插图
在两年前做的tutorial里面,我们有介绍过关于大规模神经网络,并且对20年以前的大规模图神经网络的进展有过一些介绍 。在那个时候,考虑的是这样三个范式:layer wise,node wise layer wise和graph wise sampling 。
![大规模图神经网络应用和最新范式的探索](http://img.jiangsulong.com/230706/1G3164062-2.jpg)
文章插图
现在来看,归根结底是要去减少图数据在内存和计算上的需求 。最简单的方法是对图进行采样 。回顾一下当年的一些总结,从14年的图神经网络开始走进人们的视野,到17年GCN的爆火,其实一直以来,对于大规模图神经网络的研究都是一个非常连续的过程 。大家都是在朝着如何构造更好的采样和如何减少采样造成的偏差两个方向思考问题,也涌现出了非常多的优秀工作 。
![大规模图神经网络应用和最新范式的探索](http://img.jiangsulong.com/230706/1G31AZ5-3.jpg)
文章插图
我们真的解决了大规模GNN的问题吗?我的答案是解决了,但没有真正解决 。首先,确实解决了在实际工业中的应用,尤其是基于子图采样的方法,永远都可以采样出一个子图,Apply一个很复杂的模型,最后得到一个合适的预测 。这个在腾讯的一些业务场景,比如推荐,已经有了很好的实践 。
但是这个问题并没有真正的解决,因为这个方法其实是回避了核心问题,不能真正在大图做GNN更新 。在真正做实践的时候会发现,由于各个地方的系统可能不一样,数据存储格式不一样,图采样的效率本身会依赖于系统实现 。而图采样的时间消耗,很可能比训练的消耗更大 。另外,这种采样会带来精度下降和信息缺失的风险 。尤其是在制药和生物的一些场景里面,是不能随便的对比进行采样的 。
![大规模图神经网络应用和最新范式的探索](http://img.jiangsulong.com/230706/1G3162F1-4.jpg)
文章插图
那么近两年大规模图神经网络的进展到底怎样呢?可以总结为一句话,“我不想去做采样,但是要把大规模的GNN给做了” 。
![大规模图神经网络应用和最新范式的探索](http://img.jiangsulong.com/230706/1G31CF1-5.jpg)
文章插图
二、针对大规模GNN的优化
![大规模图神经网络应用和最新范式的探索](http://img.jiangsulong.com/230706/1G31C060-6.jpg)
文章插图
这里仿照之前WWW的GNN Tutorial做了这样的一个图,这个总结可能不是非常的全面,是我个人对这块领域的总结 。接下来就挑一些重要的点来进行介绍,这两年大家到底做了什么事情?简单来说,首先我们用了图系统里面的一些分布式图系统计算的一些概念 。把传统的GAS范式进行了扩展,成了SAGA 。基于这个范式,就会有很多需要系统优化的点,那么具体优化的点可能就存在于:第一,图划分和图划分的优化;第二,对于节点特征传输的优化;第三,对于流水线和通讯的优化 。接下来就每个单独的进行简要的介绍 。
1、对传统图计算模型GAS扩展
![大规模图神经网络应用和最新范式的探索](http://img.jiangsulong.com/230706/1G3164F8-7.jpg)
文章插图
首先,什么是SAGA,在说什么是SAGA的时候,我们就会讨论什么是GAS 。GSA是当年图计算里面一个分布式图计算里面一个非常经典的范式,它把整个图计算划分成了三个步骤:Gather,Apply和Scatter。
- Gather是什么意思呢?Gather就是说去通过边来收集邻居的信息 。
- Apply是什么意思呢?Apply就相当于是把收集到的信息去计算出更新的这个节点信息 。
- Scatter的意思就是把更新后的节点信息更新到这个边上面 。
![大规模图神经网络应用和最新范式的探索](http://img.jiangsulong.com/230706/1G31620B-8.jpg)
文章插图
很多图算法都可以通过GAS的方式进行Formalize,比如PageRank 。也就是说面对基于消息传播的图神经网络的时候,就可以基于GAS方式进行扩展,叫做SAGA 。
其中可以分为四个步骤:Scatter、Apply Edge、Gather和Apply Vertex 。
Scatter 和原来的GAS的Scatter 是一样的,就是把节点的数据先输送到边上面 。这一个步骤是GPU Intensive 。
然后再把这个节点的这个特征输到边上去,以后可能会对输到这个边上面的消息进行一些处理,这个处理有可能,比如说是GAT里面的计算权重,或者其他一些复杂操作,会Apply一个神经网络去处理,这个肯定是GPU intensive 。
第三个, Gather传过来消息了,并且可能是做了处理的消息,那就要通过邻居的关系,把消息进行汇聚,得到新的消息,那么这肯定就是CPU intensive 。
推荐阅读
- 哔哩哔哩数据服务中台建设实践
- 你了解ai绘画二次元男生图片怎么画的吗?
- 如何禁用Discord在启动时打开
- 黄河水流入哪个海!黄河最后流入哪个海
- 槿字取名寓意 瑾字取名寓意及含义
- 活虾怎么处理干净 活虾怎么处理虾线
- 翡翠玉雕——圆牌设计欣赏
- 打脸,她居然也出轨了!
- 女歌手毕夏,被骂上了热搜!
- 64岁的杨丽萍,被扫黄了