[IT/数码] NVIDIA 2024-GPU作为数据访问引擎

[复制链接]
查看9 | 回复0 | 前天 21:59 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区

您需要 登录 才可以下载或查看,没有账号?立即注册

×

GPU作为数据存储引擎GPUs as Data Access EnginesNVIDIA Aug 8, 2024
摘要:
   本文围绕GPU作为数据访问引擎展开,指出随着数据集规模扩大,传统内存无法容纳海量数据,需通过NVMe存储和新API(如SCADA)实现数据访问。SCADA通过GPU直接发起IO请求、缓存聚合减少IO操作、支持数十万GPU线程的高队列深度,解决数据访问瓶颈,提升图神经网络(GNN)等应用的性能(如 BaM 原型使 GNN 训练性能提升 25 倍以上),并强调其低总体拥有成本(TCO)和对细粒度数据访问的支持。此外,文档呼吁存储技术人员、应用开发者等参与社区项目,优化 IOPS 和能效。 215906d56696eb.png
215906f8950c81.png


   如今,GPU不仅是计算核心,更成为数据访问引擎。目前正致力于推动存储行业的这一变革,也邀请大家共同参与。
1、趋势  
21590765a2f8df.png

  以规模化数据集为例,试想用于RA(检索增强生成)或GNN(图神经网络)训练的树状边缘图 —— 这类数据量远超单个GPU内存容量,甚至多个节点内存也无法容纳。若无法存入内存,就必须将数据分流到其他存储介质。从总体拥有成本(TCO)来看,NVMe SSD是最佳选择。
然而,传统的加载/存储操作已无法满足这类数据的访问需求,必须设计比简单内存映射文件更精巧的新API—— 这正是目前的研究方向。
  当前许多工作负载的瓶颈不仅在于计算,更在于数据访问。我们将通过具体案例说明,为何GPU需要转型为数据访问引擎,且事实证明其在这一领域潜力巨大。
反观传统 CPU,是否能胜任新需求?我们的结论是否定的 ——CPU 在数据访问场景中几乎捉襟见肘,因此需要创新GPU发起存储访问的抽象架构。
  此外,键值存储 / 对象存储正逐渐取代文件系统成为主流数据访问方式,这需要定制化 API(而非标准接口)。面对应用难以追踪的海量数据,我们需探索无服务器架构,通过数据集服务与编排机制实现高效管理,后续将深入探讨该架构的具体形态。


2、规模化数据带来的新问题  
21590753baaccc.png
  在规模化数据领域确实出现了一类新问题:海量数据远超传统加载/存储的处理范畴。开发者需要面对一系列难题:如何启动数据、如何移动数据、如何正确初始化数据,以及在数据可能来自远端的大规模场景下如何处理错误 —— 这些都成为沉重的负担。
目前我们有一些抽象工具,例如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、新的应用类型催生新编程模型
215907777c8a42.png

  这些新应用都需要新的编程模型。正如之前所言,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、应用场景
21590850552441.png
  在高性能计算(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、不同规模下的特性与应用
21590886e2468e.png
我们所设想的系统演进方向是:
• 单 GPU 离散解决方案:可处理高达 1-10TB 的表格数据,基于本地 NVMe 存储,适用于数据科学、探索性数据分析等场景。
• 单节点 HGX 解决方案(20-40TB):适用于分子分析、知识图谱等场景,平衡计算能力与内存容量需求。
• 超大规模集群(数百TB内存):支持非顺序图处理、高IO负载场景,如异常检测、推荐系统、网络安全等。  

核心目标:系统需实现高效扩展,同时尽可能减少对上层应用的改动。我们希望通过 SCADA 架构,在现有解决方案栈中集成新能力,最大限度保留应用层代码的兼容性。

6、应用分层示例
215908fde87b78.png
以生成式人工智能(GenAI)为例:
  我们正将SCADA集成到NVIDIA的 WholeGraph 库(为生成式人工智能工作负载创建的一个库)。
  cuGraph 负责底层图计算,并对系统栈进行必要修改,而高层的 GenAI训练内核无需任何代码变更即可自动运行。
关键优势:
  • 无需修改上层应用栈,完全在底层实现扩展;
  • 支持超大规模数据与图结构的 GenAI 训练,同时自动优化内存管理、缓存局部性,消除传统图分区的复杂性;
  • 训练后的模型可直接部署到向量数据库或推理服务,实现训练与推理的无缝衔接。


  接下来,请CJ继续介绍SCADA新系统的具体细节。


7、GPU发起的规模化数据架构  
21590938e81aa4.png
  让我们来看看 SCADA 系统的整体架构(感谢 Victor 的介绍)。实际上,该架构主要包含三种视图:
1. 左侧用户视图:用户运行包含自定义对象的应用程序,数据可编译到缓存中,作为客户端的一部分。
2. 中间分层视图:通过某种机制实现数据的智能管理(稍后详细说明)。
3. 右侧底层存储视图:最终对接持久化存储设备。
当前我们先从服务器 - 客户端模型讲起:
  • 客户端(CPU/GPU 线程):

    • 每个线程独立生成数据请求,首先尝试访问缓存(命中则直接获取数据);

    • 缓存未命中时,向服务器发起请求。  

在CPU客户端上,所有这些线程都在各自生成请求。它们会先访问缓存,如果能命中缓存,就可以立即获取数据;如果没有命中,就必须从服务器获取数据。
  • 服务器(GPU 内核):

    • 逻辑上与客户端分离,控制 DMA 引擎直接从存储读取数据(避免内存不安全访问);

    • 处理请求后将结果返回给发起线程,线程等待数据返回后直接操作结果。  

需要将客户端和服务器进行逻辑分离,因为服务器将控制DMA引擎,以便能够直接将数据取回,并且不能让其随意访问内存。一旦收到这些请求,同一个线程就会消费这些结果并进行处理。因此,线程会等待数据,然后直接对其进行操作。
  • 存储层:

    • 专用 NVMe 设备作为服务器管理的块设备;

    • 支持与外部交互(如加载持久化数据或保存写入内容)。   

一组专用的NVMe设备作为块设备,由数据服务器管理。如果需要与外部世界交互,例如映射到想要引入的持久化数据,或者想要持久化已写入的内容,我们都可以做到。所有这些请求发起、服务处理和结果消费都在GPU 内核内部完成,无需与CPU进行任何交互。CPU可能一开始帮助建立了连接,但仅此而已。一切都由GPU发起和触发,并且完全安全。

特性解读:
• 全流程GPU自主控制:请求发起、服务处理、结果消费均在 GPU 内核内完成,CPU 仅初始化连接,无需参与运行时交互;
• 安全隔离:服务器端严格管理 DMA 操作,确保内存访问安全;
• 高抽象层设计:基于 Magnum IO 架构,支持多 GPU / 节点扩展,底层平台透明,便于跨硬件创新。  
简而言之,该架构通过客户端 - 服务器分离和GPU 内核主导的异步处理,实现了细粒度数据访问与高吞吐量的平衡,同时保持对上层应用的兼容性。

CJ(演讲者)是Magnum IO的架构师,Magnum IO 旨在实现多 GPU、多节点的高效通信。正在寻找机会,建立足够高的抽象层,以便无论底层平台是什么,都能进行大量创新。这会带来了很多可能性。

8-9、简化架构
2159096652c670.png

21590933d2e380.png



10、影响
21590953897aee.png

  • 海量分布式数据


    • 数据与计算分离→通过数据编排实现分层局部性  

  • 抽象屏蔽复杂度  


    • 在提供近完全控制的同时降低使用门槛  

    • 处理不可靠存储的脆弱性及其错误条件  

    • 保持成本透明性(若API未直接体现,则需可查询成本)  

  • 用户接口

    • 可能对SOL(存储对象语言)是全新的,但必须支持 legacy 系统  

    • 提供非独占视图;支持白话数据集合而非仅mdspan  

    • 提供使用提示  

    • 开发人员/调优人员/数据中心管理员可在数据网络中指定预处理和转换  


      • 支持配置式(预定义)和按需式(实时请求)操作  


11、为现代数据中心重新设计接口
2159103d04bd2d.png


  我们能够建立足够高的抽象层,从而无论底层平台如何,都能进行大量创新,这为我们带来了诸多可能。再次强调,当我们面向规模化时,需要这种独立于数据规模和所在系统的单一数据访问 API—— 相同的接口、更高的抽象层,并且采用无服务器架构。
以 DNN 训练为例,应用程序无需关心以下问题:
• 如何对数据进行分片?
• 如何分发数据?
• 如何编排数据导入?
• 数据存储位置、格式、当前状态或分布方式?  
这些均可交给SCADA背后的其他服务处理,形成无服务器化的 “按需取数” 模式——应用仅需关注 “获取数据”,其余细节由系统自动处理。这使得开发者可以充分利用所有可用的加速工具。正如SCADA中的 “A” 代表 “加速”(Acceleration),其核心即规模化加速数据访问。
如前所述,SCADA架构具备易启用性。从总体拥有成本(TCO)来看,尽管可能需要更高性能的硬盘,但相比 HBM 甚至 DRAM,更少的存储设备数量和更低的硬件成本将带来显著优势。此外,功耗管理也是该方案的核心考量之一。


解读特性:
规模化:单一API支持任意规模数据访问
- 容纳此前无法处理的数据(如单节点10TB),避免OOM焦虑  
- 透明扩展数据集规模与计算集群规模
高抽象层:“无服务器访问”是现代数据中心的发展方向
- 前端:处理缓存、避免分区、多GPU/节点通信
- 后端:应用访问数据集,无需关注数据存储位置/方式
- 数据平台工具可管理数据策略、局部性、分片等
- 借助GPU线程、内存管理和拓扑优化通信实现加速
易启用性:底层接口不改变应用层
基础低成本:降低存储数据成本
- 海量数据→海量内存→高成本
- 低计算复杂度应用若仅为存储(非计算)使用HBM成本过高
- 廉价NVMe提升数据中心效率  



12、两个SCADA研究原型:BaM与GIDS
21591064ae1339.png

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服务演进
215911162a89b8.png

  这是SCADA服务的演进过程。我们基本上从适用于各种不同服务的通用基础设施开始。
  • 交换服务(Swap Service):当前阶段先支持数据在内存与存储间的交换,避免传统模式下一次性加载所有数据导致的内存压力,缓解OOM错误。
  • 持久化支持:未来将进一步扩展至持久化存储层,利用无限容量存储透明管理数据,彻底释放内存限制。


我们期待在该领域获得更多反馈,推动方案优化。


14、性能结果:GPU作为数据访问核心
215911d6466320.png   我们已经进行了性能分析。关键的结论是,最终我们的代码并不在关键路径上,而重点在于能够从驱动器中获得IOPS(每秒输入 / 输出操作次数),并且仅受限于我们所使用的 PCIe 带宽。

- 瓶颈在于NVMe和引脚带宽,而非GPU代码  
- 请求生成→GPU批处理→缓存→IO处理→NVMe访问  

15、随机读
2159110a0ae5b2.png

  BaM NVMe块基准测试:BaM替代NVMe驱动,实现GPU发起的IO传输  ,通过BaM对存储设备施加压力,测量4KB传输的操作数/秒和GB/s:
  • 4KB随机读:6.1 MIOPs,23.2 GB/s  
  • 6个硬盘相比4个硬盘,MIOPs和GB/s略有提升  
  • 0% CPU利用率  


15、BaM驱动扩展:带宽与IOPS 21591256bc6b15.png

  通过 BaM 实现的 GPU 直接访问存储,与通过 CPU 转接存储的传统方式相比,搭配高性能 Gen5 NVMe 硬盘,可使图神经网络(GNN)训练性能
提升 25 倍以上。

16、使用GIDS+BaM的GNN训练
2159123987f887.png

  - GPU发起的存储访问(GIDS)使SSD队列深度达到CPU场景的10-100倍  
  - 99%为小块读取,接近硬盘最大IO性能  
  - 需要高性能NVMe支持(最大队列深度O(10000))

17、适用性  
215912cdc985c3.png 因此,你可以从应用适用性来看什么样的场景特别适合这个系统。
需具备以下特征:
  • GPU发起的动态单线程访问:

  - 每个GPU线程动态生成并发起独立请求
  - 若已知批量请求,可使用GPUDirect Storage
  • 细粒度高吞吐量:

  - 访问粒度可小至4B-4KB
  - 粗粒度场景仅需极少线程即可饱和接口
  • 无限数据规模:

  - 无法可靠容纳于GPU高带宽内存
  - 若可容纳,仍可使用传统加载/存储
  • 数据访问受限场景:  

  - 瓶颈在于数据访问而非计算
  - 计算受限场景可通过多节点HBM解决

18、核心优势  
2159136fdf7ef9.png
  • 规模化:通过溢出到NVMe存储,在少量GPU上处理大规模问题 ,即使略有性能损失(如单NVMe),需权衡可接受的延迟阈值;  
  • 性价比(TCO):相同性能下,NVMe相比HBM/DDR成本更低 ;
  • 性能:通过调优可持续提升,当前受限于PCIe带宽和硬盘数量。


  目前客户反馈表明:即使单 GPU 性能略有下降,只要能处理以前无法容纳的更大规模问题(例如仅用一块 GPU 解决过去需多卡的任务),这就是从 0 到 1 的突破。若能进一步提升性能(如通过优化存储层或架构),将更贴近用户对大规模数据处理的核心需求。


19、对SCADA的行动呼吁
2159135170e144.png

存储技术人员:  
  - 助力提供更高IOPS!  
  - 通过PCIe支持细粒度传输  
应用开发者与用户*:  
  - 反馈超过GPU-CPU内存容量的数据计算需求  
  - 指定感兴趣的服务类型(如数组、交换、键值、VectorDB、数据帧)  
  - 明确产品栈支持与部署模型细节
  - 提供真实使用场景,验证中间件对现有应用的兼容性(尽可能减少应用代码修改)。
基础设施开发者:  
  - 如NVSHMEM般为SCADA构建层(如Kokkos性能可移植框架)  
  - 探索计算与通信细粒度交织的新场景(如LLNL)


回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

hdy

527

主题

341

回帖

567

积分

二级逆天

积分
567