Grace Hopper Superchip Architecture and Performance Optimizations for AI Applications

Matthias Jouanneaux, Vishal Mehta, NVIDIA DevTech Compute | GPU Technology Conference/March 20th, 2024

目录

NVIDIA Grace Hopper 超级芯片

NVIDIA Grace Hopper 超级芯片的设计允许 GPU 以 CPU 内存的速度访问 CPU 内存。

Page 2: NVIDIA Grace Hopper 超级芯片架构图
Page 2: NVIDIA Grace Hopper 超级芯片架构图

上图展示了 Grace Hopper 超级芯片的架构,其核心组件包括:
- Grace CPU: 配备高达 480 GB 的 LPDDR5X 内存,提供最高 512 GB/s 的带宽。
- Hopper GPU: 配备 96 GB HBM3 或 144 GB HBM3e 内存,提供最高 4.9 TB/s 的带宽。
- NVLINK C2C: 一种 900 GB/s 的芯片间互联技术,用于连接 Grace CPU 和 Hopper GPU。
- 高速 I/O: 包括 4x 16x PCIe-5 接口,提供 512 GB/s 的带宽。
- NVLINK 网络: 通过 18x NVLINK 4 接口(900 GB/s)支持硬件一致性,可扩展至多达 256 个 GPU。

Grace Hopper 性能预览

Grace Hopper 通过提升 GPU 利用率,显著改善了 AI 应用的性能。

Page 3: Grace Hopper 在不同应用中的性能对比
Page 3: Grace Hopper 在不同应用中的性能对比

注:GH200: Grace CPU 480GB LPDDR5, H100 96GB HBM3. DGX H100: H100 80GB HBM3.

Grace Hopper CUDA 特性

内存分配器 (Memory Allocators)

仅设备内存管理 (cudaMalloc)

Page 6: cudaMalloc 内存分配示意图
Page 6: cudaMalloc 内存分配示意图

无论是标准的 PCIe Hopper 配置还是 Grace Hopper 配置,使用 cudaMalloc 分配的 GPU 内存都无法被 CPU直接访问。CPU 侧的指针无法解引用以访问 GPU 内存中的数据。

CUDA 统一内存 (cudaMallocManaged)

Page 7: cudaMallocManaged 内存分配示意图
Page 7: cudaMallocManaged 内存分配示意图

对于使用 cudaMallocManaged 分配的 CUDA 统一内存,PCIe Hopper 和 Grace Hopper 的行为是相同的。当 CPU 或 GPU 首次访问数据时,会发生页错误(Page fault),并将相应的内存页迁移到访问方。

Grace Hopper 统一内存 (Unified Memory)

Grace Hopper 通过地址转换服务(Address Translation Service, ATS)实现真正的统一内存。

Page 8: Grace Hopper 统一内存与地址转换服务
Page 8: Grace Hopper 统一内存与地址转换服务

系统页表(System Page Table)可以将 CPU 分配的内存地址转换为 CPU 或 GPU 的物理地址。这使得 Grace CPU 和 Hopper GPU 能够通过 NVLINK C2C 互联,实现对 CPU 驻留(CPU-resident)和 GPU 驻留(GPU-resident)内存的直接访问或远程访问。

系统分配内存 (malloc/mmap)

Page 9: 系统内存分配在 PCIe Hopper 与 Grace Hopper 上的对比
Page 9: 系统内存分配在 PCIe Hopper 与 Grace Hopper 上的对比

Grace Hopper 优化

统一内存的自动迁移 (CPU -> GPU)

Page 10: Grace Hopper 统一内存自动迁移机制
Page 10: Grace Hopper 统一内存自动迁移机制

对于最初位于 CPU 物理内存中的数据页(Page A),如果 Hopper GPU 对其进行频繁访问,系统会自动将该页迁移到 GPU 物理内存中,以提升后续访问的性能。而对于不频繁的访问,则会通过 NVLINK C2C 进行远程访问。

CUDA 内存调优 API

在 Grace Hopper 上,CUDA 内存调优 API 可用于 cudaMallocManaged 和系统分配的内存。

Page 11: Grace Hopper 内存调优 API 示例
Page 11: Grace Hopper 内存调优 API 示例

NVLink-C2C 性能

cudaMemcpy 在 Grace Hopper 上的性能表现优于传统 x86 系统。

Page 12: NVLink-C2C 的 cudaMemcpy 性能对比
Page 12: NVLink-C2C 的 cudaMemcpy 性能对比

上图展示了 MGX Grace Hopper 480GB CPU 内存的 cudaMemcpy 性能:
- 固定内存 (Pinned Memory):
- x86+H100 H2D (主机到设备): 55.67 GB/s
- x86+H100 D2H (设备到主机): 54.42 GB/s
- Grace Hopper H2D: 381.7 GB/s
- Grace Hopper D2H: 297.7 GB/s

Grace Hopper 凭借 NVLink-C2C,在主机与设备间的数据传输带宽上实现了巨大飞跃,无论是固定内存还是可分页内存。

在 Grace Hopper 上优化应用

关键优化技术

Page 14: Grace Hopper 关键优化技术示意图
Page 14: Grace Hopper 关键优化技术示意图

针对 AI 应用,Grace Hopper 的关键优化技术主要有两种:

  1. 异步批量传输 (Asynchronous Bulk cudaMemcpy):
    将 CPU 内存作为 NVLink C2C 上的扩展,通过异步卸载能力传输激活值(activations)和参数(parameters)。
  2. 直接内存访问 (Direct Memory Access):
    将 CPU 内存显式地用作一个高带宽、大容量的缓存,通过 NVLink C2C 进行直接内存访问。

微调应用

有监督微调 (Supervised Fine Tuning, SFT)

感谢:Matthias Langer (DevTech Compute APAC)

概述

有监督微调是使用 Grace Hopper 统一内存、PyTorch 和 Megatron 进行的一种微调方法。其基本流程是:首先,使用网络规模的数据(Web-scale data)预训练一个大型语言模型(Pre-trained LLM);然后,利用领域特定数据或自定义知识库(Domain-specific data / custom knowledge base)对该预训练模型进行微调,从而得到一个针对特定任务或领域的微调后的大型语言模型(Fine-tuned LLM)。

Page 17
Page 17

专家混合模型 (Mixture of Experts, MoE)

下图展示了 LLM 模型中 Transformer 层的结构,其中包含一个注意力(Attention)模块和一个专家混合(Mixture of Experts)模块。MoE 模块通过 MoE 路由(MoE Routing)将输入分配给不同的专家(Expert 1, ..., Expert N),然后对专家的输出进行加权求和(Weighted Sum)。

Page 18
Page 18

技术:激活检查点 (Activation Checkpointing)

为了更有效地利用内存,可以采用重新计算激活值的技术。

Page 19
Page 19

技术:异步激活卸载 (Asynchronous Activation Offloading)

这是一种将激活值异步卸载到 CPU 内存的技术,以减少 GPU 内存的占用。

Page 24
Page 24

在 Megatron LM 中实现异步卸载

Page 25
Page 25

性能分析与对比

Page 26
Page 26

LoRA 微调 (LoRA Fine Tuning)

使用 LoRA 微调 Llama 2 70B

本节介绍使用 Grace Hopper 统一内存、PyTorch 和 Huggingface 对 Llama 2 70B 模型进行 LoRA 微调。

Page 28
Page 28

下图展示了使用 Grace Hopper Unified Memory、PyTorch 和 Huggingface 进行微调的性能。该图比较了不同配置下的微调时间与吞吐量,所有数据均已对 DGX H100 8 GPU 进行归一化处理。图表中,越靠左上方性能越好。

实验设置:7 个 epoch,每个 epoch 包含 368 个批次,全局批次大小为 40。

Page 31
Page 31

内存占用分析

下表对比了使用和不使用 LoRA 及检查点技术时,单个层和整个模型的参数、优化器状态以及激活值的内存占用(单位:GB)。

Page 29
Page 29

LoRA 微调策略与技术

对 Llama 2 70B 进行 LoRA 微调的核心策略是利用快速且大容量的 CPU 内存。

下图的时间线展示了在前向和后向传播过程中,计算(Forward N, Backward N)与参数/激活的卸载(Offload)和预取(Prefetch)操作如何重叠,从而提高训练效率。

Page 30
Page 30

大语言模型推理

LLM 推理:持久化 KV 缓存

本节内容致谢 Thor Johnsen (TRT-LLM)。

Page 33
Page 33

LLM 推理中的注意力计算

在 LLM 推理中,使用 KV(键-值)缓存可以在生成新 token 时重用之前 token 的计算结果。

Page 34
Page 34

LLM 推理中的多轮对话

为多个用户提供服务的推理服务器需要高效地管理内存和计算资源。

Page 35
Page 35

使用持久化 KV 缓存的注意力计算

持久化 KV 缓存技术通过将先前序列的计算结果保存在 CPU 内存中,进一步优化了性能。这项技术利用了高带宽直接 CPU 访问的优势。

Page 36
Page 36

KV 缓存卸载性能

下图比较了有无持久化 KV 缓存时的吞吐量(越高越好):
- 在 x86+A100、x86+H100 和 Grace Hopper 三种平台上,“上下文重载 + 持久化 KV 缓存”的吞吐量均高于“首次推理”。
- Grace Hopper 在两种情况下都表现出最高的吞吐量。

Page 37
Page 37

LLM 推理:参数卸载

本节内容致谢 Weiliang Liu, Sahil Modi, Rajnish Aggarwal (TRT-LLM team), Martin Mehringer (DevTech Compute EMEA)。

Page 38
Page 38

TensorRT 中的参数卸载优化

Page 39
Page 39

异步参数卸载技术

Page 40
Page 40

Grace Hopper 上改进的吞吐量

下图展示了在单个 Grace Hopper 上推理 Llama2 70B FP16 模型(140GB 权重)的性能:
- 在批次大小为 16 时,首个 token 延迟低于 1 秒。
- 在批次大小为 96 时,达到最大吞吐量。
- 图中比较了 40% 权重在 GPU 和 60% 权重在 GPU 两种情况下的性能曲线。

Page 41
Page 41

推荐系统工作流

本节内容致谢 Abdurrahman Yasar, Chirayu Garg (DevTech Compute NALA)。

Page 42
Page 42

延迟流水线

推荐系统的工作流通常包含以下步骤:
1. 检索用户特征 (Retrieval User Features) - 使用 Pandas
2. 双塔模型 (Two-Tower Model) - 使用 Onnx runtime
3. 近似最近邻图搜索 (Approximate Nearest Neighbor Graph) - 使用 Rapids RAFT
4. 检索物品特征 (Retrieval Item Features) - 使用 Pandas
5. DLRM 模型 (DLRM Model) - 使用 Onnx runtime

基准测试通过随机生成查询并逐一执行流水线中的每个组件来完成。

Page 43
Page 43

数据集属性

Page 44
Page 44

延迟分析

下图展示了端到端推荐系统的运行时分解:
- 图中比较了 x86+A100、x86+H100 和 Grace Hopper 的执行时间。
- 堆叠条形图清晰地显示了 CPU 运行时(如特征获取)和 GPU 运行时(如模型推理)的耗时。
- Grace Hopper 在 CPU 密集型任务(用户和物品特征获取)上显著减少了执行时间,从而降低了总延迟。

Page 45
Page 45

数据库查询

本节内容感谢 Rui Lan, Eyal Soha, Nikolay Sakharnykh (DevTech Compute NALA) 的贡献。

数据库查询:x86 与 Grace Hopper 对比

下图展示了两种架构在处理数据库查询时的主要区别。在 x86 平台,CPU 与 GPU 之间通过 64GB/s 的 PCIe 连接,这限制了数据从 CPU 内存到 GPU 内存的传输速度。而在 Grace Hopper 超级芯片中,Grace CPU 与 Hopper GPU 通过 900 GB/s 的 NVLink C2C 直接互连,极大地提升了数据交换带宽。

Page 48 - x86 与 Grace Hopper 架构对比
Page 48 - x86 与 Grace Hopper 架构对比

不同数据库查询的性能

下图展示了在不同类型的数据库查询中,Grace Hopper 相对于 x86+A100 和 x86+H100 的性能优势。其核心技术是高带宽直接 CPU 访问。

总体而言,由于消除了 PCIe 瓶颈,Grace Hopper 在各类数据密集型查询中均展现出数倍的性能提升。

Page 49 - 不同数据库查询性能对比
Page 49 - 不同数据库查询性能对比

结论

关键要点

Grace Hopper 为 AI 应用带来的核心优势可以总结为以下三点:

  1. 通过异步卸载实现更高的 GPU 吞吐量:Grace CPU 可以将任务异步地卸载到 Hopper GPU,实现 CPU 和 GPU 的并行处理,从而提升整体吞吐量。
  2. 通过统一内存为系统内存提供高带宽缓存:利用统一内存技术,Hopper GPU 可以高效地访问 Grace CPU 的系统内存,如同访问一个高带宽缓存,极大地便利了对海量数据集的处理。
  3. 优化的 AI 软件栈与开发者生产力:提供从硬件(Grace CPU + Hopper GPU)到 CUDA,再到上层训练和推理框架的完整、优化软件栈,提升了开发效率。
Page 51 - Grace Hopper 关键优势总结
Page 51 - Grace Hopper 关键优势总结

GTC'24 核心性能优化技术

以下是在 GTC'24 上展示的相关核心性能优化技术演讲列表:

推荐议程:
- S62550,今天下午3点,由 Mark Harris 主讲内存分配器。
- CWE61236,明天上午10点,由 DevTech 主讲 Grace Hopper,将对本次演讲中的问题进行更深入的解答。

Page 52 - GTC'24 相关演讲列表
Page 52 - GTC'24 相关演讲列表