我用Awesome-Graphs看论文:解读X-Stream

X-Stream论文:《X-Stream: Edge-centric Graph Processing using Streaming Partitions》
前面通过文章《论文图谱当如是:Awesome-Graphs用200篇图系统论文打个样》向大家介绍了论文图谱项目Awesome-Graphs,并分享了Google的Pregel以及OSDI 2012上的PowerGraph。这次向大家分享发表在SOSP 2013上的另一篇经典图计算框架论文X-Stream,构建了单机上基于外存的Scatter-Gather图处理框架。
对图计算技术感兴趣的同学可以多做了解,也非常欢迎大家关注和参与论文图谱的开源项目:
- Awesome-Graphs:https://github.com/TuGraph-family/Awesome-Graphs
- OSGraph:https://github.com/TuGraph-family/OSGraph
提前感谢给项目点Star的小伙伴,接下来我们直接进入正文!
摘要
- X-Stream是一个单机共享内存的既可以处理内存图也可以处理外存图的图处理系统。
- 特点:
- 以边为中心的计算模型。
- 流式访问无序边,而不是随机访问。
1. 介绍
传统的以点为中心的处理:
- scatter函数将点状态传播给邻居点。
- gather函数累计更新,并重新计算点状态。

顺序/随机访问不同存储介质的性能差异:
- 磁盘:500x
- SSD:30x
- 内存:1.8x - 4.6x
X-Stream的以边为中心的处理:
- scatter/gather在边/更新上迭代,而不是在点上迭代。
- 使用流式分区缓解点集的随机访问。
- 将边和源点划分到同一个分区。

X-Stream主要贡献:
- 边中心处理模型。
- 流式分区。
- 不同存储介质上的良好扩展性。
- 高性能。
2. X-Stream处理模型
API设计:
- Scatter:根据边和源点,计算目标点更新。
- Gather:根据目标点收到更新,重新计算目标点状态。
2.1 流
X-Stream使用流的方式执行Scatter+Gather。边和更新是顺序访问的,但是点是随机访问的。

2.2 流式分区
流式分区包含:
- 点集:分区上的点子集。
- 边列表:源点的边。
- 更新列表:目标点的更新。
2.3 分区上的Scatter-Gather
Scatter + Shuffle + Gather:

2.4 分区的大小和数量
- 一方面为了让点集合尽量加载到快存储,分区数不能太小。
- 另一方面为了最大化利用慢存储的顺序读写能力,分区数不能太大。
- 通过固定分区点集合大小的方式进行分区。
2.5 API限制和扩展
- 虽然不能遍历点上的所有边,但是可以对所有的点进行迭代,并提供自定义的点函数。
- 不仅限于支持scatter-gather模型,也可以支持semi-streaming、W-Stream模型等。
3. 基于外存的流式引擎
每个流式分区维护三个磁盘文件:点文件、边文件、更新文件。
难点在于实现shuffle节点的顺序访问,通过合并scatter+shuffle阶段,更新写入到内存buffer,buffer满时执行内存shuffle追加到目标分区磁盘文件。
3.1 内存数据结构
stream buffer设计:

基于stream buffer,一个buffer用于存储scatter的更新,另一个存储内存shuffle的结果。
3.2 操作
初始化边分区可以使用内存shuffle方式实现。

3.3 磁盘IO
- X-Stream的stream buffer采用异步Direct I/O,而不是OS页面缓存(4K)。
- 预读和块写提高磁盘利用率,但是需要额外的stream buffer。
- 使用RAID实现读写分离。
- 使用SSD存储TRIM操作实现truncate。
3.4 分区数量
假设分区的更新满足均匀分布,则有如下内存公式:
- N:点集合内存总量。
- S:最大带宽IO请求包大小。
- K:分区数。
- M:内存总量。

4. 基于内存的流式引擎
4.1 并行Scatter-Gather
- 每个线程写自由缓存,再统一flush到贡献的输出数据块。
- 通过worker stealing避免倾斜。
4.2 并行多阶段shuffle
- 将分区使用树形结构组织起来,分支因子F(扇出度大小),树的每一层对应一步shuffle。
- 因此对于K个分区,一共需要logFK步shuffle。
- 使用两个stream buffer轮换输入输出角色实现shuffle。
- 论文将F设置为CPU cache的可用行数。
4.3 磁盘流的分层
内存引擎逻辑上在外存引擎上层,外存引擎可以自由选择使用内存引擎处理的分区数量,以最大化利用内存和计算资源。
5. 评估
- 256M内存cache大小,在16core时达到最大内存带宽25GB/s。
- 16M IO请求包大小。
我用Awesome-Graphs看论文:解读X-Stream的更多相关文章
- 论文解读《The Emerging Field of Signal Processing on Graphs》
感悟 看完图卷积一代.二代,深感图卷积的强大,刚开始接触图卷积的时候完全不懂为什么要使用拉普拉斯矩阵( $L=D-W$),主要是其背后的物理意义.通过借鉴前辈们的论文.博客.评论逐渐对图卷积有了一定的 ...
- 论文解读(MGAE)《MGAE: Masked Autoencoders for Self-Supervised Learning on Graphs》
论文信息 论文标题:MGAE: Masked Autoencoders for Self-Supervised Learning on Graphs论文作者:Qiaoyu Tan, Ninghao L ...
- 论文解读(ValidUtil)《Rethinking the Setting of Semi-supervised Learning on Graphs》
论文信息 论文标题:Rethinking the Setting of Semi-supervised Learning on Graphs论文作者:Ziang Li, Ming Ding, Weik ...
- zz扔掉anchor!真正的CenterNet——Objects as Points论文解读
首发于深度学习那些事 已关注写文章 扔掉anchor!真正的CenterNet——Objects as Points论文解读 OLDPAN 不明觉厉的人工智障程序员 关注他 JustDoIT 等 ...
- [论文解读] 阿里DIEN整体代码结构
[论文解读] 阿里DIEN整体代码结构 目录 [论文解读] 阿里DIEN整体代码结构 0x00 摘要 0x01 文件简介 0x02 总体架构 0x03 总体代码 0x04 模型基类 4.1 基本逻辑 ...
- 《Stereo R-CNN based 3D Object Detection for Autonomous Driving》论文解读
论文链接:https://arxiv.org/pdf/1902.09738v2.pdf 这两个月忙着做实验 博客都有些荒废了,写篇用于3D检测的论文解读吧,有理解错误的地方,烦请有心人指正). 博客原 ...
- 注意力论文解读(1) | Non-local Neural Network | CVPR2018 | 已复现
文章转自微信公众号:[机器学习炼丹术] 参考目录: 目录 0 概述 1 主要内容 1.1 Non local的优势 1.2 pytorch复现 1.3 代码解读 1.4 论文解读 2 总结 论文名称: ...
- 论文解读丨基于局部特征保留的图卷积神经网络架构(LPD-GCN)
摘要:本文提出一种基于局部特征保留的图卷积网络架构,与最新的对比算法相比,该方法在多个数据集上的图分类性能得到大幅度提升,泛化性能也得到了改善. 本文分享自华为云社区<论文解读:基于局部特征保留 ...
- CVPR2020 论文解读:少点目标检测
CVPR2020 论文解读:具有注意RPN和多关系检测器的少点目标检测 Few-Shot Object Detection with Attention-RPN and Multi-Relation ...
- 图像分类:CVPR2020论文解读
图像分类:CVPR2020论文解读 Towards Robust Image Classification Using Sequential Attention Models 论文链接:https:// ...
随机推荐
- SwiftUI Stack中的View被压缩的效果
一.背景 我们在布局中,经常会遇到视图元素排列时空间不足或者空间过大的情况,在这种场景下面,不同的布局方式有不同的方法: 绝对布局frame:纯靠计算过程控制,获取父视图的大小,根据需求,计算自己需要 ...
- 基本定时器TIM6实现精确延时
1.基本定时器的特点 (1).16位自动重装载累加计数器 (2).16位可编程(可实时修改)预分频器,用于对输入的时钟按系数为1-65536之间的任意数值 !!!注意基本定时器只有向上计数模式,不要被 ...
- js 实现密码框的查看和隐藏
大江东去,浪淘尽,千古风流人物.故垒西边,人道是,三国周郎赤壁.乱石穿空,惊涛拍岸,卷起千堆雪.江山如画,一时多少豪杰.遥想公瑾当年,小乔初嫁了,雄姿英发.羽扇纶巾,谈笑间,樯橹灰飞烟灭.故国神游,多 ...
- LLM应用实战:当图谱问答(KBQA)集成大模型(三)
1. 背景 最近比较忙(也有点茫),本qiang~想切入多模态大模型领域,所以一直在潜心研读中... 本次的更新内容主要是响应图谱问答集成LLM项目中反馈问题的优化总结,对KBQA集成LLM不熟悉的客 ...
- work03
第一题: 1.定义一个包含十个元素的数组.数组元素自己给出 2.遍历打印出数组元素 3.求出数组当中的最小值打印出来 4.求出数组当中的最大值打印出来 5,求数组当中 第二大 值 第二题: 1.定义一 ...
- 一个常见的 JavaScript 解构陷阱
在日常的 JavaScript 编码中,我们经常使用解构语法来提取对象中的属性.假设我们有一个名为 fetchResult 的对象,代表从接口返回的数据,其中包含一个字段名为 data. const ...
- MySql 中 select 使用
MySql select 多种查询方式 前言 在数据库使用过程中,使用最多的场景就是查询数据,所以今天我们总结一下常用用的查询 简单查询 带条件查询 多条件查询 输出指定字段查询 分组查询 查询结果排 ...
- 【iOS】push控制器时隐藏tabbar,dismiss控制器时显示tabbar
在push之前将控制器的属性hidesBottomBarWhenPushed设置为yes就好. //准备要把控制器vc给push出去了 UIViewController *vc = [[UIViewC ...
- 基于人类反馈的强化学习,Reinforcement Learning from Human Feedback (RLHF)
基于人类反馈的强化学习, RLHF,转载参考链接 RLHF 是一项涉及多个模型和不同训练阶段的复杂概念,可以按三个步骤分解: 预训练一个语言模型 (LM) : 聚合问答数据并训练一个奖励模型 (Rew ...
- 基于 SQLite 3 的 C 学习:1-开发流程 与 基本函数
背景 SQLite 是 一个 常用于 嵌入式平台的 轻量级的 关系型数据库. 我们已经介绍了 移植 SQLite 3 ,这一讲我们来介绍它的开发,这里仅仅涉及最基本的开发. 高级api:https:/ ...