马上注册,结交更多好友,享用更多功能,让你轻松玩转社区
您需要 登录 才可以下载或查看,没有账号?立即注册
×
GPU作为数据存储引擎GPUs as Data Access EnginesNVIDIA Aug 8, 2024
摘要: 本文围绕GPU作为数据访问引擎展开,指出随着数据集规模扩大,传统内存无法容纳海量数据,需通过NVMe存储和新API(如SCADA)实现数据访问。SCADA通过GPU直接发起IO请求、缓存聚合减少IO操作、支持数十万GPU线程的高队列深度,解决数据访问瓶颈,提升图神经网络(GNN)等应用的性能(如 BaM 原型使 GNN 训练性能提升 25 倍以上),并强调其低总体拥有成本(TCO)和对细粒度数据访问的支持。此外,文档呼吁存储技术人员、应用开发者等参与社区项目,优化 IOPS 和能效。
如今,GPU不仅是计算核心,更成为数据访问引擎。目前正致力于推动存储行业的这一变革,也邀请大家共同参与。
1、趋势
以规模化数据集为例,试想用于RA(检索增强生成)或GNN(图神经网络)训练的树状边缘图 —— 这类数据量远超单个GPU内存容量,甚至多个节点内存也无法容纳。若无法存入内存,就必须将数据分流到其他存储介质。从总体拥有成本(TCO)来看,NVMe SSD是最佳选择。 然而,传统的加载/存储操作已无法满足这类数据的访问需求,必须设计比简单内存映射文件更精巧的新API—— 这正是目前的研究方向。 当前许多工作负载的瓶颈不仅在于计算,更在于数据访问。我们将通过具体案例说明,为何GPU需要转型为数据访问引擎,且事实证明其在这一领域潜力巨大。 反观传统 CPU,是否能胜任新需求?我们的结论是否定的 ——CPU 在数据访问场景中几乎捉襟见肘,因此需要创新GPU发起存储访问的抽象架构。 此外,键值存储 / 对象存储正逐渐取代文件系统成为主流数据访问方式,这需要定制化 API(而非标准接口)。面对应用难以追踪的海量数据,我们需探索无服务器架构,通过数据集服务与编排机制实现高效管理,后续将深入探讨该架构的具体形态。
2、规模化数据带来的新问题
在规模化数据领域确实出现了一类新问题:海量数据远超传统加载/存储的处理范畴。开发者需要面对一系列难题:如何启动数据、如何移动数据、如何正确初始化数据,以及在数据可能来自远端的大规模场景下如何处理错误 —— 这些都成为沉重的负担。 目前我们有一些抽象工具,例如NVSHMEM,它支持GPU对内存的细粒度访问,本质上是一种网络API。但当数据不一定位于内存(可能存储在磁盘)时,就需要全新的解决方案。我们讨论的数据访问将由GPU发起(当然也兼容 CPU),为此我们引入了一个专业术语:GPUDirect Async Kernel Initiated (KI) Storage。这一技术属于GPUDirect家族,其核心特点是异步化和CPU解耦—— 数据访问的发起者从 CPU 变为 GPU 内核。 适用场景对比: • 若需从 CPU 协调大批量粗粒度访问,可继续使用传统的 GPUDirect Storage(GDS)。 • 若需支持 GPU 线程独立发起的细粒度访问(如树状边缘图遍历),则需要新的 KI 架构。 典型案例: 在图神经网络(GNN)中,每个GPU线程需独立访问节点嵌入数据并决定下一跳节点。此时,数十万线程需要访问超过内存容量的数据,且每个线程的访问模式独立于其他线程和 CPU。这类场景的核心挑战在于:如何通过有限的 PCIe 接口,高效处理海量细粒度请求(粒度远小于传统的 4KB),并将数据传输到外部存储设备。 接下来,我们将探讨如何通过新架构解决这一问题,并分析具体应用场景。
3、新的应用类型催生新编程模型
这些新应用都需要新的编程模型。正如之前所言,GPU 已不仅仅是计算核心,更成为了数据核心。这主要是因为其可处理的数据量呈指数级增长,如今它能够利用数十万GPU线程生成大量细粒度I/O请求,并发起数据传输。 对于超大规模数据集,传统的加载/存储操作已不再适用,需要一种新 API 来支持对无限大小数据的访问。我们的核心观点是:NVMe 存储具有更高的性价比(TCO)。与其依赖 DRAM,不如采用 NVMe—— 通过足够的并行性,可以隐藏访问延迟。此外,我们希望通过这种方式缓解内存不足(OOM)错误 —— 许多开发者都曾抱怨 GPU 内存容量有限,而我们的方案有望进一步解决这一难题。 我们关注哪些类型的应用? 图分析与图神经网络(GNN):如cuGraph中的大规模图计算、推荐系统中的图遍历。 数据科学与生成式 AI:向量搜索(如cuVS)、检索增强生成(RAG)、LLM 理与微调。 高性能计算(HPC):气候模拟、分子动力学等需要海量内存池的场景。
这些应用的典型特征是什么? 数据规模远超内存容量:从TB级图数据到PB级分析数据集,无法完全存入GPU/CPU内存。 细粒度访问模式:每个GPU线程独立发起小尺寸请求(如4B-4KB),传统CPU协调机制效率低下。 计算与数据访问强耦合:数据依赖型逻辑(如图遍历中的下一跳决策)要求低延迟数据获取。 对内存管理敏感:避免OOM错误,需透明处理数据缓存、分区与跨节点通信。
这些特性共同指向一个需求:将GPU从单纯的计算单元转变为兼具数据访问能力的自主引擎,通过新编程模型释放其线程级并行优势,直接与存储系统交互,而非依赖 CPU 作为中介。
4、应用场景
在高性能计算(HPC)领域,如气象、气候等众多场景中,这类工作负载确实需要巨大的内存容量或大量内存池,以实现高效运行。那么,这些应用的典型特征是什么呢? 以图神经网络为例,这类应用通常包含两类主要数据集:图结构数据和特征数据(即嵌入向量)。无论是图结构还是特征数据,往往都无法完全容纳在单个GPU内存或多个GPU内存的集合中。例如,万亿边级别的图数据规模会极其庞大,且图中的每个节点通常还关联着嵌入向量 —— 不仅限于节点和边,甚至交叉关系也可能对应多个嵌入。这类场景广泛应用于欺诈检测、信用卡交易处理(如领英的社交图谱)、推荐系统流水线或异常检测等领域。实践表明,与其他方法相比,图神经网络(GNN)能显著提升模型精度。 核心特征总结: 1. 数据依赖型操作密集:操作逻辑高度依赖实时数据(如图遍历中的下一跳决策),无法通过预分区优化。 2. 细粒度访问模式:每个GPU线程独立发起小尺寸数据请求(如节点嵌入的8字节读取),传统CPU协调机制导致高延迟。 3. 内存容量瓶颈:TB级图数据 + 高维嵌入轻松突破 GPU 内存限制,OOM(内存不足)错误频发。 4. 计算与 IO 强耦合:数据访问延迟直接影响计算效率,需通过硬件并行性隐藏延迟(如 GPU 线程级并发)。 在向量搜索和向量数据库场景中,同样存在类似挑战:需要存储和管理海量向量,并在神经网络推理或大规模搜索时高效检索数据。对于大规模图分析、向量搜索或 LLM 微调等复杂任务,虽然可以通过多 CPU/GPU 内存池勉强处理,但成本极高——尽管能提升吞吐量,却并非所有应用都能承受。 关键需求:我们需要一种无需手动管理内存的透明方案: • 避免OOM错误,自动处理数据缓存、分层和局部性优化; • 无需人工进行图分区、预处理或内存调度,降低开发负担; • 让GPU专注于擅长的计算任务,同时通过高效架构实现数据访问。 为此,我们提出了名为SCADA(规模化加速数据访问)的新解决方案 ——CJ 将在后续幻灯片中详细介绍其架构与实现。该方案的核心目标是将GPU从 “纯计算引擎” 升级为 “计算 + 数据访问双引擎”,通过硬件原生的并行性直接与存储交互,而非依赖CPU作为中介,从而在成本(TCO)和性能之间实现突破。 5、不同规模下的特性与应用
我们所设想的系统演进方向是: • 单 GPU 离散解决方案:可处理高达 1-10TB 的表格数据,基于本地 NVMe 存储,适用于数据科学、探索性数据分析等场景。 • 单节点 HGX 解决方案(20-40TB):适用于分子分析、知识图谱等场景,平衡计算能力与内存容量需求。 • 超大规模集群(数百TB内存):支持非顺序图处理、高IO负载场景,如异常检测、推荐系统、网络安全等。
核心目标:系统需实现高效扩展,同时尽可能减少对上层应用的改动。我们希望通过 SCADA 架构,在现有解决方案栈中集成新能力,最大限度保留应用层代码的兼容性。
6、应用分层示例
以生成式人工智能(GenAI)为例: 我们正将SCADA集成到NVIDIA的 WholeGraph 库(为生成式人工智能工作负载创建的一个库)。 cuGraph 负责底层图计算,并对系统栈进行必要修改,而高层的 GenAI训练内核无需任何代码变更即可自动运行。 关键优势:
接下来,请CJ继续介绍SCADA新系统的具体细节。
7、GPU发起的规模化数据架构
让我们来看看 SCADA 系统的整体架构(感谢 Victor 的介绍)。实际上,该架构主要包含三种视图: 1. 左侧用户视图:用户运行包含自定义对象的应用程序,数据可编译到缓存中,作为客户端的一部分。 2. 中间分层视图:通过某种机制实现数据的智能管理(稍后详细说明)。 3. 右侧底层存储视图:最终对接持久化存储设备。 当前我们先从服务器 - 客户端模型讲起: 在CPU客户端上,所有这些线程都在各自生成请求。它们会先访问缓存,如果能命中缓存,就可以立即获取数据;如果没有命中,就必须从服务器获取数据。
需要将客户端和服务器进行逻辑分离,因为服务器将控制DMA引擎,以便能够直接将数据取回,并且不能让其随意访问内存。一旦收到这些请求,同一个线程就会消费这些结果并进行处理。因此,线程会等待数据,然后直接对其进行操作。
一组专用的NVMe设备作为块设备,由数据服务器管理。如果需要与外部世界交互,例如映射到想要引入的持久化数据,或者想要持久化已写入的内容,我们都可以做到。所有这些请求发起、服务处理和结果消费都在GPU 内核内部完成,无需与CPU进行任何交互。CPU可能一开始帮助建立了连接,但仅此而已。一切都由GPU发起和触发,并且完全安全。
特性解读: • 全流程GPU自主控制:请求发起、服务处理、结果消费均在 GPU 内核内完成,CPU 仅初始化连接,无需参与运行时交互; • 安全隔离:服务器端严格管理 DMA 操作,确保内存访问安全; • 高抽象层设计:基于 Magnum IO 架构,支持多 GPU / 节点扩展,底层平台透明,便于跨硬件创新。 简而言之,该架构通过客户端 - 服务器分离和GPU 内核主导的异步处理,实现了细粒度数据访问与高吞吐量的平衡,同时保持对上层应用的兼容性。
CJ(演讲者)是Magnum IO的架构师,Magnum IO 旨在实现多 GPU、多节点的高效通信。正在寻找机会,建立足够高的抽象层,以便无论底层平台是什么,都能进行大量创新。这会带来了很多可能性。
8-9、简化架构
10、影响
11、为现代数据中心重新设计接口
我们能够建立足够高的抽象层,从而无论底层平台如何,都能进行大量创新,这为我们带来了诸多可能。再次强调,当我们面向规模化时,需要这种独立于数据规模和所在系统的单一数据访问 API—— 相同的接口、更高的抽象层,并且采用无服务器架构。 以 DNN 训练为例,应用程序无需关心以下问题: • 如何对数据进行分片? • 如何分发数据? • 如何编排数据导入? • 数据存储位置、格式、当前状态或分布方式? 这些均可交给SCADA背后的其他服务处理,形成无服务器化的 “按需取数” 模式——应用仅需关注 “获取数据”,其余细节由系统自动处理。这使得开发者可以充分利用所有可用的加速工具。正如SCADA中的 “A” 代表 “加速”(Acceleration),其核心即规模化加速数据访问。 如前所述,SCADA架构具备易启用性。从总体拥有成本(TCO)来看,尽管可能需要更高性能的硬盘,但相比 HBM 甚至 DRAM,更少的存储设备数量和更低的硬件成本将带来显著优势。此外,功耗管理也是该方案的核心考量之一。
解读特性: 规模化:单一API支持任意规模数据访问 - 容纳此前无法处理的数据(如单节点10TB),避免OOM焦虑 - 透明扩展数据集规模与计算集群规模 高抽象层:“无服务器访问”是现代数据中心的发展方向 - 前端:处理缓存、避免分区、多GPU/节点通信 - 后端:应用访问数据集,无需关注数据存储位置/方式 - 数据平台工具可管理数据策略、局部性、分片等 - 借助GPU线程、内存管理和拓扑优化通信实现加速 易启用性:底层接口不改变应用层 基础低成本:降低存储数据成本 - 海量数据→海量内存→高成本 - 低计算复杂度应用若仅为存储(非计算)使用HBM成本过高 - 廉价NVMe提升数据中心效率
12、两个SCADA研究原型:BaM与GIDS
SCADA两个开源学术原型, (1)BaM(大加速器内存,Big Accelerator Memory):《BaM系统架构中的GPU发起按需高吞吐量存储访问》,ASPLOS 2023。 (2)GIDS:《通过GPU发起直接存储访问加速GNN框架中的采样与聚合操作》,VLDB’24
目前这是一个功能原型,我们首先将其应用于 CuGraph 项目中的 Whole Graph 模块,其根本目的是用于存储图结构和嵌入数据。这是一个 C++ 头文件模板库,因此你可以根据应用需求对任意对象进行定制,并使用一些开发人员熟悉的编程抽象。
如代码示意图所示,若处理的是连续密集数据,基本只需进行数组访问。通过缓存将多个请求聚合为更少的 IO 操作,同时支持数十万 GPU 线程的 IO 队列交互 —— 其队列深度比 CPU 场景深两个数量级(即达到 CPU 的 100 倍)。 这体现了SCADA服务的演进:从基础的缓存聚合和 IO 优化,逐步向支持大规模并行数据访问的方向发展。
13、SCADA服务演进
这是SCADA服务的演进过程。我们基本上从适用于各种不同服务的通用基础设施开始。
我们期待在该领域获得更多反馈,推动方案优化。
14、性能结果:GPU作为数据访问核心
我们已经进行了性能分析。关键的结论是,最终我们的代码并不在关键路径上,而重点在于能够从驱动器中获得IOPS(每秒输入 / 输出操作次数),并且仅受限于我们所使用的 PCIe 带宽。
- 瓶颈在于NVMe和引脚带宽,而非GPU代码 - 请求生成→GPU批处理→缓存→IO处理→NVMe访问
15、随机读
BaM NVMe块基准测试:BaM替代NVMe驱动,实现GPU发起的IO传输 ,通过BaM对存储设备施加压力,测量4KB传输的操作数/秒和GB/s:
15、BaM驱动扩展:带宽与IOPS
通过 BaM 实现的 GPU 直接访问存储,与通过 CPU 转接存储的传统方式相比,搭配高性能 Gen5 NVMe 硬盘,可使图神经网络(GNN)训练性能提升 25 倍以上。
16、使用GIDS+BaM的GNN训练
- GPU发起的存储访问(GIDS)使SSD队列深度达到CPU场景的10-100倍 - 99%为小块读取,接近硬盘最大IO性能 - 需要高性能NVMe支持(最大队列深度O(10000))
17、适用性
因此,你可以从应用适用性来看什么样的场景特别适合这个系统。需具备以下特征: - 每个GPU线程动态生成并发起独立请求 - 若已知批量请求,可使用GPUDirect Storage - 访问粒度可小至4B-4KB - 粗粒度场景仅需极少线程即可饱和接口 - 无法可靠容纳于GPU高带宽内存 - 若可容纳,仍可使用传统加载/存储 - 瓶颈在于数据访问而非计算 - 计算受限场景可通过多节点HBM解决
18、核心优势
规模化:通过溢出到NVMe存储,在少量GPU上处理大规模问题 ,即使略有性能损失(如单NVMe),需权衡可接受的延迟阈值; 性价比(TCO):相同性能下,NVMe相比HBM/DDR成本更低 ; 性能:通过调优可持续提升,当前受限于PCIe带宽和硬盘数量。
目前客户反馈表明:即使单 GPU 性能略有下降,只要能处理以前无法容纳的更大规模问题(例如仅用一块 GPU 解决过去需多卡的任务),这就是从 0 到 1 的突破。若能进一步提升性能(如通过优化存储层或架构),将更贴近用户对大规模数据处理的核心需求。
19、对SCADA的行动呼吁
存储技术人员: - 助力提供更高IOPS! - 通过PCIe支持细粒度传输 应用开发者与用户*: - 反馈超过GPU-CPU内存容量的数据计算需求 - 指定感兴趣的服务类型(如数组、交换、键值、VectorDB、数据帧) - 明确产品栈支持与部署模型细节 - 提供真实使用场景,验证中间件对现有应用的兼容性(尽可能减少应用代码修改)。 基础设施开发者: - 如NVSHMEM般为SCADA构建层(如Kokkos性能可移植框架) - 探索计算与通信细粒度交织的新场景(如LLNL)
|