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图处理框架。

对图计算技术感兴趣的同学可以多做了解,也非常欢迎大家关注和参与论文图谱的开源项目:

提前感谢给项目点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的更多相关文章

  1. 论文解读《The Emerging Field of Signal Processing on Graphs》

    感悟 看完图卷积一代.二代,深感图卷积的强大,刚开始接触图卷积的时候完全不懂为什么要使用拉普拉斯矩阵( $L=D-W$),主要是其背后的物理意义.通过借鉴前辈们的论文.博客.评论逐渐对图卷积有了一定的 ...

  2. 论文解读(MGAE)《MGAE: Masked Autoencoders for Self-Supervised Learning on Graphs》

    论文信息 论文标题:MGAE: Masked Autoencoders for Self-Supervised Learning on Graphs论文作者:Qiaoyu Tan, Ninghao L ...

  3. 论文解读(ValidUtil)《Rethinking the Setting of Semi-supervised Learning on Graphs》

    论文信息 论文标题:Rethinking the Setting of Semi-supervised Learning on Graphs论文作者:Ziang Li, Ming Ding, Weik ...

  4. zz扔掉anchor!真正的CenterNet——Objects as Points论文解读

    首发于深度学习那些事 已关注写文章   扔掉anchor!真正的CenterNet——Objects as Points论文解读 OLDPAN 不明觉厉的人工智障程序员 ​关注他 JustDoIT 等 ...

  5. [论文解读] 阿里DIEN整体代码结构

    [论文解读] 阿里DIEN整体代码结构 目录 [论文解读] 阿里DIEN整体代码结构 0x00 摘要 0x01 文件简介 0x02 总体架构 0x03 总体代码 0x04 模型基类 4.1 基本逻辑 ...

  6. 《Stereo R-CNN based 3D Object Detection for Autonomous Driving》论文解读

    论文链接:https://arxiv.org/pdf/1902.09738v2.pdf 这两个月忙着做实验 博客都有些荒废了,写篇用于3D检测的论文解读吧,有理解错误的地方,烦请有心人指正). 博客原 ...

  7. 注意力论文解读(1) | Non-local Neural Network | CVPR2018 | 已复现

    文章转自微信公众号:[机器学习炼丹术] 参考目录: 目录 0 概述 1 主要内容 1.1 Non local的优势 1.2 pytorch复现 1.3 代码解读 1.4 论文解读 2 总结 论文名称: ...

  8. 论文解读丨基于局部特征保留的图卷积神经网络架构(LPD-GCN)

    摘要:本文提出一种基于局部特征保留的图卷积网络架构,与最新的对比算法相比,该方法在多个数据集上的图分类性能得到大幅度提升,泛化性能也得到了改善. 本文分享自华为云社区<论文解读:基于局部特征保留 ...

  9. CVPR2020 论文解读:少点目标检测

    CVPR2020 论文解读:具有注意RPN和多关系检测器的少点目标检测 Few-Shot Object Detection with Attention-RPN and Multi-Relation ...

  10. 图像分类:CVPR2020论文解读

    图像分类:CVPR2020论文解读 Towards Robust Image Classification Using Sequential Attention Models 论文链接:https:// ...

随机推荐

  1. Yii框架Ar操作

    1.$admin=Admin::model()->findAll($condition,$params);        该方法是根据一个条件查询一个集合,如:  findAll("u ...

  2. nonatomic 带来的线程安全问题

    一.结论 一个对象对外暴露的读写属性,如果这个属性在多个线程中访问,一定会出现crash. 因此对外暴露的属性一定要考虑线程安全问题. 二.看下面的代码 下面的代码一定会crash,除非obj是ato ...

  3. 微信iOS消息拦截插件教程-手机越狱环境搭建

    微信iOS消息拦截插件教程-手机越狱环境搭建 标签(空格分隔): ios越狱开发 环境 背景介绍 本教程所有内容免费 本教程来源于一次知识分享,如果有需要了解更多的 请联系QQ:480071411 i ...

  4. Anaconda安装Python的seaborn库

      本文介绍在Anaconda的环境中,安装Python语言中,常用的一个绘图库seaborn模块的方法.   seaborn模块是基于Matplotlib的数据可视化库,它提供了一种更简单.更漂亮的 ...

  5. 剑指Offer-47.求1+2+3+...+n(C++/Java)

    题目: 求1+2+3+...+n,要求不能使用乘除法.for.while.if.else.switch.case等关键字及条件判断语句(A?B:C). 分析: 利用短路与来判断n是否大于0,从而实现递 ...

  6. Steam Epic 启动程序默认地址

    Steam Epic 启动程(启动器)序默认地址 "D:\Games\EpicAPP\Epic Games\Launcher\Portal\Binaries\Win32\EpicGamesL ...

  7. work06

    练习题:=============================================================第七题: 1.定义方法 isSXH(int num) 功能:判断数字n ...

  8. 微信支付普通商户与AppID账号关联管理-授权

    微信支付普通商户与AppID账号关联管理 二.名词解释 名词 释义 微信支付普通商户 公司企业.政府机关.事业单位.社会组织.个体工商户.个人卖家.小微商户.(微信支付商户接入指引) AppID 已通 ...

  9. 如何拥抱AI

    从去年年初开始,AI技术真正走入了我们的日常生活.从OpenAI到如今字节跳动的coze,我们通过AI大模型可以做很多事情,工具和平台众多,如何选择和使用有必要总结一下. 编程和debug方面 尽管g ...

  10. python之集合学习

    *******************集合{set}******************* 1.集合set 可变 特点:是由不同元素组成 是无序的 集合中元素必须是不可变类型例如(字符串/元祖/数字) ...