【ASPLOS 2023】图神经网络统一图算子抽象uGrapher,大幅提高计算性能

作者:周杨杰、沈雯婷

开篇

近日,阿里云机器学习平台PAI和上海交通大学冷静文老师团队合作的论文《图神经网络统一图算子抽象uGrapher》被ASPLOS 2023录取。

为了解决当前图神经网络中框架中不同的图算子在不同图数据上静态kernel的性能问题,uGrapher通过将所有图算子抽象为统一的中间表达形式,解耦图算子的计算和调度,并定义了在GPU上优化图算子的设计空间,以针动态变化的图算子和图数据自适应的生成并行执行策略,为图神经网络中的图算子提供高性能的计算支持。对比DGL [1], PyG[2], GNNAdvisor[3],uGrapher平均可以取得3.5倍的性能提升。

背景

近年来,图神经网络(Graph Neural Networks, GNNs)因其在非欧几里德空间中对图结构进行学习和推断的强大能力而受到学术界和产业界的广泛关注。GNNs将基于DNN的特征变换和基于图的操作结合起来,沿着图结构传播和聚合信息。现有的GNN框架如DGL和PyTorch-Geometric(PyG)扩展了DNN 框架(如TensorFlow 和PyTorch),并引入了“消息”这一概念,它是与每个边相关联的特征向量的中间值。对于图 G = ( V , E ) G=(V,E) G=(V,E)上的任何操作,可以根据数据的属性和数据移动的方向分为三个阶段,即消息创建、消息聚合和特征更新,公式化如下图:

image.png

其中, u u u v v v是顶点索引, e e e u u u v v v之间的边索引; h v h_v hv是顶点 v v v的特征向量, m e m_e me是边 e e e上的消息。

uGrapher将需要遍历输入图结构的操作符定义为图算子。图算子包括“消息创建”、“消息聚合”和“融合聚合”三类。其中,“融合聚合”是指当“消息创建”是一个简单的复制操作时,它可以与“消息聚合”融合在一起,以避免冗余访问,DGL和PyG采用了这种融合优化。

以GAT模型为例,它包含几个具有不同计算模式的图操作符。第一个“消息创建”操作非常轻量级,它将每个边的源顶点和目标顶点的特征相加作为消息以计算注意力权重;第二个“融合聚合”操作首先从源顶点复制特征,然后逐边乘注意力权重,最后将变换后的边上的消息聚合为顶点的新特征。第二个操作比第一个操作更加计算密集。

由于图结构引起的不规则内存行为,再加上这些图算子中复杂的算术计算,图神经网络中图算子的高性能计算成为重要挑战。

现有的图神经网络框架依靠手写静态kernel来实现图算子的计算。然而,随着图神经网络算法演进,图算子的可变性和复杂性不断增加,其计算也变得更加复杂;同时,不同分布的图数据作为输入也给图神经网络的计算带来了特有的复杂性,这导致静态算子难以维持较好的性能。因此,本文探索了如何在变化的图数据和图模型上进行图算子的计算优化。

挑战

(1)图神经网络引入了图算子的复杂性和图数据的变化性两大特征,导致了图算子计算优化上的难题。

下表根据输入和输出数据类型将DGL支持的160个图操作符进行了分类。即使具有相同的输入或者输出数据类型,图算子也可以执行不同的计算模式。图算子的复杂性导致很难找到静态的方式为所有图算子的计算操作提供高性能支持。

image.png

真实世界中的图数据集有很大的差异。图的规模,即顶点和边的数量,图的平衡程度,即邻接矩阵行的非零值的标准差,以及特征和类大小,这些属性在不同的图之间有显著的差异。而这些差异影响了图算子的内存使用和计算复杂性。

(2)由于缺乏系统优化方法,现有GNN框架使用的底层CUDA kernel存在低效和缺乏灵活性的问题。

DGL 在支持上文中的消息传递编程接口时调用静态CUDA kernel,这些静态kernel不能适应变化的计算场景。比如,在执行不平衡图时,GPU 的低占用率导致了硬件资源的浪费。当执行小图时,GPU 性能通常受到并行性的限制,而执行大图时,由于低局部性,访问带宽成为瓶颈。同时,这些指标在不同图算子之间也会有所差异。

image.png

破局

uGrapher使用嵌套循环作为图算子的调度表达,并允许用户定制输入张量和不同阶段的函数操作来表示不同的图算子运算。

下图为面向图神经网络中的图算子统一的抽象细节。

image.png

edge_op实现了边上的访存和计算的函数表示,而gather_op实现了边到顶点的合并函数表示。另外还有三个输入张量,可以为源顶点嵌入张量(Src_V),目的地顶点嵌入张量(Dst_V),边嵌入张量(Edge),以及NULL的任意一种。 张量的数据类型还确定了循环计算中不同的寻址模式(第10 至12 行)。

下面的公式正式定义了uGrapher的统一抽象,其中, ψ \psi ψ是edge_op 函数, ρ \rho ρ是gather_op 函数。该抽象捕捉了图算子的完整语义,包括其计算和内存移动模式。

image.png

根据图算子统一的抽象,uGrapher构建了算子优化的设计空间,以实现高性能的图算子执行。

uGrapher使用局部性、并行性和工作效率来描述GPU上图算子性能的指标。对嵌套循环应用tiling 或者blocking 技术可以提高图算子的局部性;通过启动更多的线程、warp 或线程块可以提高图算子的并行性;工作效率用额外开销的倒数表示,同一运算符的不同执行策略可能会引入额外的计算,例如地址计算等,共享顶点的边并行计算可能需要原子指令。

现有图处理系统中有两种经典并行化策略:线程-顶点和线程-边并行。前者降低了并行性,但提高了输出数据的重用性和局部性。后者降低了工作效率,因为可能需要原子更新操作。

由于GNN 中的顶点/边特征是向量,GNN增加了特征维度的并行化策略,为warp-顶点和warp-边,相对线程-顶点/边策略,可以启动更多的warp,从而增加并行性。然而,由于每个warp 的缓存容量减少,这个策略也会损害局部性。

因此,没有一种单一的策略可以同时提高这三个指标,uGrapher通过上述统一的IR表达,设计了统一的高性能计算接口,来探索优化空间,进行性能的权衡。整体架构如下图所示。

image.png

uGrapher提供的图算子统一高性能计算接口设计如下图所示。

image.png

uGrapher 接口包含三个参数:graph_tensor,表示图数据;op_info,用于传递edge_op、gather_op 和输入张量的计算信息;parallel_info,用于指定并行化策略。

uGrapher 的接口设计将算子计算、图数据和并行化策略分离,使得用户可以通过手动,或者针对不同的算子和图结构提出自己的启发式算法来选择执行策略。同时,当用户未指定任何并行化策略时,uGrapher会利用LightGBM[4]训练决策模型,选择并行化空间中的最优策略来自动调整到最佳并行化策略,以在不同的GPU架构和图数据集上为所有图神经网络中的图算子提供专门和最优的计算调度。uGrapher实现了每种并行化策略的CUDA 内核模板,并为每种图算子保留设备函数接口,并实现了端到端的代码生成,包含了算子合并和设备函数生成,以支持灵活和高效的算在实现。更多的细节请阅读我们ASPLOS 2023的论文。

目前,阿里云正在将uGrapher的关键设计集成进PAI自研的大规模图神经网络框架GraphLearn中,从而为工业级别的图神经网络应用带来性能加速。

PAI长期招聘实习生,如果有对分布式深度学习训练框架、分布式图神经网络训练框架、计算通信优化等感兴趣的同学,欢迎投递简历到邮箱wenting.swt@alibaba-inc.com或baole.abl@alibaba-inc.com

第五板块:

  • 论文标题:

uGrapher: High-Performance Graph Operator Computation via Unified Abstraction for Graph Neural Networks

  • 论文作者:

周杨杰,冷静文,宋曜旭,卢淑文,王勉, 李超,过敏意, 沈雯婷,李永,林伟等

  • 论文pdf链接:

https://dl.acm.org/doi/10.1145/3575693.3575723

  • 参考文献:

[1] M. Wang, D. Zheng, Z. Ye, Q. Gan, M. Li, X. Song, J. Zhou, C. Ma, L. Yu, Y. Gai et al., “Deep graph library: A graph-centric, highly-performant package for graph neural networks,” arXiv preprint arXiv:1909.01315, 2019.

[2] M. Fey and J. E. Lenssen, “Fast graph representation learning with pytorch geometric,” arXiv preprint arXiv:1903.02428, 2019.

[3] Y. Wang, B. Feng, G. Li, S. Li, L. Deng, Y. Xie, and Y. Ding, “GNNAdvisor: An adaptive and efficient runtime system for GNN acceleration on GPUs,” in 15th USENIX Symposium on Operating Systems Design and Implementation (OSDI 21), 2021, pp. 515–531.

[4] Guolin Ke, Qi Meng, Thomas Finley, Taifeng Wang, Wei Chen, Weidong Ma, Qiwei Ye, and Tie-Yan Liu. 2017. Lightgbm: A highly efficient gradient boosting decision tree. Advances in neural information processing systems 30 (2017).

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【前沿技术】文心一言 PK Chat Gpt

目录 写在前面 一、文心一言 二、Chat GPT 三、对比 四、总结 写在前面 随着人工智能技术的不断发展和普及,越来越多的智能应用走入了人们的日常生活,如智能语音助手、智能客服、机器翻译等等。在这些应用中,自然语言生成(…

看完不再愁 | 图解TCP 重传、滑动窗口、流量控制、拥塞控制

目录 前言 正文 🌲 重传机制 1. 超时重传 2. 快速重传 3. SACK 方法 4. Duplicate SACK 🌲 滑动窗口 🌳 流量控制 🌳 拥塞控制 1. 慢启动 2. 拥塞避免算法 3. 拥塞发生 4. 快速恢复 前言 前面我们讲到「硬不硬你说…

Android开发一直在用大公司的开源库,可参考~

一、阿里巴巴 (一)UI有关 1. 多页面切换场景统一解决方案 UltraViewPager UltraViewPager 是阿里开源的一个封装多种特性的 ViewPager ,主要是为多页面切换场景提供统一解决方案。 主要功能: 1. 支持横向滑动/纵向滑动2. 支持一屏…

求红白黑球的个数-课后程序(JavaScript前端开发案例教程-黑马程序员编著-第2章-课后作业)

【案例2-11】求红白黑球的个数 一、案例描述 考核知识点 for循环语句、if判断语句 练习目标 掌握for循环应用。掌握if判断语句应用 需求分析 用js编程 已知:红白球共25个,白黑球共31个,红黑球共28个,求三种球各有多少&#xff…

基于STM32 SG90 9g舵机控制

文章目录一、什么是舵机?二、工作原理三、利用PWM控制四、stm32舵机控制一、什么是舵机? 产品参数 名称:9克舵机180度 尺寸:23mm X 12.2mm X 29mm 重量:9克 扭矩:1.5kg/cm 工作电压:4.2 - 6V 温…

Java大数字运算(BigInteger类和BigDecimal类)

在 Java 中提供了用于大数字运算的类,即 java.math.BigInteger 类和 java.math.BigDecimal 类。这两个类用于高精度计算,其中 BigInteger 类是针对整型大数字的处理类,而 BigDecimal 类是针对大小数的处理类。 BigInteger 类 如果要存储比 …

一本通 3.3.1 树与二叉树

树与二叉树的基本知识 1336&#xff1a;【例3-1】找树根和孩子 【题目描述】 给定一棵树&#xff0c;输出树的根root&#xff0c;孩子最多的结点max以及他的孩子。 【题目分析】 【代码实现】 #include<bits/stdc.h> using namespace std; int father[201], sum[101]…

8.OSP的GR(Graceful Restart,平滑重启)实验

一、GR(Graceful Restart,平滑重启) 技术介绍 GR(Graceful Restart,平滑重启)技术保证了设备在重启过程中转发层面能够继续指导数据的转发,同时控制层面邻居关系的重建以及路由计算等动作不会影响转发层面的功能,从而避免了路由振荡引发的业务中断,保证了关键业务的数…

Java_Spring:5. 基于注解的 IOC 配置

目录 1 环境搭建 1.1 第一步&#xff1a;拷贝必备 jar 包到工程的 lib 目录。 1.2 第二步&#xff1a;使用Component 注解配置管理的资源 1.3 第三步&#xff1a;创建 spring 的 xml 配置文件并开启对注解的支持 2 常用注解 2.1 用于创建对象的注解 2.1.1 Component 2.1…

【MySQL高级篇】第09章_性能分析工具的使用

第09章_性能分析工具的使用 在数据库调优中&#xff0c;我们的目标是 响应时间更快, 吞吐量更大 。利用宏观的监控工具和微观的日志分析可以帮我们快速找到调优的思路和方式。 1. 数据库服务器的优化步骤 当我们遇到数据库调优问题的时候&#xff0c;该如何思考呢&#xff1…

在vue项目中使用echarts(echarts不显示,echarts使用详细)

简述&#xff1a;我们在写大屏项目和vue项目时经常会用到echarts&#xff0c;用于数据统计和可视化&#xff0c;它是一款基于JavaScript的数据可视化图表库&#xff0c;提供直观&#xff0c;生动&#xff0c;可交互&#xff0c;可个性化定制的数据可视化图表&#xff0c;下面分…

【IAR工程】STM8S208RB基于ST标准库蜂鸣器(BEEP)驱动

【IAR工程】STM8S208RB基于ST标准库蜂鸣器(BEEP)驱动&#x1f33e;寄存器版本《STM8S系列基于IAR开发&#xff1a;蜂鸣器&#xff08;BEEP&#xff09;驱动功能模块示例》&#x1f33f;相关篇《【IAR工程】STM8S208RB基于ST标准库下GPIO点灯示例》&#x1f33f;《【IAR工程】ST…

总结803

早上&#xff1a; 6:44起床 7:00~7:04开合跳100 7:09~8:00小湖读英语 8:00~9&#xff1a;30句句真研 9&#xff1a;40~10:00去教室 10:03~10:15阅读《运动改造大脑》 10:15~12:00上课 12:00~12:20背单词 12:23~12:50吃饭 1:00~2:10午觉 2:30~5:00核聚课程一篇考研英…

HashMap, HashTable, ConcurrentHashMap 之间的区别

目录关于线程安全HashTable 和 ConcurrentHashMap 的区别1. 加锁粒度不同(最关键 最核心的区别!!!)2. ConcurrentHashMap 利用了 CAS 机制 (无锁编程)3. 优化了扩容策略关于线程安全 我们知道 HashMap 是线程不安全的. 如果要在多线程环境下使用哈希表, 则可以使用:HashTable …

深度学习语义分割篇——FCN原理详解篇

&#x1f34a;作者简介&#xff1a;秃头小苏&#xff0c;致力于用最通俗的语言描述问题 &#x1f34a;往期回顾&#xff1a;目标检测系列——开山之作RCNN原理详解    目标检测系列——Fast R-CNN原理详解    目标检测系列——Faster R-CNN原理详解 &#x1f34a;近期目标&…

说微软翻译比谷歌准,有人不信,就拿雾霾造了个句子

导读近年来&#xff0c;谷歌(微博)、微软、亚马逊和Facebook等硅谷巨头在人工智能&#xff08;AI&#xff09;领域进行着军备竞赛。在应用层面&#xff0c;有的开发智能管家、有的做机器人、有的训练AI治疗疾病。谷歌和微软则在翻译领域较上了劲。 长久以来&#xff0c;谷歌翻译…

Redis Stream消息并发和未ack消息处理

文章目录1. RedisStreamConfig2. 消费者MyMessageListener3. RedisStreamUtil4. RedisStreamConstant5. 测试6. 处理消费者已读取未ack的消息redis stream文档参考 https://zhuanlan.zhihu.com/p/60501638 1. RedisStreamConfig package com.tophant.eventdemo.common.config…

CSS3笔试题精讲1

防止父元素高度坍塌 4种方案 父元素的高度都是由内部未浮动子元素的高度撑起的。 如果子元素浮动起来,就不占用普通文档流的位置。父元素高度就会失去支撑,也称为高度坍塌。 即使有部分元素留在普通文档流布局中支撑着父元素,如果浮动 起来的元素高度高于留下的素。那么浮…

MySQL日志管理、备份与恢复

文章目录一.MySQL 日志管理1、错误日志2、通用查询日志3、二进制日志4、慢查询日志5、查看日志6、实例操作二、数据库备份的重要性与分类1、数据备份的重要性2、从物理与逻辑的角度&#xff0c;备份分为&#xff1a;3、从数据库的备份策略角度&#xff0c;备份可分为&#xff1…

Spring Cloud Sentinel实战(四)-流控规则-关联、预热、排队等待

流控规则-关联 名词解释 资源名&#xff1a;唯一名称&#xff0c;默认请求路径针对来源&#xff1a;Sentinel可以针对调用者进行限流&#xff0c;填写微服务名&#xff0c;默认default&#xff08;不区分来源&#xff09;阈值类型/单机阈值&#xff1a; QPS&#xff08;每秒钟…