阿里云PAIx达摩院GraphScope开源基于PyTorch的GPU加速分布式GNN框架

news2024/11/23 15:07:35

作者:艾宝乐

导读

近期阿里云机器学习平台 PAI 团队和达摩院 GraphScope 团队联合推出了面向 PyTorch 的 GPU 加速分布式 GNN 框架 GraphLearn-for-PyTorch(GLT) 。GLT 利用 GPU 的强大并行计算性能来加速图采样,并利用 UVA 来减少顶点和边特征的转换和拷贝。对于大规模图,GLT 使用了生产者-消费者的架构,通过异步并发的分布式采样和特征查找以及热点缓存功能支持在多个 GPU 或多个机器上进行高效的分布式训练。接口上,GLT 保持了 PyTorch的风格,并且和 PyG 兼容,只需少量代码修改就可以加速 PyG 的单机训练程序,或者将 PyG 单机模型改成分布式训练。此外,GLT 还提供了灵活的分布式训练部署以满足不同的需求。

开源地址:https://github.com/alibaba/graphlearn-for-pytorch

文档地址:https://graphlearn-torch.readthedocs.io/en/latest/index.html

背景介绍

图神经网络作为一种图数据上表示学习的方法已经被广泛应用在图相关的各个领域,在电商推荐、安全风控、生物分子等领域取得了实际落地。图神经网络由于其独特的数据处理逻辑和神经网络计算逻辑,需要有专门的学习框架来支持训练。PAI团队之前开源了大规模工业级分布式图学习框架 GraphLearn(https://github.com/alibaba/graph-learn)。GraphLearn 以 TensorFlow 1.x 系列为主,采用 ps 架构的异步训练模式,支持十亿节点,百亿边规模的大规模异构图分布式训练,应用于阿里内外部若干业务场景。随着PyTorch 的流行,其更加灵活的贴近 Python 的接口,简单易调试等特性使得算法开发者更倾向于使用 PyTorch 开发模型。DGL 和 PyG等基于PyTorch的开源GNN框架以单机为主,无法支持大规模图的分布式训练。

此外,由于 GPU 并行计算的优势,图神经网络使用 GPU 训练比 CPU 训练有数倍的提升。然而常见的图神经网络框架将图拓扑数据和特征存在内存里,使用CPU进行采样和特征查找并将数据拷贝到GPU进行神经网络训练,这个过程中图采样和特征查找部分很容易成为整体训练的瓶颈。下面我们以大规模图上典型的训练流程为例对训练过程的性能瓶颈进行分析说明。

一个典型的GNN训练流程[1] 包括:

  1. 子图拓扑采样,采样多跳邻居并组成子图;
  2. 查询子图里节点或者边的特征;
  3. 将子图格式转换成神经网络训练需要的格式并且拷贝到GPU显存中;
  4. 对原始特征进行处理,比如离散特征进行embedding lookup;
  5. 邻居聚合;
  6. 节点更新。

其中,3和4为可选步骤。常见的 GNN 模型神经网络参数相对来说比较小,因此计算量也比较小,瓶颈通常在1-4步,具体来说主要是I/O操作,包括通信,数据拷贝和格式转换。这导致即使使用GPU进行训练,GPU的资源利用率也很低,整体吞吐以及扩展性很难提高。

综上所述,我们需要一个高效的基于PyTorch 的分布式 GNN 训练框架,能够充分利用 GPU 等硬件资源,能够基于图的数据分布性质,结合不同算法模型和并行策略做相应优化,减少通信和数据转换耗时,提升整体吞吐。

关键设计

设计初期,我们和 Quiver[2] 团队合作针对 GPU 采样的可行性进行了初步探索,发现 GPU 采样相比 CPU 能够带来数量级的提升。此外,为了减少特征在 CPU 内存和 GPU 显存之间的拷贝开销,特征可以直接存储在 GPU 显存里。然而对于规模比较大的数据来说,显存无法存储所有特征数据,因此我们用 UVA 技术来进行特征的存储,相比直接内存存储也有数量级的性能提升。工业界的图规模很容易突破单机的极限,因此我们进一步设计了分布式训练框架。具体来说,我们使用生产者-消费者范式来处理分布式图采样和特征查找以及模型训练的关系,将图采样、特征查找与训练进行解耦,使用多进程并行和协程异步并发来加速采样和特征查找,并使用预取和热点缓存的方式进一步减少训练端的等待,提升端到端吞吐。考虑到用户迁移成本和易用性,在接口上我们保持了和 PyG 的兼容,只需少量改动 PyG 代码就可以加速 PyG 的训练,或者将其迁移到 GLT 的分布式训练上。以下为我们具体阐述几个关键的设计点。

GPU采样

GLT 将图拓扑使用 CSR 格式存储在 GPU 显存或者 pin memory里,实现了 CUDA 采样算子来进行 GPU 并行采样。使用 CSR 存储可以很容易得到每个节点的邻居,并且独立对每个节点进行采样,因此可以方便地利用 GPU 多线程进行并行采样。我们使用了蓄水池算法来进行无放回随机采样。在batch size大的情况下,GPU 比 CPU 采样能有数量级的提升。

UnifiedTensor

为了消除CPU 内存到 GPU 显存的拷贝开销,一个比较直观的方法是将特征存放在 GPU 显存里,然而由于单卡的显存有限,在特征数据比较大的情况下也很难完全把特征存到显存里。因此,在GLT中我们利用图自身的特性如power law分布和采样访问特性如有些度比较高的节点被访问的概率高,将部分热点特征存放在 GPU 显存里,其他特征存在内存,同时需要利用 UVA 让 GPU 访问内存里的特征。GLT 设计了 UnifiedTensor 将 CUDA Tensor 和 CPU Tensor 统一管理起来,以提供简洁高效的数据访问。进一步,如果 GPU 之间可以直接进行 peer2peer 访问(具有NVLink),这些 GPU 的显存也可以被统一管理,从而扩大特征在显存的存储。GLT 使用UnifiedTensor 将这些不同硬件设备上的存储统一管理起来,提供直接访问 CUDA Tensor,通过 NVLink 访问其他 GPU 上的 CUDA Tensor,并通过 UVA 进行 ZERO-COPY 访问 CPU Tensor的能力,上层查找元素接口就像普通 Tensor 一样,底层会自动去对应的设备上进行访存操作。

1.jpg

Feature

Feature 由 UnifiedTensor 构成,具有硬件拓扑感知功能。具体来说,首先,按照用户指定 CPU/GPU 内存大小,对特征进行划分,分为 GPU(hot) 部分和 CPU(cold) 部分。其次,对 GPU 部分,根据用户指定的 replica 策略,进行 replica,包括每个卡 replica 和每个 NVLink 连接的 GPU group 之间的 replica。GPU group replica 的方式,相比卡间 replica, 可以有更多的 hot data 存在 GPU 上,因为 GPU group 里 GPU 之间都是可以 p2p 访问的。实现上GLT抽象出 DeviceGroup 来统一表示卡间 replica 和组间 replica。一个 DeviceGroup 表示一组 NVLink 连接的 GPUs。假设8卡没有 NVLink,那么会对应8个 DeviceGroup,如果 GPU 0-3 两两 NVLink 连接,GPU 4-7 两两 NVLink 连接,那么 GPU 0-3 为一组 DeviceGroup, GPU 4-7 为一组 DeviceGroup。实际测试中,使用UnifiedTensor 的Feature性能比 CPU Tensor的查找(包括拷贝到GPU) 快1个数量级,而且可以通过控制 GPU 存储部分的比例来灵活达到速度和显存占用的平衡。

2.jpg

3.jpg

分布式设计

GLT分布式GNN训练主要分成:分布式采样,特征查找, 模型训练3部分。一次采样的结果一般比较小(最大为十几MB),特征查找的结果比较大(百MB),训练时使用特征查找的结果进行神经网络计算。对特征查找来说需要考虑减少和训练任务之间的数据转换和拷贝。采样和训练之间是典型的生产者和消费者关系,因此可以分成不同任务,通过缓冲区连接,平衡生产者和消费者的处理能力,起到一个数据缓存的作用,同时也达到了一个解耦的作用。基于生产者-消费者方式,GLT的分布式训练有两种基本类型的进程:采样进程和训练进程。

采样进程:负责分布式邻居采样和特征收集。采样结果将被发送到采样消息通道,该通道将进一步用于训练任务。

训练进程:对应于PyTorch DDP的分布式训练进程,通常,每个训练进程将占用一个GPU进行训练。

这些进程可以灵活地分布在不同的机器上,为了更好地管理分布式进程部署,GLT的分布式训练提供了两种参考部署模式:Worker 模式和 Server-Client 模式。

Worker模式里,数据切分后,每个机器持有一个分片,采样进程和训练进程一起部署在这些机器上。每个训练进程可以spawn出多个采样子进程,采样进程通过一个共享内存的消息通道将采样结果传递给训练进程。对于采样进程来说,可以使用多进程进行采样,并且每个分布式采样算子都使用Python协程来并发执行,将结果放到消息通道里。为了减少消息通道到训练进程 GPU 的拷贝耗时,消息通道也可以放到pin memory上。

4.jpg

Server-Client模式下,集群中存在两种类型的机器节点,即 Server 节点和 Client 节点。采样进程部署在 Server 节点,训练进程分布在所有 Client 节点上。采样进程生成的样本结果将通过一个RPC实现的远程消息通道发送到当前训练进程进行训练。Server-Client 模式可以将采样和训练不同 workload 的任务放到不同机器,进行资源上的解耦。

5.jpg

总体架构

6.jpg

GLT 的主要目标是充分利用 GPU/NVLink/RDMA 等硬件资源和 GNN 模型的特性,加速单机和分布式环境下的端到端 GNN 训练。

存储:在 GPU 训练场景,图采样和 CPU-GPU 数据传输很容易成为主要性能瓶颈。为了加速图采样和特征查找,GLT 实现了 UnifiedTensor 统一 CPU 和 GPU 的内存管理。为了减少特征收集引起的 CPU-GPU 数据传输开销,GLT 支持将热点特征缓存在 GPU 显存中,并通过 UVA 访问其余特征数据。我们还利用高速 NVLink 在GPU 之间扩展 GPU 缓存的容量。

图操作算子:存储之上,GLT 实现了包括邻居采样、负采样、特征查找、子图采样等同时支持 CPU 和 GPU 图操作算子。

分布式算子:对于分布式训练,为防止远程数据访问阻塞模型训练进程,GLT 在 PyTorch RPC 之上封装了一个高效的 RPC 框架,并采用多进程并行和异步并发的图采样和特征查找操作来隐藏网络延迟并提高端到端训练吞吐量。

接口:为了降低 PyG 用户的学习成本,GLT 的上层 API,如Sampler, DatasetLoader,接口上都与PyG兼容。因此,PyG 用户只需修改很少的代码即可充分利用 GLT 的加速能力。

模型:由于 GLT 与 PyG 兼容,你可以使用几乎任何 PyG 的模型作为基础模型,此外我们也提供了丰富的分布式训练示例。

系统性能

我们在一台配备A100 GPU的机器进行单机扩展性测试,测试环境为 CUDA 11.4、PyTorch 1.12 和 GLT 0.2.0rc2,下图展示了邻居采样和特征查找的总吞吐量。可以看出 GLT 有线性的扩展性(由于有NVLink,多卡的缓存容量更多,因此会存在超线性加速)。

7.jpg

此外,我们还测试了多机的分布式采样和特征查找的扩展性。下图展示了每个机器配备2个A100 GPU的环境下,2个机器和4个机器相比单个机器的吞吐量加速比。测试使用 CUDA11.4、PyTorch 1.12和 GLT 0.2.0rc2 进行。可以看出,2机到4机也有近线性的扩展性。

8.jpg

最后,我们测试了分布式e2e的性能。我们在2机每机2卡A100的设置下和DGL做了初步对比(DGL版本0.9.1,GLT版本0.2.0).

9.jpg

结语

本文介绍了基于PyTorch的GPU加速分布式GNN框架GraphLearn-for-PyTorch(GLT),GLT提供了分布式 GPU 训练的优化加速能力,能够充分利用 GPU 等硬件资源进行图采样和特征查找等操作,具有线性扩展性。上层接口上和 PyG 兼容,可以很容易地加速 PyG 已有模型或者将已有模型改成分布式版本。GLT 已经开源并且在PyG, GraphScope中都有示例,后面我们会持续开发优化,欢迎使用和贡献!

[1] P3: Distributed Deep Graph Learning at Scale

[2] Quiver: Supporting GPUs for Low-Latency, High-Throughput GNN Serving with Workload Awareness

免费领取 交互式建模PAI-DSW、模型训练PAI-DLC 5000CU*H计算资源包,以及价值500元模型在线服务 PAI-EAS 抵扣包。

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

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

相关文章

Spring Security Oauth2.1 最新版 1.1.0 整合 gateway 完成授权认证(拥抱 springboot 3.1)

目录 背景 版本 Spring Boot 3.1 Spring Authorization Server 1.1.0官方文档 基础 spring security OAuth2.0 模块构成 授权方式 集成过程 官方demo 代码集成 依赖 授权服务AuthorizationServerConfig配置 重要组件 测试 查看授权服务配置 访问授权服务 授…

AB32VG1:SDK_AB53XX_V061(5)蓝牙BLE测试笔记

文章目录 1.配置工程,重新编译1.1替换链接库libbtstack_dm.a1.2 《config.h》打开编译开关1.3 在 Downloader 里面打开 BLE 开关 2.ABLink(手机APP)控制2.1 app下载2.2 安装后打开,搜索蓝牙Bluetrum:2.3 操作存储卡 3.…

深度学习应用篇-元学习[14]:基于优化的元学习-MAML模型、LEO模型、Reptile模型

【深度学习入门到进阶】必看系列,含激活函数、优化策略、损失函数、模型调优、归一化算法、卷积模型、序列模型、预训练模型、对抗神经网络等 专栏详细介绍:【深度学习入门到进阶】必看系列,含激活函数、优化策略、损失函数、模型调优、归一化…

华为认证 | HCIP-Datacom-Core 考试大纲

01 考试概况 02 考试内容 HCIP-Datacom-Core Technology V1.0考试覆盖数据通信领域各场景通用核心知识,包括路由基础、OSPF、 IS-IS、BGP、路由和流量控制、以太网交换技术、组播、IPv6、网络安全、网络可靠性、网络服务与管理、 WLAN、网络解决方案。 ★路由基础 …

【MySQL 函数】:一文彻底搞懂 MySQL 函数(一)

前言 ✨欢迎来到小K的MySQL专栏,本节将为大家带来MySQL字符串函数和数学函数的讲解✨ 目录 前言一、字符串函数二、数学函数三、总结 一、字符串函数 函数作用UPPER(列|字符串)将字符串每个字符转为大写LOWER(列|字符串)将字符串每个字符转为小写CONCAT(str1,str2,…

阿里云企业邮箱购买流程

阿里云企业邮箱购买流程,企业邮箱分为免费版、标准版、集团版和尊享版,阿里云百科分享企业邮箱版本区别,企业邮箱收费标准价格表,以及阿里企业邮箱详细购买流程: 目录 阿里云企业邮箱购买流程 一、阿里云账号注册及…

OpenAI 刚刚宣布了海量更新

OpenAI 刚刚宣布了海量更新,增加函数调用,支持更长上下文,价格更低! ​新模型上架 1、gpt-4-0613 2、gpt-4-32k-0613 3、gpt-3.5-turbo-0613 4、gpt-3.5-turbo-16k 部分模型降价 1、text-embedding-ada-002:$0.00…

DevExpress WinForms功能区组件,让业务应用创建更轻松!(上)

DevExpress WinForms的Ribbon(功能区)组件灵感来自于Microsoft Office,并针对WinForms开发人员进行了优化,它可以帮助开发者轻松地模拟当今最流行的商业生产应用程序。 PS:DevExpress WinForm拥有180组件和UI库&#…

Linux安装SQLServer数据库

Linux安装SQLServer数据库 文章目录 Linux安装SQLServer数据库SQLServer是什么SQLServer的安装安装要求安装步骤安装配置安装命令行工具 SQLServer是什么 美国 Microsoft 公司推出的一种关系型数据库系统。SQL Server 是一个可扩展的、高性能的、为分布式客户机/服务器计算所设…

[PostgreSQL-16新特性之EXPLAIN的GENERIC_PLAN选项]

随着PostgreSQL-16beta1版本的发布,我们可以发现,对于我们时常使用的explain增加了一个GENERIC_PLAN选项。这个选项是允许了包含参数占位符的语句,如select * from tab01 where id$1;等等这种语句,让其生成不依赖于这些参数值的通…

两个HC-05蓝牙之间的配对

两个HC-05蓝牙之间的配对 文章目录 两个HC-05蓝牙之间的配对1.进入AT指令模式后,先确定是否为AT模式:2.获取模块A,B的地址3.将蓝牙A配置为主模式,将蓝牙B配置为从模式:4.设置模块通信波特率,蓝牙模块A和B的配置需要相同6.验证 买了…

目标检测数据集---玻璃瓶盖工业缺陷数据集

✨✨✨✨✨✨目标检测数据集✨✨✨✨✨✨ 本专栏提供各种场景的数据集,主要聚焦:工业缺陷检测数据集、小目标数据集、遥感数据集、红外小目标数据集,该专栏的数据集会在多个专栏进行验证,在多个数据集进行验证mAP涨点明显,尤其是小目标、遮挡物精度提升明显的数据集会在该…

儿童遗留监测成为「加分项」,多种技术路线「争夺战」一触即发

儿童遗留密闭车内,温度可以在短短15分钟内达到临界水平,从而可能导致中暑和死亡,尤其是当汽车在太阳底下暴晒。 按照Euro NCAP给出的指引,与车祸相比,儿童因车辆中暑而死亡的情况较少,但却是完全可以避免的…

计算机网络开荒4-网络层

文章目录 一、网络层概述1.1 路由转发1.2 建立连接1.3 网络服务类型 二、虚拟电路与数据报网络2.1 虚电路Virtual circuits VC网络2.1.1 VC 实现2.1.1 虚电路信令协议(signaling protocols) 2.2 数据报网络2.3 对比 三、Internet网络的网络层 IP协议3.1 IP分片3.1.1 最大传输单…

中创|数据中心集聚,算力企业环绕,郑州:力争打造中部最强数据中心集群

信息时代,算力就是生产力。从田间到车间、从陆地到天空,算力的应用已经在方方面面“大显身手”。不仅是在存储领域,在具体的应用服务领域,算力也无处不在。 手机支付、网上购物、精准导航、人脸识别……这些人们熟悉的生活场景&a…

如何在telnet连接的情况下下载上传文件

1.下载tftp文件 TFTP下载-TFTP正式版下载[电脑版]-华军软件园 2.选择自己PC机所在的IP 3.telnet登录到设备 4.上传下载 //上传: 从Clinet(设备)上传文件到Server(PC机)时, 使用下面的命令 tftp –p –…

cesium学习笔记

cesium入门笔记 一、下载源码,源码介绍二、html案例体验三、cesium中的类介绍1.它们分别是:2.四大类的完整演示代码: 四、cesium的坐标与转换五、相机系统介绍六、地图、地形的加载七、建筑体添加和使用八、空间数据加载1、加载数据2、对加载…

python中变量与字符串详解!!

❄️作者介绍:奇妙的大歪❄️ 🎀个人名言:但行前路,不负韶华!🎀 🐽个人简介:云计算网络运维专业人员🐽 前言 初学者经常会遇到的困惑是,看书上或者是听课都懂…

数据库:mysqldump用法详解

目录 一、命令格式详解 1.1 语法格式 1.2 常用参数 1.3 完整参数 二、mysqldump常见的几个错误 2.1、提示命令未找到 -bash: mysqldump: 未找到命令 2.2、 the command line interface can be insecure 2.3、Gotpacket bigger than ‘max_allowed_packet‘ bytes 一、命令格式详…

GPT-4官方使用经验都在里面;Stability AI联合Clipdrop推出一键改变图像比例

🦉 AI新闻 🚀 Stability AI联合Clipdrop推出扩图工具Uncrop,一键改变图像比例 摘要:Stability AI联合Clipdrop推出的Uncrop Clipdrop是一个终极图像比例编辑器。它可以补充任何现有照片或图像,来更改任何图像的比例。…