[论文笔记] Gemini: A Computation-Centric Distributed Graph Processing System

news2024/9/29 19:30:34

Gemini: A Computation-Centric Distributed Graph Processing System

Gemini: 以计算为中心的分布式图处理系统 [Paper] [Slides] [Code]
OSDI’16

摘要

提出了 Gemini, 一个分布式图处理系统, 应用了多种针对计算性能的优化以在效率之上构建可扩展性.
Gemini 采用:

  • 稀疏-稠密信号槽抽象, 将混合推拉计算模型扩展到分布式场景
  • 基于分块的划分(chunk-based partition)方案, 可实现低开销的横向扩展和保留局部性的结点访问
  • 压缩结点索引访问的双重表示方案
  • 用于高效节点内内存访问的 NUMA 感知子划分
  • 用于改善节点间和节点内的负载均衡的局部感知分块细粒度工作窃取

1 介绍

许多分布式图处理系统被提出, 但与最先进的共享内存系统相比性能不尽人意.
为了获得更好的整体性能, 需要同时关注计算和通信组件的性能, 在隐藏通信开销的同时积极压缩计算时间.

提出了 Gemini, 一个在效率之上构建可扩展性的分布式图处理系统.

本文贡献:

  • 对几个现有的共享内存和分布式的图并行系统进行了详细分析, 并发现了多个设计缺陷.
  • 探索了自适应的运行时选择, 如密度感知的双模处理方案、多个局部性感知的数据分布和负载平衡机制, 使得系统在从多核到多节点的规模上提供具有竞争力的性能.
  • 确定了一种简单但效果惊人的基于分块的图划分方案, 并提出了由这种新划分方法实现的多种优化.
  • 大量实验评估表明 Gemini 显著优于现有的分布式实现.

2 动机

现有的分布式图处理系统可以扩展到比共享内存系统更大的处理规模, 但性能和开销不尽人意.
设计分布式图并行系统时, 通过在效率之上构建可扩展性, 而非只关注可扩展性.

3 Gemini 图处理抽象

3.1 双重更新传播模型

Gemini 使用了 PowerGraph 的 master-mirror(主镜) 概念:

  • 每个结点被分配给一个分区, 结点在该分区为 master(主) 结点, 作为维护结点状态数据的主副本.
  • 同一结点在拥有其至少一个邻结点的节点/分区上有副本, 称为 mirrors(镜像) 结点.

Gemini 采用稀疏-稠密双模式引擎设计, 使用信号-槽(signal-slot)抽象将结点状态(通信)与边处理(计算)分离.
信号和槽表示用户定义的以结点为中心的函数, 分别描述消息的发送和接收行为.
在这里插入图片描述

  • 稀疏(推)模式:
    1. master 结点先通过 sparseSignal 向 mirror 结点发送包含最新结点状态的消息
    2. mirror 结点通过 sparseSlot 沿出边依次更新其邻结点
  • 稠密(拉)模式:
    1. mirror 结点先沿入边根据邻结点状态执行本地计算, 然后通过 denseSignal 将包含结果的更新消息发送给 master 结点
    2. master 结点通过 denseSlot 更新自身状态

消息组合(message combining)自动启用:
每个结点的每个激活的 master-mirror 对只需要一条消息, 将消息数量从 O ( ∣ E ∣ ) O(|E|) O(E) 降低到 O ( ∣ V ∣ ) O(|V|) O(V).
允许在本地执行计算以聚合传出更新, 而无需采用额外的"组合过程(combining pass)".

3.2 Gemini API

核心 API:
在这里插入图片描述

  • 并非所有的用户定义函数都是必须的.
  • 双模式处理是可选的.

连通分量(Connected Components, CC)算法示例:
在这里插入图片描述
在这里插入图片描述

4 分布式图表示

提出了一种轻量级、基于分块的多级划分方案, 并提出了几种关于图划分和内部表示的设计选择.

4.1 基于分块划分

划分结点集为连续的分块可以有效保留局部性.

p p p 个节点的集群上, 给定全局图 G = ( V , E ) G=(V,E) G=(V,E) 划分为 p p p 个子图 G i = ( V i ′ , E i ) , i  from  0  to  ( p − 1 ) G_i=(V'_i,E_i), i\text{ from }0\text{ to }(p-1) Gi=(Vi,Ei),i from 0 to (p1).

  • V i ′ V'_i Vi E i E_i Ei: 第 i i i 个分区的结点子集和边子集.
  • V i V_i Vi: 第 i i i 个分区拥有的(master)结点子集.

Gemini 划分 G G G 使用一个简单的基于分块的方案, V V V 划分为 p p p 个连续的结点分块 ( V 0 , V 1 , . . . , V p − 1 ) (V_0,V_1,...,V_{p-1}) (V0,V1,...,Vp1).
每个分块 ( V i V_i Vi) 被分配给一个集群节点, 该节点拥有该分块的所有结点.

  • 分区 i i i 的出边集 (用于稀疏模式): E i S = { ( s r c , d s t , v a l u e ) ∈ E ∣ d s t ∈ V i } E_i^S=\{(src,dst,value)\in E|dst\in V_i\} EiS={(src,dst,value)EdstVi}
  • 分区 i i i 的入边集 (用于稠密模式): E i D = { ( s r c , d s t , v a l u e ) ∈ E ∣ s r c ∈ V i } E_i^D=\{(src,dst,value)\in E|src\in V_i\} EiD={(src,dst,value)EsrcVi}

(注: 此处的出/入边集与表达式中 d s t / s r c ∈ V i dst/src\in V_i dst/srcVi 看起来有冲突, 但实际上 V i V_i Vi 表示分区的 master 结点集, 并不在图结构 BCSR/DCSC 的索引数组中记录, 而是以邻接表的形式记录. 对于 BCSR/DCSC 中的索引数组, E i S E_i^S EiS/ E i D E_i^D EiD 分别是出/入边集.)
在这里插入图片描述

4.2 双模式边表示

CSR/CSC 格式索引数组 idx 可能成为扩展瓶颈.

使用两种方案分别增强两种模式的索引数组:

  • 位图辅助压缩稀疏行(Bitmap Assisted Compressed Sparse Row, BCSR):
    针对稀疏模式的边, 添加了一个标记每个结点在该分区是否有出边的存在位图 ext.
  • 双压缩稀疏列(Doubly Compressed Sparse Column, DCSC):
    针对稠密模式的边, 仅存储具有入边的结点(vtx)及其相应的边偏移(off, (off[i+1]-off[i]) 表示结点 vtx[i] 具有的本地入边数).

在这里插入图片描述

4.3 局部性感知分块

Gemini 采用了一种在设置平衡标准时同时考虑拥有的(master)结点和稠密模式边的混合度量.
划分结点数组 V V V 使得每个分区具有 α ⋅ ∣ V i ∣ + ∣ E i D ∣ \alpha\cdot|V_i|+|E^D_i| αVi+EiD 的平衡值.

  • α \alpha α 为可配置参数, 实验中根据经验设置为 8 ⋅ ( p − 1 ) 8\cdot(p−1) 8(p1).

4.4 NUMA 感知子划分

Gemini 基于分块的图划分允许系统以相同的方式递归地应用子划分, 并在每个特定级别都有适用不同的优化.

在一个节点中, Gemini 在多个 socket 之间应用 NUMA 感知的子划分:
对于每个包含 s s s 个 socket 的节点, 结点分块 V i V_i Vi 被进一步划分成 s s s 个子块, 每个 socket 一个; 边使用与节点间划分相同的规则(4.1 节)分配给相应的 socket.

5 任务调度

Gemini 遵循批量同步并行(Bulk Synchronous Parallel, BSP)模型.

5.1 计算与通信任务协同调度

Gemini 将集群节点组织成一个环, 以平衡的循环方式协调消息发送和接收操作.
在具有 c c c 个核的节点上, Gemini 维护一个具有 c c c 个线程的 OpenMP 线程池, 用于并行边处理、执行 signalslot 任务; 每个线程使用 NUMA 感知的子划分绑定到特定 socket 上.
每个节点创建两个助手线程用于通过 MPI 进行节点间的消息发送/接收操作.

基于分块的划分和 CSR/CSC, 可以以稀疏和稠密模式批处理发往同一分区的消息; 并以面向分区的方式调度任务.
每轮迭代分为 p p p (集群节点数)个 mini-step(小步骤), 每个 mini-step 中 n o d e i node_i nodei 按照从 n o d e i + 1 node_{i+1} nodei+1 到自己的顺序与每个对等节点通信.
在这里插入图片描述

5.2 细粒度工作窃取

Gemini 利用共享内存采用细粒度的工作窃取调度程序进行节点内边处理.
每个线程在 OpenMP 并行区域内仅获取待处理(signal / slot)结点的一小个分块(mini-chunk), mini-chunk 大小默认设置为 64 个结点.
每个线程首先完成自己所在核心的分区, 然后开始从其他线程的分区中窃取 mini-chunk.

Gemini 基于多级分块的划分:
在这里插入图片描述

6 实现

约 2800 行 C++ 代码, 使用 MPI 进行进程间通信, 使用 libnuma 进行 NUMA 感知的内存分配.

图加载:
从输入文件加载图时, 每个节点并行读取其分配的连续部分, 边按顺序分批加载到边缓冲区中.

图划分:
加载边时计算每个结点的度数并使用 AllReduce 收集, 用于划分结点集.
然后每个节点先进行本地划分, 再从文件中重新加载边并分发到目标节点构建局部子图.

内存分配:
所有节点共享节点间消息传递的节点级分区边界, 而 socket 级子分区信息保持节点私有.
每个节点在共享内存中分配整个结点数组.
Gemini 划分每个节点的结点分区为子分块, 并置于相应的 socket 上. 数据图的边和结点索引也采用 NUMA 感知的分配.

模式选择:
对于每个 ProcessEdges 操作, Gemini 首先调用一个(基于 ProcessVertices 接口的)内部操作获取激活边数, 并由此确定处理模式(稀疏或稠密).

并行处理:
每个 OpenMP 线程固定到特定 socket 上防止线程迁移.
对于工作窃取, 每个线程维护状态(WORKINGSTEALING)、当前 mini-chunk 起始偏移、预先计算的结束偏移; 并可供其他线程访问并以 NUMA 感知的对齐方式分配. 每个线程从自己的分区开始工作, 完成更改状态, 并尝试以循环方式从高序号线程窃取工作.
并发控制通过 OpenMP 隐式同步机制实现.

消息传递:
每个节点运行一个进程, 使用 MPI 进行节点间消息传递.
在 socket 间, 每个 socket 通过其对应的发送和接收缓冲区生成/使用消息.

7 评估

性能: Table 3(共享内存), Table 4(分布式)

在这里插入图片描述
内存消耗: Table 5
扩展性: Figure 9, Figure 10, Table 6
设计选择: Figure 11 ~ 14, Table 7 ~ 9


笔者总结

本文的核心是提出了一个在效率之上构建可扩展性的分布式图计算系统, 通过稀疏-稠密信号槽抽象、双模式边表示(BCSR/DCSC)以及多级图划分(节点级、socket 级、线程级)等方法提高了分布式图计算系统的计算性能.
Gemini 属于分布式图计算系统.

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/730249.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

99、基于STM32单片机智能指纹密码锁设计指纹识别控制门禁锁开关系统设计(程序+原理图+任务书+参考论文+开题报告+元器件清单等)

摘 要 近年来,指纹识别技术在国内外发展很快,由于其良好的安全性目前该技术已被广泛应用于生活和工作中。随着成本的下降,指纹识别技术呈现全面推广和普遍应用的趋势。 指纹识别技术是目前国际公认的应用广泛、价格低廉、易用性高的生物人…

6.Python:如何用Python进行数据可视化?

数据可视化是数据分析过程中不可或缺的一步,Python作为一个强大的编程语言,在数据可视化方面也是非常优秀的。本文将介绍使用Python进行数据可视化的基本步骤和常用工具。 一、Python数据可视化常用工具 Matplotlib Matplotlib是Python中最常用的数据…

git提交只单个或者某几个文件的指令

git status --查看目前本地和远程仓库的差异; git add --提交某的文件,多次执行可以提交多个文件 文件名称替换 git stash -u -k --其他文件保留到本地暂存区,不进行提交 git commit -m ---针对本次修改添加注释并提交到远程仓库 gi…

算法--辗转相除法

gcd 算法–辗转相除法 遇到一题算法题,如下: 求字符串的最大公因子? 对于字符串 s 和 t,只有在 s t … t(t 自身连接 1 次或多次)时,我们才认定 “t 能除尽 s”。 给定两个字符串 str1 和…

【LLM】金融大模型场景和大模型Lora微调实战

文章目录 一、金融大模型背景二、大模型的研究问题三、大模型技术路线四、LLaMA家族模型五、Lora模型微调的原理六、大模型Lora微调实战Reference 一、金融大模型背景 金融行业需要垂直领域LLM,因为存在金融安全和数据大多数存储在本地,在风控、精度、实…

Linux常用命令——expand命令

在线Linux命令查询工具 expand 将文件的制表符转换为空白字符 补充说明 expand命令用于将文件的制表符&#xff08;TAB&#xff09;转换为空白字符&#xff08;space&#xff09;&#xff0c;将结果显示到标准输出设备。 语法 expand(选项)(参数)选项 -t<数字>&am…

谷歌验证码kaptcha使用(包括前端获取解析)

1.后端 基于springboot开发。 包结构 1.导入依赖 <!--kaptcha验证码生成器--><dependency><groupId>com.github.axet</groupId><artifactId>kaptcha</artifactId><version>0.0.9</version></dependency> 2.配置类 …

企业低成本万能架构

企业软件应用架构层出不穷&#xff08;这里的应用架构是指偏后端服务的软件架构&#xff09;每个企业由各自业务形态&#xff0c;技术栈&#xff0c;技术路线&#xff0c;技术实力不同&#xff0c;各自架构方案&#xff0c;技术选型各有各的不同&#xff0c;千姿百态&#xff0…

深浅拷贝区别 以及手写深拷贝

一、概念 浅拷贝只复制指向某个对象的指针&#xff0c;而不复制对象本身&#xff0c;新旧对象还是共享同一块内存。但深拷贝会另外创造一个一模一样的对象&#xff0c;新对象跟原对象不共享内存&#xff0c;修改新对象不会改到原对象。 二、浅拷贝的实现方式 Object.assign()…

读书:《科学营销》

关键8个字 识别、创造、沟通、交付。 识别&#xff1a;识别客户的需求。 创造&#xff1a;创造一个产品或服务&#xff0c;满足用户的需求。 沟通或传播&#xff1a;你还得说出来&#xff0c;否则别人是不知道的。 交付&#xff1a;给客户带来价值。 营销的本质 吸引顾客…

ArrayMap源码解析

一、数据结构 ArrayMap是一个key-value的数据结构&#xff0c;它比HashMap有更高的内存效率 它映射到两个数组结构&#xff1a;一个整数数组mHashes&#xff0c;用来保存key的hashcode&#xff1b;一个对象数组mArray&#xff0c;保存key-value 它不适用于大量数据的存储&…

关于在使用Word写论文时如何引用其它论文的方法

目录 步骤1步骤2 步骤1 全选需要进行标注的论文标题&#xff0c;然后按照下面的图片演示步骤进行操作。 步骤2 注意&#xff1a;如果没看到&#xff0c;拖动一下窗口的滚条&#xff0c;应该在下面一点。然后就是在论文引用的位置&#xff0c;依次进行插入就行了。

DevOps系列文章 之 Java使用jgit管理git仓库

最近设计基于gitops新的CICD方案,需要通过java读写git仓库&#xff0c;这里简单记录下。 在jgit中&#xff0c;存在最核心的三个组件&#xff1a;Git类&#xff0c;Repository类。Git类中包含了push commit之类的常见git操作&#xff0c;而Repository则实现了仓库的初始化和基…

查看自己所有的工程提交次数

git branch -r --contains [ hash index] 远程仓库是否包含当前的提交 我写的注释什么的很少出现 日期的英文, 所以很好统计 #!/bin/bashCOUNTS0 DATE$(date | awk {print $2}) DIRS$(ls) CHECK_URLgit10.0.128.128:sw/ INDEX0 TODAY$(date | awk {printf "%s %s %s"…

Nginx代理nginx.conf配置——反向代理(对WebSocket支持)

一、需求说明 基于Nginx代理nginx.conf配置——反向代理&#xff0c;如果要添加websocket支持&#xff0c;需要进行如下配置 二、配置内容 在http中添加一下配置&#xff0c;添加对websocket支持 http {# 配置其它内容map $http_upgrade $connection_upgrade {default upgra…

国赛试题解析1:SW3模拟办事处与防火墙之间运行OSPFv2协议

试题内容:(4)SW3模拟办事处产品和营销接口配置为loopback,模拟接口up。SW3模拟办事处与FW2之间运行OSPFv2协议,进程2,区域2,SW3模拟办事处发布loopback2、产品和营销。 SW3模拟 办事处 loopback2 10.1.3.2/32 2001:10:1:3::2/128 vlan110(产品) 10.1.110.1/24

【教学类-36-07】对称蝴蝶(midjounery-niji)(涂色、裁剪、游戏(飞舞的蝴蝶))

作品展示 一、利用midjounery获得简笔画样式的“蝴蝶” Animal Mask , simple stroke, cartoon, black and white outline, uncolored NIJI 5 二、图片切割 用以下代码把上面文件夹里所有的2048*2048的单张图片切割程2*2 # 参考网址&#xff1a;https://blog.csdn.net/weixi…

2023年计算机科学与信息技术国际会议(ECCSIT 2023) | Ei Scopus双检索

会议简介 Brief Introduction 2023年计算机科学与信息技术国际会议(ECCSIT 2023) 会议时间&#xff1a;2023年12月15日-17日 召开地点&#xff1a;中国北海 大会官网&#xff1a;www.eccsit.org 2023年计算机科学与信息技术国际会议(ECCSIT 2023)由西南交通大学、西南财经大学、…

使用easyexcel出现的错误

说明&#xff1a;easyexcel&#xff08;官网&#xff1a;https://easyexcel.opensource.alibaba.com/&#xff09;是阿里巴巴提供的&#xff0c;用于项目中读取/导出excel文件的工具&#xff0c;本文介绍使用easyexcel常见的两种错误。 错误一&#xff1a;java.lang.NoSuchMet…

代谢组学分析 PCA PLS-DA OPLS-DA 在R语言中的实现

主成分分析&#xff08;Principal Component Analysis&#xff0c;PCA&#xff09;是一种无监督降维方法&#xff0c;能够有效对高维数据进行处理。但PCA对相关性较小的变量不敏感&#xff0c;而PLS-DA&#xff08;Partial Least Squares-Discriminant Analysis&#xff0c;偏最…