- Gemini graph: 采用点切分,创建本地镜像节点用于通信。节省通信开销。
- AGL:提前采样好所有的K-Hop图并把这些子图的拓扑结构和特征一同序列化存储到磁盘上,可以使一个样本只需要一次IO。节省训练时IO开销。
- GraphLab:采用边切分。节省边数据存储开销。
- GraphX:graphx借鉴powerGraph,使用的是vertexcut(点分割)方式存储图。这种存储方式特点是任何一条边只会出现在一台机器上,每个点有可能分布到不同的机器上。当点被分割到不同机器上时,是相同的镜像,但是有一个点作为主点(master),其他的点作为虚点(ghost),当点B的数据发生变化时,先更新点B的master的数据,然后将所有更新好的数据发送到B的ghost所在的所有机器,更新B的ghost。这样做的好处是在边的存储上是没有冗余的,而且对于某个点与它的邻居的交互操作,只要满足交换律和结合律,比如求邻居权重的和,求点的所有边的条数这样的操作,可以在不同的机器上并行进行,只要把每个机器上的结果进行汇总就可以了,节省通信开销。代价是每个点可能要存储多份,更新点要有数据同步开销。
- PowerGraph:采用点切分,点切分只要同步一个点的节点信息。论文分析了3种分配方式,随机边分配,贪婪协同边分配,非贪婪边分配(Oblivious遗忘)。协同的贪婪分区算法平均机器跨度最小,但构建时间最长。而随机策略构建时间短,但平均的机器跨度最大。而Oblivious的贪婪分区策略能够在平均机器跨度和构建时间上获得一个折中的性能。平衡通信开销和图划分开销。
- DistDGL:基于METIS将图进行划分,划分后将每个子图Partition和该子图上节点对应的特征存储在不同的机器上,采样时子图的种子节点只从本地的partition的子图采样。由于METIS划分结果具有较好的局部性,使得大部分采样都发生在本地以及大部分节点的特征都存储在本地进行。减少特征拉取和采样时的通信开销。
- AliGraph:对于热节点以及它的一层邻居静态缓存到所有机器节点上。挖掘图的数据特征(幂律分布)。
- PaGraph:将热点节点的特征缓存到GPU中以加速图特征的访问。图的访问具有较大的随机性使得CPU的缓存没法起到作用,而GPU又有着远远大于CPU的访存带宽,于是部分数据存储在GPU上的确会带来较大的性能收益。