课程导入:学习目标、课程结构与 GDS 的定位与价值

欢迎来到《GPU Direct存储访问概览指南》的第一章。在正式开始技术细节之前,我们需要先回答三个问题:为什么要学这门课?这门课讲什么?以及 GPU Direct Storage(GDS)在整个高性能计算与 AI 基础设施中处于什么位置? 只有把这些问题想清楚,后续对 API、数据路径、性能调优的讨论才有立足点。

1.1 学习目标:从“能跑通”到“看得懂瓶颈”

本课程不是简单的 GDS 功能罗列,而是希望帮助你建立一套完整的 存储-网络-GPU 协同视角。完成本章及后续学习后,你应该具备以下能力:

  • 理解数据搬运的本质:能够解释传统路径中 CPU 为何成为瓶颈,以及 GDS 如何绕过 CPU 进行 DMA 传输。
  • 掌握 GDS 的核心组件:熟悉 cuFile 库、nvfs 文件系统、GPU 页表与 P2P 传输之间的关系。
  • 具备实操判断力:面对一个 AI 训练或推理任务,能判断是否适合使用 GDS,并估算潜在收益。
  • 能够进行基础性能分析:使用 nvidia-smi、cuFile 的统计接口以及 strace 等工具,定位数据通路中的延迟来源。

课程核心观点:GDS 的价值不在于“把文件读得更快”,而在于 消除数据在 CPU 内存中不必要的“中转停留”。它改变的是数据流架构,而非单纯的 IOPS 数字。

1.2 课程结构:四大模块递进

本课程共 30 章,分为四个递进模块。建议按顺序学习,因为后续章节会频繁引用前文的概念与代码示例。

模块 章节范围 核心内容 能力目标
基础篇 第 1-7 章 GDS 原理、NVMe 与 GPU 之间的 DMA 路径、cuFile 基础 API 理解数据流,能编写第一个 GDS 读写程序
进阶篇 第 8-16 章 多 GPU 场景、文件系统集成(NVFS vs 传统 FS)、错误处理与性能调优 处理复杂 I/O 模式,优化带宽利用率
生态篇 第 17-24 章 与 NCCL、CUDA 异步流、分布式训练框架(PyTorch/MPI)的集成 在真实训练任务中部署 GDS
实战篇 第 25-30 章 基准测试方法论、常见故障排查、容器化与云环境适配 独立完成 GDS 性能评估与问题定位

每一章都会包含一个与主题强相关的 可视化示意图,帮助你建立空间直觉。本章的示意图展示了 GDS 在系统栈中的位置。

GDS 在系统数据通路中的位置 NVMe SSD / NVMe-oF 存储设备(文件/块) CPU 内存(页面缓存) 传统 DMA 中转站 瓶颈:PCIe 往返 + CPU 拷贝 GPU 显存(HBM) CUDA 可访问缓冲区 目标:数据直达此处 ① 传统读 ② 拷贝至GPU GDS 直通路径(DMA 绕过 CPU) 软件栈与驱动层 应用 / 框架 PyTorch / 自定义 cuFile 库 GDS 用户态 API nvfs / 内核模块 文件系统桥接 GPU 驱动 DMA / 页表管理 传统路径:NVMe → CPU 内存 → GPU 显存(两次 PCIe 传输) GDS 路径:NVMe → GPU 显存(一次 PCIe 传输,CPU 仅做控制)

1.3 GDS 的定位:不是“加速器”,而是“去中介化”

很多初学者容易把 GDS 理解为“让 GPU 直接读文件”,这个说法并不准确。更精确的描述是:GDS 允许 GPU 的 DMA 引擎直接与 NVMe 控制器交互,从而绕过 CPU 内存作为数据中转站的角色。 它并不改变存储介质的物理速度,而是减少了数据路径上的“停留次数”。

从系统架构角度看,GDS 位于 存储驱动与 GPU 驱动之间的协作层。它依赖三个关键机制:

  1. GPU 页表映射:GPU 显存中的缓冲区被映射为物理地址,供 NVMe 控制器直接访问。
  2. DMA 引擎的 P2P 能力:现代 NVIDIA GPU(Volta 架构及以上)支持通过 PCIe 进行点对点传输。
  3. 文件系统支持:需要文件系统提供“直接到设备”的 I/O 路径,而非传统的 page cache 机制。

实用提示:在判断一个场景是否适合 GDS 时,可以问自己两个问题:① 数据是否最终要进入 GPU 显存?② 数据是否不需要 CPU 做内容修改(如格式转换、校验)?如果两个答案都是“是”,那么 GDS 大概率能带来收益。

1.4 典型应用场景与价值量化

GDS 的价值在以下三类场景中体现得最为明显:

  • AI 训练中的数据加载:当训练样本为大型图片、视频或科学数据集时,传统路径中 CPU 需要先从磁盘读入内存,再通过 cudaMemcpy 拷贝到 GPU。GDS 可将这个过程缩短 30%-50%(取决于文件大小与 PCIe 拓扑)。
  • 推理服务中的模型加载:大模型(如 70B 参数)的权重文件可能达到 140GB 以上。使用 GDS 加载模型权重,可以显著减少冷启动时间。
  • 数据分析与科学计算:当 GPU 需要直接处理 NetCDF、HDF5 等格式的科研数据时,GDS 避免了中间缓冲区的内存占用。
场景 传统路径耗时(相对值) GDS 路径耗时(相对值) 主要收益来源
小文件(<1MB)批量读取 1.0 0.85 减少 CPU 中断处理
大文件(>100MB)顺序读取 1.0 0.55 消除内存拷贝与二次 PCIe 传输
多 GPU 并行读取同一文件 1.0 0.40 避免 CPU 内存带宽争抢

1.5 常见误区与学习建议

误区一:认为 GDS 可以替代 NVMe 优化。 实际上,如果存储设备本身性能不佳(如 SATA SSD),GDS 的收益会非常有限。GDS 是“放大器”,不是“创造者”。

误区二:忽略 PCIe 拓扑。 如果 GPU 和 NVMe 控制器不在同一个 PCIe Switch 下,P2P 传输可能走 QPI/UPI 链路,性能反而下降。学习时务必关注 nvidia-smi topo -m 的输出。

误区三:认为所有文件系统都支持 GDS。 目前原生支持最好的是 NVFS 和 EXT4/XFS(需特定挂载参数)。网络文件系统(NFS)默认不支持。