ARTICLE · INTELLIGENCE

战地情报 · 详情页

来自尧图项目组的一线实战观察与深度解析

【AI Infra小白入门⑨】GPU硬件概论:从SM到Memory Wall,搞懂优化的物理基础

【AI Infra小白入门⑨】GPU硬件概论:从SM到Memory Wall,搞懂优化的物理基础

【AI Infra小白入门⑨】GPU硬件概论:从SM到Memory Wall,搞懂优化的物理基础

本文是「AI Infra 小白入门」系列的第九篇。不懂硬件的优化是玄学——你连GPU长什么样都不知道,怎么知道优化有没有用?本文用最通俗的语言,带你从里到外认识GPU:CPU和GPU有啥不一样?SM是什么?Tensor Core是啥?存储层次有几级?Memory Wall又是什么?


一、写在前面:为什么要懂硬件?

很多人觉得,“我就是写代码的,懂硬件干嘛?”

但在AI Infra领域,这句话不成立。因为:

  • 你做的所有性能优化,最终都要落到硬件上
  • 不知道硬件的"脾气",优化就是瞎试——试对了是运气,试错了是常态
  • 面试的时候,"这个优化为什么快"是必考题,答案最终都要落到硬件原理上

一句话:不懂硬件的优化,都是玄学。

先上一张GPU架构概览图:


二、GPU vs CPU:两种完全不同的设计哲学

先问一个问题:CPU和GPU都是处理器,为什么GPU做AI计算这么快?

答案是:它们的设计目标完全不一样。

维度CPUGPU
设计目标低延迟、复杂控制高吞吐、简单并行
核心数几个到几十个几千个(CUDA Core)
控制逻辑复杂(分支预测、乱序执行)简单(SIMT锁步执行)
缓存占比大(用来减少内存延迟)小
适用场景串行/逻辑复杂任务大规模数据并行任务

用人话讲:

  • CPU是几个聪明的工人——每个都很能干,能处理复杂任务,但人少
  • GPU是几千个听话的工人——每个都很简单,只能做简单计算,但人多力量大

深度学习的核心是什么?矩阵乘法——就是那种"数据量大、操作简单、高度并行"的任务。这种任务,交给几千个"听话的工人"一起干,自然比几个"聪明的工人"快得多。


三、GPU内部:SM是基本单元

GPU不是"一个"大处理器,而是由很多个**SM(Streaming Multiprocessor,流多处理器)**组成的。

3.1 GPU = N × SM

GPU = N × SM SM = 寄存器 + Shared Memory/L1 + CUDA Core + Tensor Core + 调度器

可以这样理解:

  • GPU是一个"大工厂"
  • SM就是工厂里的一个个"车间"
  • 每个车间里有很多"工人"(CUDA Core、Tensor Core)、“工作台”(寄存器、共享内存)、“工头”(调度器)

所有SM并行工作,这就是GPU算力的来源。

3.2 CUDA Core vs Tensor Core

SM里有两种主要的计算单元:

计算单元作用特点
CUDA Core通用计算(FP32/INT等)灵活,但单算力不算高
Tensor Core专用矩阵乘(MMA)专门做矩阵乘法,算力比CUDA Core高一个数量级

Tensor Core是GPU跑深度学习快的关键!

比如A100上,FP16 Tensor Core的算力是312 TFLOPS,而FP32 CUDA Core只有19.5 TFLOPS——差了16倍!

💡为什么现在都用FP16/BF16混合精度训练?一个重要原因就是——只有FP16/BF16/INT8这些精度才能用Tensor Core,算力才能上去。用FP32的话,只能用CUDA Core,慢很多。

3.3 SIMT执行模型

SIMT(Single Instruction, Multiple Threads)——单指令多线程。

简单说就是:同一个Warp(32个线程)里的线程,执行完全相同的指令,步调一致。

如果Warp里的线程走了不同的分支(比如if-else),会发生什么?

  • 硬件会先执行A分支,走B分支的线程"摸鱼"
  • 然后执行B分支,走A分支的线程"摸鱼"
  • 结果就是:性能下降了

这叫分支发散(Branch Divergence),是CUDA编程中要避免的常见问题。


四、存储层次:越近越快,越快越小

GPU的存储是分层的,从近到远、从快到慢:

层级容量(以A100为例)带宽延迟谁能访问
寄存器256KB / SM~20+ TB/s1 cycle每个线程私有
Shared Memory / L1192KB / SM~19 TB/s~30 cycles同一个Block内的线程共享
L2 Cache40MB~5+ TB/s~200 cycles所有SM共享
HBM(显存)40/80GB1.5-2 TB/s~400+ cycles所有SM都能访问
主机内存(DDR)TB级~50 GB/s(PCIe)~微秒级CPU/GPU通过PCIe交换

几个数量级的感受:

  • 寄存器比显存快几百倍
  • 每往下一层,延迟大约涨一个数量级
  • 带宽也是逐级下降

🎯优化第一性原理:让数据尽量停留在离计算近的地方。

几乎所有的性能优化,本质上都是在做这件事:

  • GEMM tiling:把数据块搬到共享内存里算
  • Kernel Fusion:把多个算子合成一个,避免中间结果写到显存再读回来
  • FlashAttention:分块计算,不让完整的N²矩阵落到显存
  • 寄存器复用:让数据尽量留在寄存器里,少去共享内存/显存读

五、Memory Wall:为什么带宽先成了瓶颈?

5.1 什么是Memory Wall?

有一个残酷的事实:算力的增长速度,远远快于显存带宽的增长速度。

比如A100:

  • FP16 Tensor Core算力:312 TFLOPS
  • HBM显存带宽:~1.5 TB/s

这意味着什么?如果一个kernel需要频繁读写显存,那么即使算力很强,也发挥不出来——显存带宽不够,喂不饱计算单元。

这就叫Memory Wall(显存墙)——算力再高,被带宽卡住了。

5.2 算术强度:判断你的kernel卡在哪

怎么判断一个kernel是被计算卡住了,还是被访存卡住了?

用算术强度(Arithmetic Intensity):

算术强度 = FLOPs / 访存字节数

意思是:每读1字节数据,能做多少次运算。

  • 如果算术强度高→ 计算多、访存少 →compute-bound(计算瓶颈)
  • 如果算术强度低→ 计算少、访存多 →memory-bound(访存瓶颈)

5.3 Roofline模型:一图看懂

Roofline模型是性能分析的经典工具,它画出来是这样的:

性能(FLOPS) ↑ │ ┌───────────── 算力上限(compute-bound) │ / │ / │ / ← 斜率 = 带宽 │ / │ / │ / │ / └────────────────────→ 算术强度(FLOPs/Byte) ↑ 拐点
  • 算术强度 < 拐点:memory-bound,性能由带宽决定
  • 算术强度 > 拐点:compute-bound,性能由算力决定

A100的拐点大约是200 FLOP/byte。也就是说:

  • 每读1字节数据,做不到200次运算 → 卡带宽
  • 做到了 → 卡算力

5.4 LLM Decode:典型的Memory-Bound

大模型推理的decode阶段,就是典型的memory-bound:

  • 每生成一个token,要把整个模型的权重都读一遍
  • 但计算量只有2P FLOPs(P是参数量)
  • 算术强度极低 → 完全被显存带宽卡住

这就是为什么量化对推理加速这么有效:

  • INT4量化,权重变成原来的1/8
  • 读得少了 → 带宽瓶颈缓解了 → 速度就上去了
  • (虽然计算精度降低了,但因为本来就不是计算瓶颈,所以影响不大)

六、主流GPU规格速览

规格A100H100H200Orin AGX
架构AmpereHopperHopperAmpere
显存40/80GB HBM2e80GB HBM3141GB HBM3e32/64GB(统一内存)
带宽1.6/2 TB/s3.35 TB/s4.8 TB/s~200 GB/s
FP16算力312 TFLOPS989 TFLOPS989 TFLOPS~170 TOPS (INT8)
FP8支持无有有无
NVLink600 GB/s900 GB/s900 GB/s-
功耗250-400W700W700W15-60W

给小白几个直观感受:

  • H100比A100算力翻了3倍,带宽翻了1.7倍
  • H200主要提升了显存容量和带宽(适合长上下文大模型)
  • 端侧的Orin和数据中心的A100完全不在一个量级——功耗差10倍,算力和带宽差一个数量级

七、GPU互联:多卡之间怎么"传话"

多卡训练/推理时,卡和卡之间需要通信。通信的"通道"有哪些?

互联方式带宽(双向)典型场景
PCIe 4.0 x1664 GB/s普通多卡、CPU↔GPU数据搬运
NVLink 3(A100)600 GB/s节点内8卡全互联
NVLink 4(H100)900 GB/s节点内8卡
NVSwitch全互联交换节点内任意两卡直连
InfiniBand(NDR)~50 GB/s跨节点通信

对并行策略的影响

通信带宽的差异,直接决定了并行策略的设计:

  • TP(张量并行):通信量很大(每层都要通信)→ 必须在NVLink域内(节点内)
  • PP(流水线并行):通信量小(每阶段只传激活)→ 可以跨节点走IB
  • DP(数据并行):每步通信一次梯度 → IB可承受,但也是瓶颈之一

💡 这就是"3D并行"的经典布局:TP放节点内,DP/PP跨节点——不是不想在节点间做TP,是IB带宽不够,扛不住TP的通信量。


八、总结一下

今天这篇文章,我们从里到外认识了GPU:

  1. GPU vs CPU:CPU是几个聪明的工人,GPU是几千个听话的工人——设计目标不同,适用场景不同
  2. SM架构:GPU由多个SM组成,SM里有CUDA Core(通用)和Tensor Core(矩阵乘专用)
  3. 存储层次:寄存器 > Shared Memory > L2 > HBM > 主机内存——逐级变慢,逐级变大。优化的核心就是让数据尽量靠近计算
  4. Memory Wall:算力增长比带宽快,导致很多kernel是memory-bound。用算术强度判断瓶颈类型
  5. GPU互联:NVLink比IB快一个数量级,决定了"TP节点内、PP/DP跨节点"的部署铁律

下一篇预告:我们来聊聊集合通信——分布式训练的基础。AllReduce、AllGather、ReduceScatter都是什么?Ring和Tree算法有什么区别?NCCL又是什么?


📚本系列导航:

  • 第1篇:一文搞懂什么是AI基础设施:五大方向与不可能三角
  • 第2篇:大厂AI Infra组织架构大揭秘
  • 第3篇:AI Infra岗位路线图:级别、薪资与成长路径
  • 第4篇:AI Infra学习路线图:从入门到精通的完整指南
  • 第5篇:AI Infra必备编程基础:Python、C++与Linux速通指南
  • 第6篇:AI Infra数学基础速成:线代、概率与微积分(工程向)
  • 第7篇:Transformer架构工程拆解:从Attention到MLA的优化密码
  • 第8篇:PyTorch框架Infra实战指南:Tensor、autograd与性能调试
  • 第9篇:GPU硬件概论:从SM到Memory Wall,搞懂优化的物理基础(本文)
  • 第10篇:集合通信基础:AllReduce、Ring算法与NCCL全解析
  • 更多内容持续更新中……
RELATED READING

延伸阅读

更多一线实战笔记与深度复盘,助您持续精进