03. GPU Architecture and Memory | GPU 物理架构、内存层级与核心硬件单元
难度: Hard | 标签: 硬件架构, GPU, 内存层级 | 目标人群: 核心 Infra 与算子开发
在算法工程师的面试中,仅仅懂 PyTorch 是不够的。大语言模型 (LLM) 是典型的 Memory Bound (访存受限) 与 Compute Bound (算力受限) 交织的产物。 如果你不能将软件算法映射到 GPU 的物理硬件上,就无法写出高性能的 Triton/CUDA 算子。
本节我们将深入 GPU 的核心物理架构,涵盖计算单元 (Tensor Core)、内存结构 (SRAM vs HBM)、以及它们在现代大模型算法(如 FlashAttention)中的实际应用。
相关阅读:
请前往实战篇进行相关代码练习:../03_CUDA_and_Triton_Kernels/04_Triton_GEMM_Tutorial.md../03_CUDA_and_Triton_Kernels/08_Triton_Flash_Attention.md
Q1:简述自 V100 以来 NVIDIA GPU 架构的演进,以及为了适应大模型计算做出了哪些核心改变?
点击展开查看解析
NVIDIA 的 GPU 架构代际演进,本质上是为了适应深度学习(尤其是 Transformer)对混合精度矩阵计算和极高显存带宽的无底洞需求。
- Volta 架构 (V100 - 2017):
- 革命性引入:首次引入了专为深度学习矩阵乘加 (MMA) 设计的 Tensor Core (张量核心),支持 FP16 混合精度计算。
- Ampere 架构 (A100 - 2020):
- 大模型标配:支持了 TF32 (Tensor Float 32) 和更广泛的 FP16/BF16。
- 架构升级:大幅提升了 HBM2 (High Bandwidth Memory) 的带宽(达到 1.5 - 2 TB/s)和 SRAM (L2 Cache) 的容量(达到 40MB)。引入了 MIG (多实例 GPU) 和非对称稀疏化 (Sparse Tensor Core)。
- Hopper 架构 (H100 - 2022):
- 专为 LLM 而生:引入了原生的 FP8 数据格式和 Transformer Engine。
- 内存与调度:加入了 Thread Block Cluster 和 TMA (Tensor Memory Accelerator),允许在不经过寄存器的情况下直接进行 HBM 到 SRAM 的异步数据搬运,彻底解放了带宽。
- Blackwell 架构 (B100/B200 - 2024):
- 极致的生成式 AI 优化:引入了第二代 Transformer Engine,原生支持更低精度的 FP4 计算格式,使得单卡推理吞吐量翻倍。
- 通信与互连革命:第五代 NVLink 双向带宽飙升至 1.8 TB/s(是 H100 的两倍),彻底打破万亿参数模型集群的通信墙。
Q2:什么是 Tensor Core?它与普通的 CUDA Core 有何本质区别,为什么能大幅加速矩阵计算?
点击展开查看解析
普通 CUDA Core vs Tensor Core
- CUDA Core (FP32/INT32): 每次时钟周期只能执行一个标量的 FMA (Fused Multiply-Add,乘加) 操作:
d = a * b + c。 - Tensor Core (FP16/BF16/FP8): 专为矩阵乘法设计。在单个时钟周期内,它可以执行一个完整的
矩阵的 MMA (Matrix Multiply-Accumulate) 操作: D = A * B + C。
为什么它这么快? Tensor Core 利用了半精度 (FP16) 或更低精度 (FP8) 来加速乘法,同时使用单精度 (FP32) 的累加器来保证加法精度。由于 Transformer 的自注意力和 MLP 几乎全是密集的矩阵乘法 (GEMM),Tensor Core 的算力通常是普通 CUDA Core 的 10倍以上(例如 A100 的 FP16 Tensor Core 算力可达 312 TFLOPs)。
Q3:请描述 GPU 的内存层级结构 (Memory Hierarchy),并解释为什么大模型推理通常是 Memory Bound (访存受限) 的?
点击展开查看解析
GPU 的内存结构像一个金字塔,越靠近计算单元的速度越快,但容量越小:
- Registers (寄存器):
- 速度最快(<1 个周期),容量极小(每个线程几十个 32-bit 寄存器)。
- 如果变量太多发生 Register Spilling (寄存器溢出),数据会被赶到极其缓慢的 Local Memory (物理上位于 HBM)。
- Shared Memory (SRAM / 片上共享内存):
- 速度极快(~19 TB/s),每个 SM (流多处理器) 只有几百 KB。
- 极度关键:它是同一个 Block 内所有线程协作、交换数据的唯一高速通道。Triton 的核心魔法就是帮你自动化管理了 SRAM 的分配和调度。
- L2 Cache:
- 所有 SM 共享,几十 MB,用于缓冲 HBM 的读写。
- HBM (全局显存 / Global Memory):
- 容量大 (40GB ~ 80GB),但速度相对极慢 (1.5 TB/s ~ 3 TB/s)。
- 如果算子的每一次计算都需要去 HBM 走一遭(如 PyTorch 原生的多次小操作),就会触发严重的 Memory Bound (访存受限)。
Q4:结合 GPU 的内存结构,解释 FlashAttention 是如何利用 SRAM 解决传统 Attention 的访存瓶颈的?
点击展开查看解析
在标准的自注意力机制中,
PyTorch 原生:计算出
,把它写回 HBM;读取 计算 Softmax,再写回 HBM;读取 Softmax 结果和 ,计算出最终结果。这种反复读写 大小数据的行为,直接导致了显存溢出 (OOM) 和速度极慢。 FlashAttention 的底层逻辑 (Tiling + SRAM):
- 切块 (Tiling):将巨大的
切成小块 (Blocks),使得这些小块刚好能塞进容量只有几百 KB 的 SRAM 中。 - 在 SRAM 内完成一切 (Fusion):把
和 加载到 SRAM,利用 Tensor Core 算出 。 - 在线归约 (Online Softmax):在 SRAM 内部直接更新局部最大值和指数和,避免写回
。 - 最后再乘以
,把最终结果写回 HBM。
- 切块 (Tiling):将巨大的
结论:把
Q5:在多卡分布式集群中,节点内通信的 PCIe 和 NVLink 有什么区别?
点击展开查看解析
当单卡装不下模型时,我们需要分布式训练。GPU 之间的物理连接方式决定了通信带宽 (Communication Bound):
- PCIe (外围组件互连):
- 传统的插槽,带宽有限 (PCIe Gen4 双向 64 GB/s)。
- 拓扑痛点:跨 GPU 通信通常需要经过 PCIe Switch 甚至 CPU,延迟高、带宽低。
- NVLink (NVIDIA 私有互连):
- 专为 GPU-to-GPU 设计的高速通道。
- A100 的 NVLink 3.0:每条链路 50 GB/s,单卡 12 条,总双向带宽高达 600 GB/s。这比 PCIe 快了近 10 倍。
- NVSwitch:允许同一台物理机内的 8 张 GPU 实现全互连 (All-to-All) 的无阻塞通信,这是跑满
All-Reduce和All-Gather极限带宽的硬件基础。
