GNN 101
GNN 101
Why
Graph无处不在

Graph Intelligence helps

It’s the right time now!
Gartner预测,graph技术在数据和分析创新中的使用率从2021年的10%,到2025年会增长到80%。我们目前正在经历从early adoption到early mainstream的穿越大峡谷期间,既不太早也不太晚,时间刚刚好。

What
如何建模图
A graph is an ordered pair = (, ) comprising:
, a set of vertices (or nodes)
⊆{(,)|,∈}, a set of edges (or links), which are pairs of nodes
Example:
Different Types of Graph
Are edges directed?
Directed Graph vs. Undirected GraphAre there multiple types of nodes or multiple types of edges?
Homogeneous Graph vs Heterogeneous Graph
如何表示图
不同的表示方式会指向不同的计算模式。

如何计算图
如下图所示,图的计算步骤如下:
遍历图中的所有结点,或者采样图中的一些结点。每次选择其中一个结点,称为目标结点(target node);
一个-层的GNN至少需要聚合目标结点的L-跳领域的信息。因此,我们需要以围绕目标结点构造一个L-跳的ego network。图中是一个2-跳ego network的例子,其中绿色结点是第1跳,蓝色结点是第2跳;
计算并更新ego-network里的每个结点的embedding。embeddings会使用到图的结构信息和结点与边的特征。

那么,这些embedding是如何计算和更新的呢?主要是使用Message Passing的计算方法。Message Passing有一些计算范式如GAS(Gather-ApplyEdge-Scatter), SAGA(Scatter-ApplyEdge-Gather-ApplyVertex)等。我们这里介绍归纳得比较全面的SAGA计算范式。假设需要计算和更新下图中的
:

Scatter
Propagate message from source vertex to edge.

ApplyEdge
Transform message along each edge.

Gather
Gather transformed message to the destination vertex.

ApplyVertex
Transform the gathered output to get updated vertex.

公式如下:
分析一下,会发现,SAGA模式中ApplyEdge和ApplyVertex是传统deep learning中的NN(Neural Network)操作,我们可以复用;而Scatter和Gather是GNN新引入的操作。即,Graph Computing = Graph Ops + NN Ops。

不同的图数据集规模
One big graph
可能高达数十亿的结点,数百亿的边。

Many small graphs

不同的图任务
Node-level prediction
预测图中结点的类别或性质

Edge-level prediction
预测图中两个结点是否存在边,以及边的类别或性质

Graph-level prediction
预测整图或子图的类别或性质

How
Workflow

以fraud detection为例:
Tabformer数据集
workflow
软件栈

计算平面

数据平面

SW Challenges
Graph Sampler
For many small graphs datasets, full batch training works most time. Full batch training means we can do training on whole graph;
When it comes to one large graph datasets, in many real scenarios, we meet Neighbor Explosion problem;
Neighbor Explosion:
Graph sampler comes to rescue. Only sample a fraction of target nodes, and furthermore, for each target node, we sample a sub-graph of its ego-network for training. This is called mini-batch training.
Graph sampling is triggered for each data loading. And the hops of the sampled graph equals the GNN layer number . Which means graph sampler in data loader is important in GNN training.
Challenge: How to optimize sampler both as standalone and in training pipe?
When graph comes to huge(billions of nodes, tens of billions of edges), we meet new at-scale challenges:
How to store the huge graph across node? -> graph partition
How to build a training system w/ not only distributed model computing but also distributed graph store and sampling?
How to cut the graph while minimize cross partition connections?

A possible GNN distributed training architecture:

Scatter-Gather
Fuse adjacent graphs ops
One common fuse pattern for GCN & GraphSAGE:

Challenge:
How to fuse more GNN patterns on different ApplyEdge and ApplyVertex,automatically?How to implement fused Aggregate
Challenge:Different graph data structures lead to different implementations in same logic operations;
Different graph characteristics favors different data structures;(like low-degree graphs favor COO, high-degree graphs favor CSR)
How to find the applicable zone for each and hide such complexity to data scientists?
More
Inference challenge
GNN inference needs full batch inference, how to make it efficient?
Distributed inference for big graph?
Vector quantization for node and edge features?
GNN distilled to MLP?
SW-HW co-design challenge
How to relief irregular memory access in scatter-gather?
Do we need some data flow engine for acceleration?
…
Finishing words
“There is plenty of room at the top” 对技术人员很重要。但为避免入宝山而空返,我们更需要建立起技术架构,这就像是地图一样,只有按图索骥才能更好地探索和利用好top里的plenty of room。

References
Graph + AI: What’s Next? Progress in Democratizing Graph for All
Recent Advances in Efficient and Scalable Graph Neural Networks
Understanding and Bridging the Gaps in Current GNN Performance Optimizations
Understanding GNN Computational Graph: A Coordinated Computation, IO, And Memory Perspective
fuseGNN: Accelerating Graph Convolutional Neural Network Training on GPGPU
VQ-GNN: A Universal Framework to Scale up Graph Neural Networks using Vector Quantization
NeuGraph: Parallel Deep Neural Network Computation on Large Graphs
Completing a member knowledge graph with Graph Neural Networks
PinnerFormer: Sequence Modeling for User Representation at Pinterest
GNN 101的更多相关文章
- 了解 ARDUINO 101* 平台
原文链接 简介 作为一名物联网 (IoT) 开发人员,您需要根据项目的不同需求,选择最适合的平台来构建应用. 了解不同平台的功能至关重要. 本文第一部分比较了 Arduino 101 平台和 Ardu ...
- Entity Framework 6 Recipes 2nd Edition(10-1)译->非Code Frist方式返回一个实体集合
存储过程 存储过程一直存在于任何一种关系型数据库中,如微软的SQL Server.存储过程是包含在数据库中的一些代码,通常为数据执行一些操作,它能为数据密集型计算提高性能,也能执行一些为业务逻辑. 当 ...
- 虚拟 router 原理分析- 每天5分钟玩转 OpenStack(101)
上一节我们创建了虚拟路由器"router_100_101",并通过 ping 验证了 vlan100 和 vlan101 已经连通. 本节将重点分析其中的原理. 首先我们查看控制节 ...
- VS:101 Visual Studio 2010 Tips
101 Visual Studio 2010 Tips Tip #1 How to not accidentally copy a blank line TO – Text Editor ...
- 【Mocha.js 101】钩子函数
前情提要 在上一篇文章<[Mocha.js 101]同步.异步与 Promise>中,我们学会了如何对同步方法.异步回调方法以及 Promise 进行测试. 在本篇文章中,我们将了解到 M ...
- 【Mocha.js 101】同步、异步与 Promise
前情提要 在上一篇文章<[Mocha.js 101]Mocha 入门指南>中,我们提到了如何用 Mocha.js 进行前端自动化测试,并做了几个简单的例子来体验 Mocha.js 给我们带 ...
- [nginx] connect() failed (111: Connection refused) while connecting to upstream, client: 101.18.123.107, server: localhost,
nginx一直报错, 2016/12/02 10:23:19 [error] 1472#0: *31 connect() failed (111: Connection refused)while c ...
- 学习 Linux,101: Linux 命令行
概述 本教程将简要介绍 bash shell 的一些主要特性,涵盖以下主题: 使用命令行与 shell 和命令交互 使用有效的命令和命令序列 定义.修改.引用和导出环境变量 访问命令历史和编辑工具 调 ...
- UVa 101 The Blocks Problem Vector基本操作
UVa 101 The Blocks Problem 一道纯模拟题 The Problem The problem is to parse a series of commands that inst ...
随机推荐
- 如何免费申请js.org二级域名
最近看到很多人都去申请了js.org的域名,我就来写个教程吧! (本教程只注重于申请域名,而不是如何使用Github) 看看成品:https://butterfly.js.org/ 官网是这么写的: ...
- 蕞短鹭(artskjid) (⭐通信题/模拟⭐)
文章目录 题面(过于冗长,主要是对通信题的一些解释) 题解 1.通信题什么意思 2.此题题解 CODE 实现 题面(过于冗长,主要是对通信题的一些解释) 题解 1.通信题什么意思 并不是两个程序同时跑 ...
- 基于Vue3实现一个前端埋点上报插件并打包发布到npm
前端埋点对于那些营销活动的项目是必须的,它可以反应出用户的喜好与习惯,从而让项目的运营者们能够调整策略优化流程提高用户体验从而获取更多的$.这篇文章将实现一个Vue3版本的埋点上报插件,主要功能有 通 ...
- Neural ODE相关论文摘要翻译
*****仅供个人学习记录***** Neural Ordinary Differential Equations[2019] 论文地址:[1806.07366] Neural Ordinary Di ...
- Oracle_FDW 使用介绍
本文以例子的形式介绍 KingbaseES(Postgresql)数据库如何通过 oracle_fdw 扩展访问Oracle数据库.以下例子在PG12.3 与 KingbaseES V8R6进行过实际 ...
- Pytest fixture及conftest详解
前言 fixture是在测试函数运行前后,由pytest执行的外壳函数.fixture中的代码可以定制,满足多变的测试需求,包括定义传入测试中的数据集.配置测试前系统的初始状态.为批量测试提供数据源等 ...
- Java的线程状态
在我们平时写code的时候,经常会使用到多线程.其中线程所处的状态就是我们需要进程思考的问题. 线程有哪些状态 NEW: 一个线程刚被创建,但是没有被使用就是处于这个状态 RUNNABLE: 一个线程 ...
- MySQL读写分离之——ProxySQL
文章转载自:https://blog.csdn.net/u012280685/article/details/113520692?spm=1001.2014.3001.5501 实现一个简单的读写分离 ...
- 解决zeal离线文档下载慢问题
zeal简介 编程过程中难免会遇到不会用的关键字和方法,对我而言,在windows下,我使用Zeal这个软件进行离线文档查询. 问题 但是,在软件中下载DocSet(文档)会出现下载慢,或者下载不了的 ...
- 部署文件:filebeat->kafka集群(zk集群)->logstash->es集群->kibana
该压缩包内包含以下文件: 1.install_java.txt 配置java环境,logstash使用 2.es.txt 三节点的es集群 3.filebeat.txt 获取日志输出到kafka集群 ...



