docs/overview/angel_graph_sona.md
如今,我们身处万物互连的复杂网络世界,人和人、人和物、物和物之间的关系也变得更加复杂多样化,现实中许多问题都可以抽象为图来表达,通过传统图挖掘、图表示学习和图神经网络等图技术,我们可以从海量关系结构的数据中挖掘丰富的信息,以弥补单点分析的不足,最终对金融支付、安全风控、推荐广告等诸多业务场景产生助力。
Angel Graph吸收了Angel参数服务器以及Spark、PyTorch优势,使得传统图计算、图表示学习和图神经网络“三位一体”,实现了高性能、高可靠、易用的大规模分布式图计算框架。
Angel Graph有以下核心能力:
如下图所示,Angel Graph利用Spark和Pytorch,下层Spark Worker,上层为Angel参数服务。
Angel Graph中的Spark On Angel模块将Angel灵活的参数服务器插件式地赋能给原生Spark,为Spark提供了高效的数据存储/更新/共享服务,因而非常适用于分布式图计算框架。同时Spark On Angel又沿用了原生Spark的变成接口,使得在该框架上的算法开发可以利用Spark的能力。
Spark Driver:负责控制整体计算逻辑
Spark Executor:在进行传统图计算和图表示学习时,Spark Executor存储图邻接表/边表等不可变的数据结构,在每轮迭代中从PS拉取(pull)所需的节点属性等数据,在本地完成计算后将结果推送(push)回PS,交由PS进行更新。在图神经网络算法训练时,Pytorch C++后端作为实际的计算引擎以native的方式运行在Spark Executor中
为了方便使用图计算框架,我们实现了许多常用图算法,并且在内部业务中进行了充分测试,保证了算法的运行效率和正确性。用户使用时无需过多调整,便可快速使用。
| 算法名称 | 算法类型 | 说明 |
|---|---|---|
| PageRank | 节点重要性计算 | 经典的传统图算法 |
| Hindex | 节点重要性计算 | 混合量化指标,参考H指数 |
| Kcore | 节点特征 | 提取网络中关键子结构 |
| Louvain | 社区发现 | 通过优化模块度指标达到社区划分的目的 |
| Closeness | 接近中心性 | 度量顶点在图中的中心程度 |
| CommonFriends | 共同好友计算 | 计算两个顶点的共同好友数 |
| TriangleCountingUndirected | 三角计数 | 计算每个顶点所在的三角结构个数 |
| LPA | 标签传播 | 一种社区发现或传播算法 |
| ConnectedComponents | 弱连通分量 | 挖掘图的弱连通分量 |
| LINE | 表示学习 | 可利用1阶,2阶邻居信息进行表示学习 |
| Word2Vec | 表示学习 | 一种经典的表征学习算法 |
| GraphSage | 图神经网络算法 | 通过聚合节点邻居的特征进行表示学习 |
| GCN | 图神经网络算法 | 类似CNN操作,并应用到图非欧空间的算法 |
| DGI | 图神经网络算法 | DIM应用到复杂网络领域 |
我们在两份真实的数据集下对比Graphx和Angel Graph的性能,其中DS1为8亿顶点,110亿边金融支付网络;DS2为20亿顶点,1400亿边的社交网络,性能测试结果如下所示:
有关Angel Graph的详细介绍,可以参考这篇论文 PSGraph: How Tencent trains extremely large-scale graphs with Spark?