Matthias Jouanneaux, Vishal Mehta, NVIDIA DevTech Compute | GPU Technology Conference/March 20th, 2024
NVIDIA Grace Hopper 超级芯片的设计允许 GPU 以 CPU 内存的速度访问 CPU 内存。
上图展示了 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 通过提升 GPU 利用率,显著改善了 AI 应用的性能。
AI 推理应用 (AI Inference Applications):
AI 微调应用 (AI Fine Tuning Applications):
数据库应用 (DataBase Applications):
注:GH200: Grace CPU 480GB LPDDR5, H100 96GB HBM3. DGX H100: H100 80GB HBM3.
cudaMalloc)无论是标准的 PCIe Hopper 配置还是 Grace Hopper 配置,使用 cudaMalloc 分配的 GPU 内存都无法被 CPU直接访问。CPU 侧的指针无法解引用以访问 GPU 内存中的数据。
cudaMallocManaged)对于使用 cudaMallocManaged 分配的 CUDA 统一内存,PCIe Hopper 和 Grace Hopper 的行为是相同的。当 CPU 或 GPU 首次访问数据时,会发生页错误(Page fault),并将相应的内存页迁移到访问方。
Grace Hopper 通过地址转换服务(Address Translation Service, ATS)实现真正的统一内存。
系统页表(System Page Table)可以将 CPU 分配的内存地址转换为 CPU 或 GPU 的物理地址。这使得 Grace CPU 和 Hopper GPU 能够通过 NVLINK C2C 互联,实现对 CPU 驻留(CPU-resident)和 GPU 驻留(GPU-resident)内存的直接访问或远程访问。
malloc/mmap)malloc() 分配的内存,在首次被 CPU 或 GPU 触碰时填充,或被迁移。对于最初位于 CPU 物理内存中的数据页(Page A),如果 Hopper GPU 对其进行频繁访问,系统会自动将该页迁移到 GPU 物理内存中,以提升后续访问的性能。而对于不频繁的访问,则会通过 NVLINK C2C 进行远程访问。
在 Grace Hopper 上,CUDA 内存调优 API 可用于 cudaMallocManaged 和系统分配的内存。
cudaMemPrefetchAsync 可以将 CPU 内存中的数据块异步预取到 GPU 内存中,适用于批量数据传输场景。cudaMemAdvise 并设置 cudaPreferredLocation,可以建议运行时将某块内存的首选位置设为 GPU,从而实现从 GPU 对 CPU 内存的直接、高速访问,而无需显式迁移。cudaMemcpy 在 Grace Hopper 上的性能表现优于传统 x86 系统。
上图展示了 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,在主机与设备间的数据传输带宽上实现了巨大飞跃,无论是固定内存还是可分页内存。
针对 AI 应用,Grace Hopper 的关键优化技术主要有两种:
cudaMemcpy):感谢:Matthias Langer (DevTech Compute APAC)
有监督微调是使用 Grace Hopper 统一内存、PyTorch 和 Megatron 进行的一种微调方法。其基本流程是:首先,使用网络规模的数据(Web-scale data)预训练一个大型语言模型(Pre-trained LLM);然后,利用领域特定数据或自定义知识库(Domain-specific data / custom knowledge base)对该预训练模型进行微调,从而得到一个针对特定任务或领域的微调后的大型语言模型(Fine-tuned LLM)。
下图展示了 LLM 模型中 Transformer 层的结构,其中包含一个注意力(Attention)模块和一个专家混合(Mixture of Experts)模块。MoE 模块通过 MoE 路由(MoE Routing)将输入分配给不同的专家(Expert 1, ..., Expert N),然后对专家的输出进行加权求和(Weighted Sum)。
为了更有效地利用内存,可以采用重新计算激活值的技术。
这是一种将激活值异步卸载到 CPU 内存的技术,以减少 GPU 内存的占用。
关键参数包括:
--cpu-offload-activations--cpu-offload-asynchronous--cpu-offload-size-threshold 67108864下图展示了一个约 10B 参数的 MoE 模型(MegatronLM 配置,用于 8 个 H100 GPU 系统)的临时张量分布。总大小为 251.2 GB,其中大小在 1000~1999 MB 之间的张量占了总量的 54.1%。
性能对比:
结果:如下图所示,对于一个 10B MoE 模型的有监督微调,使用 Grace Hopper 的卸载(offload GraceHopper)方案比在 x86+H100 上使用重新计算(recompute x86+H100)的方案快 25%。
本节介绍使用 Grace Hopper 统一内存、PyTorch 和 Huggingface 对 Llama 2 70B 模型进行 LoRA 微调。
模型与设置:
数据集: SAMSum 数据集,包含类似即时通讯的对话。
下图展示了使用 Grace Hopper Unified Memory、PyTorch 和 Huggingface 进行微调的性能。该图比较了不同配置下的微调时间与吞吐量,所有数据均已对 DGX H100 8 GPU 进行归一化处理。图表中,越靠左上方性能越好。
实验设置:7 个 epoch,每个 epoch 包含 368 个批次,全局批次大小为 40。
下表对比了使用和不使用 LoRA 及检查点技术时,单个层和整个模型的参数、优化器状态以及激活值的内存占用(单位:GB)。
对 Llama 2 70B 进行 LoRA 微调的核心策略是利用快速且大容量的 CPU 内存。
pack/unpack 激活钩子进行激活卸载,并使用后向钩子进行激活预取(prefetching)。下图的时间线展示了在前向和后向传播过程中,计算(Forward N, Backward N)与参数/激活的卸载(Offload)和预取(Prefetch)操作如何重叠,从而提高训练效率。
本节内容致谢 Thor Johnsen (TRT-LLM)。
在 LLM 推理中,使用 KV(键-值)缓存可以在生成新 token 时重用之前 token 的计算结果。
为多个用户提供服务的推理服务器需要高效地管理内存和计算资源。
持久化 KV 缓存技术通过将先前序列的计算结果保存在 CPU 内存中,进一步优化了性能。这项技术利用了高带宽直接 CPU 访问的优势。
下图比较了有无持久化 KV 缓存时的吞吐量(越高越好):
- 在 x86+A100、x86+H100 和 Grace Hopper 三种平台上,“上下文重载 + 持久化 KV 缓存”的吞吐量均高于“首次推理”。
- Grace Hopper 在两种情况下都表现出最高的吞吐量。
本节内容致谢 Weiliang Liu, Sahil Modi, Rajnish Aggarwal (TRT-LLM team), Martin Mehringer (DevTech Compute EMEA)。
trtexec ... --stronglyTyped --enableWeightStreaming --weightStreamingBudget=<budget_megabytes>M)来启用权重流式传输。下图展示了在单个 Grace Hopper 上推理 Llama2 70B FP16 模型(140GB 权重)的性能:
- 在批次大小为 16 时,首个 token 延迟低于 1 秒。
- 在批次大小为 96 时,达到最大吞吐量。
- 图中比较了 40% 权重在 GPU 和 60% 权重在 GPU 两种情况下的性能曲线。
本节内容致谢 Abdurrahman Yasar, Chirayu Garg (DevTech Compute NALA)。
推荐系统的工作流通常包含以下步骤:
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
基准测试通过随机生成查询并逐一执行流水线中的每个组件来完成。
用户: 22.1 万
物品: 85 万
交互: 400 万次
下图展示了端到端推荐系统的运行时分解:
- 图中比较了 x86+A100、x86+H100 和 Grace Hopper 的执行时间。
- 堆叠条形图清晰地显示了 CPU 运行时(如特征获取)和 GPU 运行时(如模型推理)的耗时。
- Grace Hopper 在 CPU 密集型任务(用户和物品特征获取)上显著减少了执行时间,从而降低了总延迟。
本节内容感谢 Rui Lan, Eyal Soha, Nikolay Sakharnykh (DevTech Compute NALA) 的贡献。
下图展示了两种架构在处理数据库查询时的主要区别。在 x86 平台,CPU 与 GPU 之间通过 64GB/s 的 PCIe 连接,这限制了数据从 CPU 内存到 GPU 内存的传输速度。而在 Grace Hopper 超级芯片中,Grace CPU 与 Hopper GPU 通过 900 GB/s 的 NVLink C2C 直接互连,极大地提升了数据交换带宽。
下图展示了在不同类型的数据库查询中,Grace Hopper 相对于 x86+A100 和 x86+H100 的性能优势。其核心技术是高带宽直接 CPU 访问。
总体而言,由于消除了 PCIe 瓶颈,Grace Hopper 在各类数据密集型查询中均展现出数倍的性能提升。
Grace Hopper 为 AI 应用带来的核心优势可以总结为以下三点:
以下是在 GTC'24 上展示的相关核心性能优化技术演讲列表:
推荐议程:
- S62550,今天下午3点,由 Mark Harris 主讲内存分配器。
- CWE61236,明天上午10点,由 DevTech 主讲 Grace Hopper,将对本次演讲中的问题进行更深入的解答。